diff --git a/java/external/src/javax/xml/transform/stream/StreamResult.java b/java/external/src/javax/xml/transform/stream/StreamResult.java index b99dc67..4071aad 100644 --- a/java/external/src/javax/xml/transform/stream/StreamResult.java +++ b/java/external/src/javax/xml/transform/stream/StreamResult.java @@ -18,6 +18,7 @@ package javax.xml.transform.stream; +import java.lang.reflect.Method; import javax.xml.transform.Result; import java.io.File; @@ -161,9 +162,15 @@ public class StreamResult implements Result { public void setSystemId(File f) { try { - // assume >= 1.4 - this.systemId = f.toURI().toString(); - } catch (java.lang.NoSuchMethodError nme) { + // use reflection to call f.toURI().toString(). + // Avoid compile time dependency on J2SE 1.4. + Method toURIMethod = f.getClass().getMethod("toURI", null); + Object uri = toURIMethod.invoke(f, null); + Method toStringMethod = uri.getClass().getMethod("toString", null); + this.systemId = (String)toStringMethod.invoke(uri, null); + } + catch (Exception exception) + { // running on J2SE 1.3? try { this.systemId = f.toURL().toString(); @@ -174,12 +181,6 @@ public class StreamResult implements Result { + malformedURLException.toString() ); } - } catch (Exception exception) { - throw new RuntimeException( - "javax.xml.transform.stream.StreamResult#setSystemId(File f):" - + " unexpected Exception: " + exception.toString() - ); - } }