src/share/classes/java/util/Properties.java

Print this page

        

*** 32,41 **** --- 32,42 ---- import java.io.OutputStream; import java.io.Reader; import java.io.Writer; import java.io.OutputStreamWriter; import java.io.BufferedWriter; + import java.lang.reflect.*; /** * The <code>Properties</code> class represents a persistent set of * properties. The <code>Properties</code> can be saved to a stream * or loaded from a stream. Each key and its corresponding value in
*** 1109,1114 **** --- 1110,1172 ---- /** A table of hex digits */ private static final char[] hexDigit = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; + + + static class XMLUtils { + private static Method load = null; + private static Method save = null; + static { + try { + // reference sun.util.xml.Utils reflectively + // to allow the Properties class be compiled in + // the absence of XML + Class<?> c = Class.forName("sun.util.xml.XMLUtils", true, null); + load = c.getMethod("load", Properties.class, InputStream.class); + save = c.getMethod("save", Properties.class, OutputStream.class, + String.class, String.class); + } catch (ClassNotFoundException cnf) { + } catch (NoSuchMethodException e) { + throw new AssertionError(e); + } + } + + static void invoke(Method m, Object... args) throws IOException { + try { + m.invoke(null, args); + } catch (IllegalAccessException e) { + throw new AssertionError(e); + } catch (InvocationTargetException e) { + Throwable t = e.getCause(); + if (t instanceof RuntimeException) + throw (RuntimeException)t; + + if (t instanceof IOException) { + throw (IOException)t; + } else { + throw new AssertionError(t); + } + } + } + + static void load(Properties props, InputStream in) + throws IOException, InvalidPropertiesFormatException + { + if (load == null) + throw new InternalError("sun.util.xml.XMLUtils not found"); + + invoke(load, props, in); + } + + static void save(Properties props, OutputStream os, String comment, + String encoding) + throws IOException + { + if (save == null) + throw new InternalError("sun.util.xml.XMLUtils not found"); + + invoke(save, props, os, comment, encoding); + } + } }