--- /dev/null 2013-04-25 14:33:00.000000000 -0400
+++ jaxp/patches/jaxp_src/6657673.patch 2013-04-25 14:43:01.000000000 -0400
@@ -0,0 +1,9198 @@
+--- src/com/sun/org/apache/bcel/internal/classfile/JavaClass.java 2013-04-16 14:28:09.232148559 +0100
++++ src/com/sun/org/apache/bcel/internal/classfile/JavaClass.java 2013-04-16 14:29:26.549394382 +0100
+@@ -63,6 +63,7 @@
+ import com.sun.org.apache.bcel.internal.util.ClassVector;
+ import com.sun.org.apache.bcel.internal.util.ClassQueue;
+ import com.sun.org.apache.bcel.internal.generic.Type;
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+
+ import java.io.*;
+ import java.util.StringTokenizer;
+@@ -77,6 +78,7 @@
+ * class file. Those interested in programatically generating classes
+ * should see the ClassGen class.
+
++ * @version $Id: JavaClass.java,v 1.4 2007-07-19 04:34:42 ofung Exp $
+ * @see com.sun.org.apache.bcel.internal.generic.ClassGen
+ * @author M. Dahm
+ */
+@@ -451,9 +453,9 @@
+ String debug = null, sep = null;
+
+ try {
+- debug = System.getProperty("JavaClass.debug");
++ debug = SecuritySupport.getSystemProperty("JavaClass.debug");
+ // Get path separator either / or \ usually
+- sep = System.getProperty("file.separator");
++ sep = SecuritySupport.getSystemProperty("file.separator");
+ }
+ catch (SecurityException e) {
+ // falls through
+--- src/com/sun/org/apache/bcel/internal/util/Class2HTML.java 2013-04-16 14:28:09.312149848 +0100
++++ src/com/sun/org/apache/bcel/internal/util/Class2HTML.java 2013-04-16 14:29:26.549394382 +0100
+@@ -82,6 +82,7 @@
+ * method in the Method's frame will jump to the appropiate method in
+ * the Code frame.
+ *
++ * @version $Id: Class2HTML.java,v 1.3 2007-07-19 04:34:52 ofung Exp $
+ * @author M. Dahm
+ */
+ public class Class2HTML implements Constants
+@@ -137,7 +138,7 @@
+ ClassParser parser=null;
+ JavaClass java_class=null;
+ String zip_file = null;
+- char sep = System.getProperty("file.separator").toCharArray()[0];
++ char sep = SecuritySupport.getSystemProperty("file.separator").toCharArray()[0];
+ String dir = "." + sep; // Where to store HTML files
+
+ try {
+--- src/com/sun/org/apache/bcel/internal/util/ClassPath.java 2013-04-16 14:28:09.316149912 +0100
++++ src/com/sun/org/apache/bcel/internal/util/ClassPath.java 2013-04-16 14:29:26.549394382 +0100
+@@ -66,6 +66,7 @@
+ * Responsible for loading (class) files from the CLASSPATH. Inspired by
+ * sun.tools.ClassPath.
+ *
++ * @version $Id: ClassPath.java,v 1.4 2007-07-19 04:34:52 ofung Exp $
+ * @author M. Dahm
+ */
+ public class ClassPath implements Serializable {
+@@ -83,7 +84,7 @@
+ ArrayList vec = new ArrayList();
+
+ for(StringTokenizer tok=new StringTokenizer(class_path,
+- System.getProperty("path.separator"));
++ SecuritySupport.getSystemProperty("path.separator"));
+ tok.hasMoreTokens();)
+ {
+ String path = tok.nextToken();
+@@ -92,7 +93,7 @@
+ File file = new File(path);
+
+ try {
+- if(file.exists()) {
++ if(SecuritySupport.getFileExists(file)) {
+ if(file.isDirectory())
+ vec.add(new Dir(path));
+ else
+@@ -143,8 +144,9 @@
+ String name = tok.nextToken();
+ File file = new File(name);
+
+- if(file.exists())
++ if(SecuritySupport.getFileExists(file)) {
+ list.add(name);
++ }
+ }
+ }
+ }
+@@ -159,9 +161,9 @@
+ String class_path, boot_path, ext_path;
+
+ try {
+- class_path = System.getProperty("java.class.path");
+- boot_path = System.getProperty("sun.boot.class.path");
+- ext_path = System.getProperty("java.ext.dirs");
++ class_path = SecuritySupport.getSystemProperty("java.class.path");
++ boot_path = SecuritySupport.getSystemProperty("sun.boot.class.path");
++ ext_path = SecuritySupport.getSystemProperty("java.ext.dirs");
+ }
+ catch (SecurityException e) {
+ return "";
+@@ -176,8 +178,8 @@
+ getPathComponents(ext_path, dirs);
+
+ for(Iterator e = dirs.iterator(); e.hasNext(); ) {
+- File ext_dir = new File((String)e.next());
+- String[] extensions = ext_dir.list(new FilenameFilter() {
++ File ext_dir = new File((String)e.next());
++ String[] extensions = SecuritySupport.getFileList(ext_dir, new FilenameFilter() {
+ public boolean accept(File dir, String name) {
+ name = name.toLowerCase();
+ return name.endsWith(".zip") || name.endsWith(".jar");
+@@ -342,7 +344,7 @@
+ final File file = new File(dir + File.separatorChar +
+ name.replace('.', File.separatorChar) + suffix);
+
+- return file.exists()? new ClassFile() {
++ return SecuritySupport.getFileExists(file)? new ClassFile() {
+ public InputStream getInputStream() throws IOException { return new FileInputStream(file); }
+
+ public String getPath() { try {
+--- src/com/sun/org/apache/bcel/internal/util/JavaWrapper.java 2013-04-16 14:28:09.316149912 +0100
++++ src/com/sun/org/apache/bcel/internal/util/JavaWrapper.java 2013-04-16 14:29:26.549394382 +0100
+@@ -72,6 +72,7 @@
+ *
java com.sun.org.apache.bcel.internal.util.JavaWrapper -Dbcel.classloader=foo.MyLoader <real.class.name> [arguments]
+ *
+ *
++ * @version $Id: JavaWrapper.java,v 1.3 2007-07-19 04:34:52 ofung Exp $
+ * @author M. Dahm
+ * @see ClassLoader
+ */
+@@ -79,7 +80,7 @@
+ private java.lang.ClassLoader loader;
+
+ private static java.lang.ClassLoader getClassLoader() {
+- String s = System.getProperty("bcel.classloader");
++ String s = SecuritySupport.getSystemProperty("bcel.classloader");
+
+ if((s == null) || "".equals(s))
+ s = "com.sun.org.apache.bcel.internal.util.ClassLoader";
+--- src/com/sun/org/apache/bcel/internal/util/SecuritySupport.java 1970-01-01 01:00:00.000000000 +0100
++++ src/com/sun/org/apache/bcel/internal/util/SecuritySupport.java 2013-04-16 14:29:26.549394382 +0100
+@@ -0,0 +1,223 @@
++/*
++ * reserved comment block
++ * DO NOT REMOVE OR ALTER!
++ */
++/*
++ * Copyright 2002-2004 The Apache Software Foundation.
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ * http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++
++package com.sun.org.apache.bcel.internal.util;
++
++import java.io.File;
++import java.io.FileInputStream;
++import java.io.FileNotFoundException;
++import java.io.FilenameFilter;
++import java.io.InputStream;
++import java.lang.ClassLoader;
++import java.security.AccessController;
++import java.security.PrivilegedAction;
++import java.security.PrivilegedActionException;
++import java.security.PrivilegedExceptionAction;
++import java.util.ListResourceBundle;
++import java.util.Locale;
++import java.util.MissingResourceException;
++import java.util.ResourceBundle;
++
++/**
++ * This class is duplicated for each subpackage so keep it in sync. It is
++ * package private and therefore is not exposed as part of any API.
++ *
++ * @xerces.internal
++ */
++public final class SecuritySupport {
++
++ private static final SecuritySupport securitySupport = new SecuritySupport();
++
++ /**
++ * Return an instance of this class.
++ */
++ public static SecuritySupport getInstance() {
++ return securitySupport;
++ }
++
++ static ClassLoader getContextClassLoader() {
++ return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ ClassLoader cl = null;
++ try {
++ cl = Thread.currentThread().getContextClassLoader();
++ } catch (SecurityException ex) {
++ }
++ return cl;
++ }
++ });
++ }
++
++ static ClassLoader getSystemClassLoader() {
++ return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ ClassLoader cl = null;
++ try {
++ cl = ClassLoader.getSystemClassLoader();
++ } catch (SecurityException ex) {
++ }
++ return cl;
++ }
++ });
++ }
++
++ static ClassLoader getParentClassLoader(final ClassLoader cl) {
++ return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ ClassLoader parent = null;
++ try {
++ parent = cl.getParent();
++ } catch (SecurityException ex) {
++ }
++
++ // eliminate loops in case of the boot
++ // ClassLoader returning itself as a parent
++ return (parent == cl) ? null : parent;
++ }
++ });
++ }
++
++ public static String getSystemProperty(final String propName) {
++ return (String) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ return System.getProperty(propName);
++ }
++ });
++ }
++
++ static FileInputStream getFileInputStream(final File file)
++ throws FileNotFoundException {
++ try {
++ return (FileInputStream) AccessController.doPrivileged(new PrivilegedExceptionAction() {
++ public Object run() throws FileNotFoundException {
++ return new FileInputStream(file);
++ }
++ });
++ } catch (PrivilegedActionException e) {
++ throw (FileNotFoundException) e.getException();
++ }
++ }
++
++ /**
++ * Return resource using the same classloader for the ObjectFactory by
++ * default or bootclassloader when Security Manager is in place
++ */
++ public static InputStream getResourceAsStream(final String name) {
++ if (System.getSecurityManager() != null) {
++ return getResourceAsStream(null, name);
++ } else {
++ return getResourceAsStream(findClassLoader(), name);
++ }
++ }
++
++ public static InputStream getResourceAsStream(final ClassLoader cl,
++ final String name) {
++ return (InputStream) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ InputStream ris;
++ if (cl == null) {
++ ris = Object.class.getResourceAsStream("/" + name);
++ } else {
++ ris = cl.getResourceAsStream(name);
++ }
++ return ris;
++ }
++ });
++ }
++
++ /**
++ * Gets a resource bundle using the specified base name, the default locale,
++ * and the caller's class loader.
++ *
++ * @param bundle the base name of the resource bundle, a fully qualified
++ * class name
++ * @return a resource bundle for the given base name and the default locale
++ */
++ public static ListResourceBundle getResourceBundle(String bundle) {
++ return getResourceBundle(bundle, Locale.getDefault());
++ }
++
++ /**
++ * Gets a resource bundle using the specified base name and locale, and the
++ * caller's class loader.
++ *
++ * @param bundle the base name of the resource bundle, a fully qualified
++ * class name
++ * @param locale the locale for which a resource bundle is desired
++ * @return a resource bundle for the given base name and locale
++ */
++ public static ListResourceBundle getResourceBundle(final String bundle, final Locale locale) {
++ return AccessController.doPrivileged(new PrivilegedAction() {
++ public ListResourceBundle run() {
++ try {
++ return (ListResourceBundle) ResourceBundle.getBundle(bundle, locale);
++ } catch (MissingResourceException e) {
++ try {
++ return (ListResourceBundle) ResourceBundle.getBundle(bundle, new Locale("en", "US"));
++ } catch (MissingResourceException e2) {
++ throw new MissingResourceException(
++ "Could not load any resource bundle by " + bundle, bundle, "");
++ }
++ }
++ }
++ });
++ }
++
++ public static String[] getFileList(final File f, final FilenameFilter filter) {
++ return ((String[]) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ return f.list(filter);
++ }
++ }));
++ }
++
++ public static boolean getFileExists(final File f) {
++ return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ return f.exists() ? Boolean.TRUE : Boolean.FALSE;
++ }
++ })).booleanValue();
++ }
++
++ static long getLastModified(final File f) {
++ return ((Long) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ return new Long(f.lastModified());
++ }
++ })).longValue();
++ }
++
++
++ /**
++ * Figure out which ClassLoader to use.
++ */
++ public static ClassLoader findClassLoader()
++ {
++ if (System.getSecurityManager()!=null) {
++ //this will ensure bootclassloader is used
++ return null;
++ } else {
++ return SecuritySupport.class.getClassLoader();
++ }
++ } // findClassLoader():ClassLoader
++
++ private SecuritySupport() {
++ }
++}
+--- src/com/sun/org/apache/xalan/internal/res/XSLMessages.java 2013-04-16 14:28:09.324150042 +0100
++++ src/com/sun/org/apache/xalan/internal/res/XSLMessages.java 2013-04-16 14:29:26.549394382 +0100
+@@ -22,68 +22,72 @@
+ */
+ package com.sun.org.apache.xalan.internal.res;
+
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+ import java.util.ListResourceBundle;
+
+ import com.sun.org.apache.xpath.internal.res.XPATHMessages;
+
+ /**
+- * Sets things up for issuing error messages. This class is misnamed, and
+- * should be called XalanMessages, or some such.
++ * Sets things up for issuing error messages. This class is misnamed, and should
++ * be called XalanMessages, or some such.
++ *
+ * @xsl.usage internal
+ */
+-public class XSLMessages extends XPATHMessages
+-{
++public class XSLMessages extends XPATHMessages {
+
+- /** The language specific resource object for Xalan messages. */
+- private static ListResourceBundle XSLTBundle = null;
+-
+- /** The class name of the Xalan error message string table. */
+- private static final String XSLT_ERROR_RESOURCES =
+- "com.sun.org.apache.xalan.internal.res.XSLTErrorResources";
+-
+- /**
+- * Creates a message from the specified key and replacement
+- * arguments, localized to the given locale.
+- *
+- * @param msgKey The key for the message text.
+- * @param args The arguments to be used as replacement text
+- * in the message created.
+- *
+- * @return The formatted message string.
+- */
+- public static final String createMessage(String msgKey, Object args[]) //throws Exception
+- {
+- if (XSLTBundle == null)
+- XSLTBundle = loadResourceBundle(XSLT_ERROR_RESOURCES);
+-
+- if (XSLTBundle != null)
++ /**
++ * The language specific resource object for Xalan messages.
++ */
++ private static ListResourceBundle XSLTBundle = null;
++ /**
++ * The class name of the Xalan error message string table.
++ */
++ private static final String XSLT_ERROR_RESOURCES =
++ "com.sun.org.apache.xalan.internal.res.XSLTErrorResources";
++
++ /**
++ * Creates a message from the specified key and replacement arguments,
++ * localized to the given locale.
++ *
++ * @param msgKey The key for the message text.
++ * @param args The arguments to be used as replacement text in the message
++ * created.
++ *
++ * @return The formatted message string.
++ */
++ public static String createMessage(String msgKey, Object args[]) //throws Exception
+ {
+- return createMsg(XSLTBundle, msgKey, args);
++ if (XSLTBundle == null) {
++ XSLTBundle = SecuritySupport.getResourceBundle(XSLT_ERROR_RESOURCES);
++ }
++
++ if (XSLTBundle != null) {
++ return createMsg(XSLTBundle, msgKey, args);
++ } else {
++ return "Could not load any resource bundles.";
++ }
+ }
+- else
+- return "Could not load any resource bundles.";
+- }
+-
+- /**
+- * Creates a message from the specified key and replacement
+- * arguments, localized to the given locale.
+- *
+- * @param msgKey The key for the message text.
+- * @param args The arguments to be used as replacement text
+- * in the message created.
+- *
+- * @return The formatted warning string.
+- */
+- public static final String createWarning(String msgKey, Object args[]) //throws Exception
+- {
+- if (XSLTBundle == null)
+- XSLTBundle = loadResourceBundle(XSLT_ERROR_RESOURCES);
+
+- if (XSLTBundle != null)
++ /**
++ * Creates a message from the specified key and replacement arguments,
++ * localized to the given locale.
++ *
++ * @param msgKey The key for the message text.
++ * @param args The arguments to be used as replacement text in the message
++ * created.
++ *
++ * @return The formatted warning string.
++ */
++ public static String createWarning(String msgKey, Object args[]) //throws Exception
+ {
+- return createMsg(XSLTBundle, msgKey, args);
++ if (XSLTBundle == null) {
++ XSLTBundle = SecuritySupport.getResourceBundle(XSLT_ERROR_RESOURCES);
++ }
++
++ if (XSLTBundle != null) {
++ return createMsg(XSLTBundle, msgKey, args);
++ } else {
++ return "Could not load any resource bundles.";
++ }
+ }
+- else
+- return "Could not load any resource bundles.";
+- }
+ }
+--- src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_de.java 2013-04-16 14:28:09.328150105 +0100
++++ src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_de.java 2013-04-16 14:29:26.549394382 +0100
+@@ -2410,68 +2410,4 @@
+ public static final String QUERY_HEADER = "MUSTER ";
+
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XSLTErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XSLTErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XSLTErrorResources) ResourceBundle.getBundle(className,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+ }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+-
+-}
+--- src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_es.java 2013-04-16 14:28:09.332150170 +0100
++++ src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_es.java 2013-04-16 14:29:26.549394382 +0100
+@@ -2409,69 +2409,4 @@
+ * @deprecated */
+ public static final String QUERY_HEADER = "PATTERN ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XSLTErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XSLTErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XSLTErrorResources) ResourceBundle.getBundle(className,
+- new Locale("es", "ES"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+-
+ }
+--- src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_fr.java 2013-04-16 14:28:09.332150170 +0100
++++ src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_fr.java 2013-04-16 14:29:26.549394382 +0100
+@@ -2410,68 +2410,4 @@
+ public static final String QUERY_HEADER = "PATTERN ";
+
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XSLTErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XSLTErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XSLTErrorResources) ResourceBundle.getBundle(className,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+ }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+-
+-}
+--- src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_it.java 2013-04-16 14:28:09.336150235 +0100
++++ src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_it.java 2013-04-16 14:29:26.549394382 +0100
+@@ -2409,69 +2409,4 @@
+ * @deprecated */
+ public static final String QUERY_HEADER = "MODELLO ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XSLTErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XSLTErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XSLTErrorResources) ResourceBundle.getBundle(className,
+- new Locale("it", "IT"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+-
+ }
+--- src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ja.java 2013-04-16 14:28:09.336150235 +0100
++++ src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ja.java 2013-04-16 14:29:26.549394382 +0100
+@@ -2410,68 +2410,4 @@
+ public static final String QUERY_HEADER = "PATTERN ";
+
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XSLTErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XSLTErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XSLTErrorResources) ResourceBundle.getBundle(className,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+ }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+-
+-}
+--- src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java 2013-04-16 14:28:09.324150042 +0100
++++ src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources.java 2013-04-16 14:29:26.549394382 +0100
+@@ -1446,68 +1446,4 @@
+ public static final String QUERY_HEADER = "PATTERN ";
+
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XSLTErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XSLTErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XSLTErrorResources) ResourceBundle.getBundle(className,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+ }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+-
+-}
+--- src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ko.java 2013-04-16 14:28:09.340150299 +0100
++++ src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_ko.java 2013-04-16 14:29:26.553394447 +0100
+@@ -2409,69 +2409,4 @@
+ * @deprecated */
+ public static final String QUERY_HEADER = "PATTERN ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XSLTErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XSLTErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XSLTErrorResources) ResourceBundle.getBundle(className,
+- new Locale("ko", "KR"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+-
+ }
+--- src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_CN.java 2013-04-16 14:28:09.340150299 +0100
++++ src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_CN.java 2013-04-16 14:29:26.553394447 +0100
+@@ -2409,69 +2409,4 @@
+ * @deprecated */
+ public static final String QUERY_HEADER = "PATTERN ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XSLTErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XSLTErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XSLTErrorResources) ResourceBundle.getBundle(className,
+- new Locale("zh", "CN"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "\u65e0\u6cd5\u88c5\u5165\u4efb\u4f55\u8d44\u6e90\u5305\u3002", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+-
+ }
+--- src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_TW.java 2013-04-16 14:28:09.344150364 +0100
++++ src/com/sun/org/apache/xalan/internal/res/XSLTErrorResources_zh_TW.java 2013-04-16 14:29:26.553394447 +0100
+@@ -2409,69 +2409,4 @@
+ * @deprecated */
+ public static final String QUERY_HEADER = "PATTERN ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XSLTErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XSLTErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XSLTErrorResources) ResourceBundle.getBundle(className,
+- new Locale("zh", "TW"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+-
+ }
+--- src/com/sun/org/apache/xalan/internal/utils/ConfigurationError.java 1970-01-01 01:00:00.000000000 +0100
++++ src/com/sun/org/apache/xalan/internal/utils/ConfigurationError.java 2013-04-16 14:29:26.553394447 +0100
+@@ -0,0 +1,61 @@
++/*
++ * reserved comment block
++ * DO NOT REMOVE OR ALTER!
++ */
++/*
++ * Copyright 2001-2004 The Apache Software Foundation.
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ * http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++/*
++ * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/15 02:39:54 jeffsuttor Exp $
++ */
++
++package com.sun.org.apache.xalan.internal.utils;
++
++/**
++ * A configuration error. This was an internal class in ObjectFactory previously
++ */
++public final class ConfigurationError
++ extends Error {
++
++ //
++ // Data
++ //
++
++ /** Exception. */
++ private Exception exception;
++
++ //
++ // Constructors
++ //
++
++ /**
++ * Construct a new instance with the specified detail string and
++ * exception.
++ */
++ ConfigurationError(String msg, Exception x) {
++ super(msg);
++ this.exception = x;
++ } // (String,Exception)
++
++ //
++ // methods
++ //
++
++ /** Returns the exception associated to this error. */
++ public Exception getException() {
++ return exception;
++ } // getException():Exception
++
++} // class ConfigurationError
+--- src/com/sun/org/apache/xalan/internal/utils/ObjectFactory.java 1970-01-01 01:00:00.000000000 +0100
++++ src/com/sun/org/apache/xalan/internal/utils/ObjectFactory.java 2013-04-16 14:29:26.553394447 +0100
+@@ -0,0 +1,659 @@
++/*
++ * reserved comment block
++ * DO NOT REMOVE OR ALTER!
++ */
++/*
++ * Copyright 2001-2004 The Apache Software Foundation.
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ * http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++/*
++ * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/15 02:39:54 jeffsuttor Exp $
++ */
++
++package com.sun.org.apache.xalan.internal.utils;
++
++import java.io.InputStream;
++import java.io.IOException;
++import java.io.File;
++import java.io.FileInputStream;
++
++import java.util.Properties;
++import java.io.BufferedReader;
++import java.io.InputStreamReader;
++
++/**
++ * This class is duplicated for each JAXP subpackage so keep it in sync.
++ * It is package private and therefore is not exposed as part of the JAXP
++ * API.
++ *
++ * This code is designed to implement the JAXP 1.1 spec pluggability
++ * feature and is designed to run on JDK version 1.1 and
++ * later, and to compile on JDK 1.2 and onward.
++ * The code also runs both as part of an unbundled jar file and
++ * when bundled as part of the JDK.
++ *
++ * This class was moved from the javax.xml.parsers.ObjectFactory
++ * class and modified to be used as a general utility for creating objects
++ * dynamically.
++ *
++ * @version $Id: ObjectFactory.java,v 1.11 2010-11-01 04:34:25 joehw Exp $
++ */
++public class ObjectFactory {
++
++ //
++ // Constants
++ //
++ private static final String XALAN_INTERNAL = "com.sun.org.apache.xalan.internal";
++ private static final String XERCES_INTERNAL = "com.sun.org.apache.xerces.internal";
++
++ // name of default properties file to look for in JDK's jre/lib directory
++ private static final String DEFAULT_PROPERTIES_FILENAME =
++ "xalan.properties";
++
++ private static final String SERVICES_PATH = "META-INF/services/";
++
++ /** Set to true for debugging */
++ private static final boolean DEBUG = false;
++
++ /** cache the contents of the xalan.properties file.
++ * Until an attempt has been made to read this file, this will
++ * be null; if the file does not exist or we encounter some other error
++ * during the read, this will be empty.
++ */
++ private static Properties fXalanProperties = null;
++
++ /***
++ * Cache the time stamp of the xalan.properties file so
++ * that we know if it's been modified and can invalidate
++ * the cache when necessary.
++ */
++ private static long fLastModified = -1;
++
++ //
++ // Public static methods
++ //
++
++ /**
++ * Finds the implementation Class object in the specified order. The
++ * specified order is the following:
++ *
++ * - query the system property using
System.getProperty
++ * - read
META-INF/services/factoryId file
++ * - use fallback classname
++ *
++ *
++ * @return instance of factory, never null
++ *
++ * @param factoryId Name of the factory to find, same as
++ * a property name
++ * @param fallbackClassName Implementation class name, if nothing else
++ * is found. Use null to mean no fallback.
++ *
++ * @exception ObjectFactory.ConfigurationError
++ */
++ public static Object createObject(String factoryId, String fallbackClassName)
++ throws ConfigurationError {
++ return createObject(factoryId, null, fallbackClassName);
++ } // createObject(String,String):Object
++
++ /**
++ * Finds the implementation Class object in the specified order. The
++ * specified order is the following:
++ *
++ * - query the system property using
System.getProperty
++ * - read
$java.home/lib/propertiesFilename file
++ * - read
META-INF/services/factoryId file
++ * - use fallback classname
++ *
++ *
++ * @return instance of factory, never null
++ *
++ * @param factoryId Name of the factory to find, same as
++ * a property name
++ * @param propertiesFilename The filename in the $java.home/lib directory
++ * of the properties file. If none specified,
++ * ${java.home}/lib/xalan.properties will be used.
++ * @param fallbackClassName Implementation class name, if nothing else
++ * is found. Use null to mean no fallback.
++ *
++ * @exception ObjectFactory.ConfigurationError
++ */
++ static Object createObject(String factoryId,
++ String propertiesFilename,
++ String fallbackClassName)
++ throws ConfigurationError
++ {
++ Class factoryClass = lookUpFactoryClass(factoryId,
++ propertiesFilename,
++ fallbackClassName);
++
++ if (factoryClass == null) {
++ throw new ConfigurationError(
++ "Provider for " + factoryId + " cannot be found", null);
++ }
++
++ try{
++ Object instance = factoryClass.newInstance();
++ if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
++ return instance;
++ } catch (Exception x) {
++ throw new ConfigurationError(
++ "Provider for factory " + factoryId
++ + " could not be instantiated: " + x, x);
++ }
++ } // createObject(String,String,String):Object
++
++ /**
++ * Finds the implementation Class object in the specified order. The
++ * specified order is the following:
++ *
++ * - query the system property using
System.getProperty
++ * - read
$java.home/lib/propertiesFilename file
++ * - read
META-INF/services/factoryId file
++ * - use fallback classname
++ *
++ *
++ * @return Class object of factory, never null
++ *
++ * @param factoryId Name of the factory to find, same as
++ * a property name
++ * @param propertiesFilename The filename in the $java.home/lib directory
++ * of the properties file. If none specified,
++ * ${java.home}/lib/xalan.properties will be used.
++ * @param fallbackClassName Implementation class name, if nothing else
++ * is found. Use null to mean no fallback.
++ *
++ * @exception ObjectFactory.ConfigurationError
++ */
++ public static Class lookUpFactoryClass(String factoryId)
++ throws ConfigurationError
++ {
++ return lookUpFactoryClass(factoryId, null, null);
++ } // lookUpFactoryClass(String):Class
++
++ /**
++ * Finds the implementation Class object in the specified order. The
++ * specified order is the following:
++ *
++ * - query the system property using
System.getProperty
++ * - read
$java.home/lib/propertiesFilename file
++ * - read
META-INF/services/factoryId file
++ * - use fallback classname
++ *
++ *
++ * @return Class object that provides factory service, never null
++ *
++ * @param factoryId Name of the factory to find, same as
++ * a property name
++ * @param propertiesFilename The filename in the $java.home/lib directory
++ * of the properties file. If none specified,
++ * ${java.home}/lib/xalan.properties will be used.
++ * @param fallbackClassName Implementation class name, if nothing else
++ * is found. Use null to mean no fallback.
++ *
++ * @exception ObjectFactory.ConfigurationError
++ */
++ public static Class lookUpFactoryClass(String factoryId,
++ String propertiesFilename,
++ String fallbackClassName)
++ throws ConfigurationError
++ {
++ String factoryClassName = lookUpFactoryClassName(factoryId,
++ propertiesFilename,
++ fallbackClassName);
++ ClassLoader cl = findClassLoader();
++
++ if (factoryClassName == null) {
++ factoryClassName = fallbackClassName;
++ }
++
++ // assert(className != null);
++ try{
++ Class providerClass = findProviderClass(factoryClassName,
++ cl,
++ true);
++ if (DEBUG) debugPrintln("created new instance of " + providerClass +
++ " using ClassLoader: " + cl);
++ return providerClass;
++ } catch (ClassNotFoundException x) {
++ throw new ConfigurationError(
++ "Provider " + factoryClassName + " not found", x);
++ } catch (Exception x) {
++ throw new ConfigurationError(
++ "Provider "+factoryClassName+" could not be instantiated: "+x,
++ x);
++ }
++ } // lookUpFactoryClass(String,String,String):Class
++
++ /**
++ * Finds the name of the required implementation class in the specified
++ * order. The specified order is the following:
++ *
++ * - query the system property using
System.getProperty
++ * - read
$java.home/lib/propertiesFilename file
++ * - read
META-INF/services/factoryId file
++ * - use fallback classname
++ *
++ *
++ * @return name of class that provides factory service, never null
++ *
++ * @param factoryId Name of the factory to find, same as
++ * a property name
++ * @param propertiesFilename The filename in the $java.home/lib directory
++ * of the properties file. If none specified,
++ * ${java.home}/lib/xalan.properties will be used.
++ * @param fallbackClassName Implementation class name, if nothing else
++ * is found. Use null to mean no fallback.
++ *
++ * @exception ObjectFactory.ConfigurationError
++ */
++ static String lookUpFactoryClassName(String factoryId,
++ String propertiesFilename,
++ String fallbackClassName)
++ {
++ // Use the system property first
++ try {
++ String systemProp = SecuritySupport.getSystemProperty(factoryId);
++ if (systemProp != null) {
++ if (DEBUG) debugPrintln("found system property, value=" + systemProp);
++ return systemProp;
++ }
++ } catch (SecurityException se) {
++ // Ignore and continue w/ next location
++ }
++
++ // Try to read from propertiesFilename, or
++ // $java.home/lib/xalan.properties
++ String factoryClassName = null;
++ // no properties file name specified; use
++ // $JAVA_HOME/lib/xalan.properties:
++ if (propertiesFilename == null) {
++ File propertiesFile = null;
++ boolean propertiesFileExists = false;
++ try {
++ String javah = SecuritySupport.getSystemProperty("java.home");
++ propertiesFilename = javah + File.separator +
++ "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
++ propertiesFile = new File(propertiesFilename);
++ propertiesFileExists = SecuritySupport.getFileExists(propertiesFile);
++ } catch (SecurityException e) {
++ // try again...
++ fLastModified = -1;
++ fXalanProperties = null;
++ }
++
++ synchronized (ObjectFactory.class) {
++ boolean loadProperties = false;
++ FileInputStream fis = null;
++ try {
++ // file existed last time
++ if(fLastModified >= 0) {
++ if(propertiesFileExists &&
++ (fLastModified < (fLastModified = SecuritySupport.getLastModified(propertiesFile)))) {
++ loadProperties = true;
++ } else {
++ // file has stopped existing...
++ if(!propertiesFileExists) {
++ fLastModified = -1;
++ fXalanProperties = null;
++ } // else, file wasn't modified!
++ }
++ } else {
++ // file has started to exist:
++ if(propertiesFileExists) {
++ loadProperties = true;
++ fLastModified = SecuritySupport.getLastModified(propertiesFile);
++ } // else, nothing's changed
++ }
++ if(loadProperties) {
++ // must never have attempted to read xalan.properties
++ // before (or it's outdeated)
++ fXalanProperties = new Properties();
++ fis = SecuritySupport.getFileInputStream(propertiesFile);
++ fXalanProperties.load(fis);
++ }
++ } catch (Exception x) {
++ fXalanProperties = null;
++ fLastModified = -1;
++ // assert(x instanceof FileNotFoundException
++ // || x instanceof SecurityException)
++ // In both cases, ignore and continue w/ next location
++ }
++ finally {
++ // try to close the input stream if one was opened.
++ if (fis != null) {
++ try {
++ fis.close();
++ }
++ // Ignore the exception.
++ catch (IOException exc) {}
++ }
++ }
++ }
++ if(fXalanProperties != null) {
++ factoryClassName = fXalanProperties.getProperty(factoryId);
++ }
++ } else {
++ FileInputStream fis = null;
++ try {
++ fis = SecuritySupport.getFileInputStream(new File(propertiesFilename));
++ Properties props = new Properties();
++ props.load(fis);
++ factoryClassName = props.getProperty(factoryId);
++ } catch (Exception x) {
++ // assert(x instanceof FileNotFoundException
++ // || x instanceof SecurityException)
++ // In both cases, ignore and continue w/ next location
++ }
++ finally {
++ // try to close the input stream if one was opened.
++ if (fis != null) {
++ try {
++ fis.close();
++ }
++ // Ignore the exception.
++ catch (IOException exc) {}
++ }
++ }
++ }
++ if (factoryClassName != null) {
++ if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
++ + factoryClassName);
++ return factoryClassName;
++ }
++
++ // Try Jar Service Provider Mechanism
++ return findJarServiceProviderName(factoryId);
++ } // lookUpFactoryClass(String,String):String
++
++ //
++ // Private static methods
++ //
++
++ /** Prints a message to standard error if debugging is enabled. */
++ private static void debugPrintln(String msg) {
++ if (DEBUG) {
++ System.err.println("JAXP: " + msg);
++ }
++ } // debugPrintln(String)
++
++ /**
++ * Figure out which ClassLoader to use. For JDK 1.2 and later use
++ * the context ClassLoader.
++ */
++ public static ClassLoader findClassLoader()
++ throws ConfigurationError
++ {
++ if (System.getSecurityManager()!=null) {
++ //this will ensure bootclassloader is used
++ return null;
++ }
++
++ // Figure out which ClassLoader to use for loading the provider
++ // class. If there is a Context ClassLoader then use it.
++ ClassLoader context = SecuritySupport.getContextClassLoader();
++ ClassLoader system = SecuritySupport.getSystemClassLoader();
++
++ ClassLoader chain = system;
++ while (true) {
++ if (context == chain) {
++ // Assert: we are on JDK 1.1 or we have no Context ClassLoader
++ // or any Context ClassLoader in chain of system classloader
++ // (including extension ClassLoader) so extend to widest
++ // ClassLoader (always look in system ClassLoader if Xalan
++ // is in boot/extension/system classpath and in current
++ // ClassLoader otherwise); normal classloaders delegate
++ // back to system ClassLoader first so this widening doesn't
++ // change the fact that context ClassLoader will be consulted
++ ClassLoader current = ObjectFactory.class.getClassLoader();
++
++ chain = system;
++ while (true) {
++ if (current == chain) {
++ // Assert: Current ClassLoader in chain of
++ // boot/extension/system ClassLoaders
++ return system;
++ }
++ if (chain == null) {
++ break;
++ }
++ chain = SecuritySupport.getParentClassLoader(chain);
++ }
++
++ // Assert: Current ClassLoader not in chain of
++ // boot/extension/system ClassLoaders
++ return current;
++ }
++
++ if (chain == null) {
++ // boot ClassLoader reached
++ break;
++ }
++
++ // Check for any extension ClassLoaders in chain up to
++ // boot ClassLoader
++ chain = SecuritySupport.getParentClassLoader(chain);
++ }
++
++ // Assert: Context ClassLoader not in chain of
++ // boot/extension/system ClassLoaders
++ return context;
++ } // findClassLoader():ClassLoader
++
++ /**
++ * Create an instance of a class using the same classloader for the ObjectFactory by default
++ * or bootclassloader when Security Manager is in place
++ */
++ public static Object newInstance(String className, boolean doFallback)
++ throws ConfigurationError
++ {
++ if (System.getSecurityManager()!=null) {
++ return newInstance(className, null, doFallback);
++ } else {
++ return newInstance(className,
++ findClassLoader (), doFallback);
++ }
++ }
++
++ /**
++ * Create an instance of a class using the specified ClassLoader
++ */
++ static Object newInstance(String className, ClassLoader cl,
++ boolean doFallback)
++ throws ConfigurationError
++ {
++ // assert(className != null);
++ try{
++ Class providerClass = findProviderClass(className, cl, doFallback);
++ Object instance = providerClass.newInstance();
++ if (DEBUG) debugPrintln("created new instance of " + providerClass +
++ " using ClassLoader: " + cl);
++ return instance;
++ } catch (ClassNotFoundException x) {
++ throw new ConfigurationError(
++ "Provider " + className + " not found", x);
++ } catch (Exception x) {
++ throw new ConfigurationError(
++ "Provider " + className + " could not be instantiated: " + x,
++ x);
++ }
++ }
++
++ /**
++ * Find a Class using the same classloader for the ObjectFactory by default
++ * or bootclassloader when Security Manager is in place
++ */
++ public static Class findProviderClass(String className, boolean doFallback)
++ throws ClassNotFoundException, ConfigurationError
++ {
++ if (System.getSecurityManager()!=null) {
++ return Class.forName(className);
++ } else {
++ return findProviderClass (className,
++ findClassLoader (), doFallback);
++ }
++ }
++
++ /**
++ * Find a Class using the specified ClassLoader
++ */
++ static Class findProviderClass(String className, ClassLoader cl,
++ boolean doFallback)
++ throws ClassNotFoundException, ConfigurationError
++ {
++ //throw security exception if the calling thread is not allowed to access the
++ //class. Restrict the access to the package classes as specified in java.security policy.
++ SecurityManager security = System.getSecurityManager();
++ try{
++ if (security != null){
++ if (className.startsWith(XALAN_INTERNAL) ||
++ className.startsWith(XERCES_INTERNAL)) {
++ cl = null;
++ } else {
++ final int lastDot = className.lastIndexOf(".");
++ String packageName = className;
++ if (lastDot != -1) packageName = className.substring(0, lastDot);
++ security.checkPackageAccess(packageName);
++ }
++ }
++ }catch(SecurityException e){
++ throw e;
++ }
++
++ Class providerClass;
++ if (cl == null) {
++ // XXX Use the bootstrap ClassLoader. There is no way to
++ // load a class using the bootstrap ClassLoader that works
++ // in both JDK 1.1 and Java 2. However, this should still
++ // work b/c the following should be true:
++ //
++ // (cl == null) iff current ClassLoader == null
++ //
++ // Thus Class.forName(String) will use the current
++ // ClassLoader which will be the bootstrap ClassLoader.
++ providerClass = Class.forName(className);
++ } else {
++ try {
++ providerClass = cl.loadClass(className);
++ } catch (ClassNotFoundException x) {
++ if (doFallback) {
++ // Fall back to current classloader
++ ClassLoader current = ObjectFactory.class.getClassLoader();
++ if (current == null) {
++ providerClass = Class.forName(className);
++ } else if (cl != current) {
++ cl = current;
++ providerClass = cl.loadClass(className);
++ } else {
++ throw x;
++ }
++ } else {
++ throw x;
++ }
++ }
++ }
++
++ return providerClass;
++ }
++
++ /**
++ * Find the name of service provider using Jar Service Provider Mechanism
++ *
++ * @return instance of provider class if found or null
++ */
++ private static String findJarServiceProviderName(String factoryId)
++ {
++ String serviceId = SERVICES_PATH + factoryId;
++ InputStream is = null;
++
++ // First try the Context ClassLoader
++ ClassLoader cl = findClassLoader();
++
++ is = SecuritySupport.getResourceAsStream(cl, serviceId);
++
++ // If no provider found then try the current ClassLoader
++ if (is == null) {
++ ClassLoader current = ObjectFactory.class.getClassLoader();
++ if (cl != current) {
++ cl = current;
++ is = SecuritySupport.getResourceAsStream(cl, serviceId);
++ }
++ }
++
++ if (is == null) {
++ // No provider found
++ return null;
++ }
++
++ if (DEBUG) debugPrintln("found jar resource=" + serviceId +
++ " using ClassLoader: " + cl);
++
++ // Read the service provider name in UTF-8 as specified in
++ // the jar spec. Unfortunately this fails in Microsoft
++ // VJ++, which does not implement the UTF-8
++ // encoding. Theoretically, we should simply let it fail in
++ // that case, since the JVM is obviously broken if it
++ // doesn't support such a basic standard. But since there
++ // are still some users attempting to use VJ++ for
++ // development, we have dropped in a fallback which makes a
++ // second attempt using the platform's default encoding. In
++ // VJ++ this is apparently ASCII, which is a subset of
++ // UTF-8... and since the strings we'll be reading here are
++ // also primarily limited to the 7-bit ASCII range (at
++ // least, in English versions), this should work well
++ // enough to keep us on the air until we're ready to
++ // officially decommit from VJ++. [Edited comment from
++ // jkesselm]
++ BufferedReader rd;
++ try {
++ rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
++ } catch (java.io.UnsupportedEncodingException e) {
++ rd = new BufferedReader(new InputStreamReader(is));
++ }
++
++ String factoryClassName = null;
++ try {
++ // XXX Does not handle all possible input as specified by the
++ // Jar Service Provider specification
++ factoryClassName = rd.readLine();
++ } catch (IOException x) {
++ // No provider found
++ return null;
++ }
++ finally {
++ try {
++ // try to close the reader.
++ rd.close();
++ }
++ // Ignore the exception.
++ catch (IOException exc) {}
++ }
++
++ if (factoryClassName != null &&
++ ! "".equals(factoryClassName)) {
++ if (DEBUG) debugPrintln("found in resource, value="
++ + factoryClassName);
++
++ // Note: here we do not want to fall back to the current
++ // ClassLoader because we want to avoid the case where the
++ // resource file was found using one ClassLoader and the
++ // provider class was instantiated using a different one.
++ return factoryClassName;
++ }
++
++ // No provider found
++ return null;
++ }
++
++} // class ObjectFactory
+--- src/com/sun/org/apache/xalan/internal/utils/SecuritySupport.java 1970-01-01 01:00:00.000000000 +0100
++++ src/com/sun/org/apache/xalan/internal/utils/SecuritySupport.java 2013-04-16 14:29:26.553394447 +0100
+@@ -0,0 +1,206 @@
++/*
++ * reserved comment block
++ * DO NOT REMOVE OR ALTER!
++ */
++/*
++ * Copyright 2002-2004 The Apache Software Foundation.
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ * http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++/*
++ * $Id: SecuritySupport.java,v 1.1.2.1 2005/08/01 02:08:48 jeffsuttor Exp $
++ */
++
++package com.sun.org.apache.xalan.internal.utils;
++
++import java.io.File;
++import java.io.FileInputStream;
++import java.io.FileNotFoundException;
++import java.io.InputStream;
++
++import java.security.AccessController;
++import java.security.PrivilegedAction;
++import java.security.PrivilegedActionException;
++import java.security.PrivilegedExceptionAction;
++import java.util.ListResourceBundle;
++import java.util.Locale;
++import java.util.MissingResourceException;
++import java.util.ResourceBundle;
++
++/**
++ * This class is duplicated for each subpackage so keep it in sync. It is
++ * package private and therefore is not exposed as part of any API.
++ *
++ * @xerces.internal
++ */
++public final class SecuritySupport {
++
++ private static final SecuritySupport securitySupport = new SecuritySupport();
++
++ /**
++ * Return an instance of this class.
++ */
++ public static SecuritySupport getInstance() {
++ return securitySupport;
++ }
++
++ static ClassLoader getContextClassLoader() {
++ return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ ClassLoader cl = null;
++ try {
++ cl = Thread.currentThread().getContextClassLoader();
++ } catch (SecurityException ex) {
++ }
++ return cl;
++ }
++ });
++ }
++
++ static ClassLoader getSystemClassLoader() {
++ return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ ClassLoader cl = null;
++ try {
++ cl = ClassLoader.getSystemClassLoader();
++ } catch (SecurityException ex) {
++ }
++ return cl;
++ }
++ });
++ }
++
++ static ClassLoader getParentClassLoader(final ClassLoader cl) {
++ return (ClassLoader) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ ClassLoader parent = null;
++ try {
++ parent = cl.getParent();
++ } catch (SecurityException ex) {
++ }
++
++ // eliminate loops in case of the boot
++ // ClassLoader returning itself as a parent
++ return (parent == cl) ? null : parent;
++ }
++ });
++ }
++
++ public static String getSystemProperty(final String propName) {
++ return (String) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ return System.getProperty(propName);
++ }
++ });
++ }
++
++ public static String getSystemProperty(final String propName, final String def) {
++ return (String) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ return System.getProperty(propName, def);
++ }
++ });
++ }
++
++ static FileInputStream getFileInputStream(final File file)
++ throws FileNotFoundException {
++ try {
++ return (FileInputStream) AccessController.doPrivileged(new PrivilegedExceptionAction() {
++ public Object run() throws FileNotFoundException {
++ return new FileInputStream(file);
++ }
++ });
++ } catch (PrivilegedActionException e) {
++ throw (FileNotFoundException)e.getException();
++ }
++ }
++
++ /**
++ * Return resource using the same classloader for the ObjectFactory by
++ * default or bootclassloader when Security Manager is in place
++ */
++ public static InputStream getResourceAsStream(final String name) {
++ if (System.getSecurityManager()!=null) {
++ return getResourceAsStream(null, name);
++ } else {
++ return getResourceAsStream(ObjectFactory.findClassLoader(), name);
++ }
++ }
++
++ public static InputStream getResourceAsStream(final ClassLoader cl,
++ final String name) {
++ return (InputStream) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ InputStream ris;
++ if (cl == null) {
++ ris = Object.class.getResourceAsStream("/"+name);
++ } else {
++ ris = cl.getResourceAsStream(name);
++ }
++ return ris;
++ }
++ });
++ }
++
++ /**
++ * Gets a resource bundle using the specified base name, the default locale, and the caller's class loader.
++ * @param bundle the base name of the resource bundle, a fully qualified class name
++ * @return a resource bundle for the given base name and the default locale
++ */
++ public static ListResourceBundle getResourceBundle(String bundle) {
++ return getResourceBundle(bundle, Locale.getDefault());
++ }
++
++ /**
++ * Gets a resource bundle using the specified base name and locale, and the caller's class loader.
++ * @param bundle the base name of the resource bundle, a fully qualified class name
++ * @param locale the locale for which a resource bundle is desired
++ * @return a resource bundle for the given base name and locale
++ */
++ public static ListResourceBundle getResourceBundle(final String bundle, final Locale locale) {
++ return AccessController.doPrivileged(new PrivilegedAction() {
++ public ListResourceBundle run() {
++ try {
++ return (ListResourceBundle)ResourceBundle.getBundle(bundle, locale);
++ } catch (MissingResourceException e) {
++ try {
++ return (ListResourceBundle)ResourceBundle.getBundle(bundle, new Locale("en", "US"));
++ } catch (MissingResourceException e2) {
++ throw new MissingResourceException(
++ "Could not load any resource bundle by " + bundle, bundle, "");
++ }
++ }
++ }
++ });
++ }
++
++ public static boolean getFileExists(final File f) {
++ return ((Boolean) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ return f.exists() ? Boolean.TRUE : Boolean.FALSE;
++ }
++ })).booleanValue();
++ }
++
++ static long getLastModified(final File f) {
++ return ((Long) AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ return new Long(f.lastModified());
++ }
++ })).longValue();
++ }
++
++
++ private SecuritySupport() {
++ }
++}
+--- src/com/sun/org/apache/xalan/internal/xslt/EnvironmentCheck.java 2013-04-16 14:28:09.344150364 +0100
++++ src/com/sun/org/apache/xalan/internal/xslt/EnvironmentCheck.java 2013-04-16 14:29:26.553394447 +0100
+@@ -22,6 +22,8 @@
+ */
+ package com.sun.org.apache.xalan.internal.xslt;
+
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
++
+ import java.io.File;
+ import java.io.FileWriter;
+ import java.io.PrintWriter;
+@@ -569,7 +571,7 @@
+ // Grab java version for later use
+ try
+ {
+- String javaVersion = System.getProperty("java.version");
++ String javaVersion = SecuritySupport.getSystemProperty("java.version");
+
+ h.put("java.version", javaVersion);
+ }
+@@ -588,7 +590,7 @@
+ {
+
+ // This is present in all JVM's
+- String cp = System.getProperty("java.class.path");
++ String cp = SecuritySupport.getSystemProperty("java.class.path");
+
+ h.put("java.class.path", cp);
+
+@@ -598,7 +600,7 @@
+ h.put(FOUNDCLASSES + "java.class.path", classpathJars);
+
+ // Also check for JDK 1.2+ type classpaths
+- String othercp = System.getProperty("sun.boot.class.path");
++ String othercp = SecuritySupport.getSystemProperty("sun.boot.class.path");
+
+ if (null != othercp)
+ {
+@@ -612,7 +614,7 @@
+
+ //@todo NOTE: We don't actually search java.ext.dirs for
+ // *.jar files therein! This should be updated
+- othercp = System.getProperty("java.ext.dirs");
++ othercp = SecuritySupport.getSystemProperty("java.ext.dirs");
+
+ if (null != othercp)
+ {
+--- src/com/sun/org/apache/xalan/internal/xslt/Process.java 2013-04-16 14:28:09.348150428 +0100
++++ src/com/sun/org/apache/xalan/internal/xslt/Process.java 2013-04-16 14:29:26.553394447 +0100
+@@ -55,6 +55,7 @@
+ import com.sun.org.apache.xalan.internal.Version;
+ import com.sun.org.apache.xalan.internal.res.XSLMessages;
+ import com.sun.org.apache.xalan.internal.res.XSLTErrorResources;
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+
+ //J2SE does not support Xalan interpretive
+ /*
+@@ -178,7 +179,7 @@
+ java.io.PrintWriter diagnosticsWriter = new PrintWriter(System.err, true);
+ java.io.PrintWriter dumpWriter = diagnosticsWriter;
+ ResourceBundle resbundle =
+- (XSLMessages.loadResourceBundle(
++ (SecuritySupport.getResourceBundle(
+ com.sun.org.apache.xml.internal.utils.res.XResourceBundle.ERROR_RESOURCES));
+ String flavor = "s2s";
+
+--- src/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java 2013-04-16 14:28:09.380150944 +0100
++++ src/com/sun/org/apache/xalan/internal/xsltc/compiler/Parser.java 2013-04-16 14:29:26.553394447 +0100
+@@ -400,7 +400,7 @@
+ }
+ }
+ catch (TypeCheckError e) {
+- reportError(ERROR, new ErrorMsg(e));
++ reportError(ERROR, new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR, e));
+ }
+ }
+
+@@ -420,7 +420,7 @@
+ }
+ catch (IOException e) {
+ if (_xsltc.debug()) e.printStackTrace();
+- reportError(ERROR,new ErrorMsg(e));
++ reportError(ERROR,new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR, e));
+ }
+ catch (SAXException e) {
+ Throwable ex = e.getException();
+@@ -428,15 +428,15 @@
+ e.printStackTrace();
+ if (ex != null) ex.printStackTrace();
+ }
+- reportError(ERROR, new ErrorMsg(e));
++ reportError(ERROR, new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR, e));
+ }
+ catch (CompilerException e) {
+ if (_xsltc.debug()) e.printStackTrace();
+- reportError(ERROR, new ErrorMsg(e));
++ reportError(ERROR, new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR, e));
+ }
+ catch (Exception e) {
+ if (_xsltc.debug()) e.printStackTrace();
+- reportError(ERROR, new ErrorMsg(e));
++ reportError(ERROR, new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR, e));
+ }
+ return null;
+ }
+--- src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.java 2013-04-16 14:28:09.400151266 +0100
++++ src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMessages.java 2013-04-16 14:29:26.553394447 +0100
+@@ -947,7 +947,12 @@
+ "Cannot set the feature ''{0}'' on this TransformerFactory."},
+
+ {ErrorMsg.JAXP_SECUREPROCESSING_FEATURE,
+- "FEATURE_SECURE_PROCESSING: Cannot set the feature to false when security manager is present."}
++ "FEATURE_SECURE_PROCESSING: Cannot set the feature to false when security manager is present."},
++
++ {ErrorMsg.DESERIALIZE_TRANSLET_ERR, "When Java security is enabled, " +
++ "support for deserializing TemplatesImpl is disabled." +
++ "This can be overridden by setting the jdk.xml.enableTemplatesImplDeserialization" +
++ " system property to true."}
+ };
+ }
+ }
+--- src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java 2013-04-16 14:28:09.420151588 +0100
++++ src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java 2013-04-16 14:29:26.553394447 +0100
+@@ -23,6 +23,7 @@
+
+ package com.sun.org.apache.xalan.internal.xsltc.compiler.util;
+
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+ import java.text.MessageFormat;
+ import java.util.Locale;
+ import java.util.ResourceBundle;
+@@ -46,6 +47,8 @@
+ Object[] _params = null;
+ private boolean _isWarningError;
+
++ Throwable _cause;
++
+ // Compiler error messages
+ public static final String MULTIPLE_STYLESHEET_ERR = "MULTIPLE_STYLESHEET_ERR";
+ public static final String TEMPLATE_REDEF_ERR = "TEMPLATE_REDEF_ERR";
+@@ -157,6 +160,8 @@
+ public static final String INVALID_NCNAME_ERR = "INVALID_NCNAME_ERR";
+ public static final String INVALID_METHOD_IN_OUTPUT = "INVALID_METHOD_IN_OUTPUT";
+
++ public static final String DESERIALIZE_TRANSLET_ERR = "DESERIALIZE_TEMPLATES_ERR";
++
+ // All error messages are localized and are stored in resource bundles.
+ // This array and the following 4 strings are read from that bundle.
+ private static ResourceBundle _bundle;
+@@ -167,7 +172,7 @@
+ public final static String RUNTIME_ERROR_KEY = "RUNTIME_ERROR_KEY";
+
+ static {
+- _bundle = ResourceBundle.getBundle(
++ _bundle = SecuritySupport.getResourceBundle(
+ "com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMessages",
+ Locale.getDefault());
+ }
+@@ -177,10 +182,11 @@
+ _line = 0;
+ }
+
+- public ErrorMsg(Throwable e) {
+- _code = null;
++ public ErrorMsg(String code, Throwable e) {
++ _code = code;
+ _message = e.getMessage();
+ _line = 0;
++ _cause = e;
+ }
+
+ public ErrorMsg(String message, int line) {
+@@ -232,6 +238,10 @@
+ _params[1] = param2;
+ }
+
++ public Throwable getCause() {
++ return _cause;
++ }
++
+ private String getFileName(SyntaxTreeNode node) {
+ Stylesheet stylesheet = node.getStylesheet();
+ if (stylesheet != null)
+--- src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/Util.java 2013-04-16 14:28:09.428151717 +0100
++++ src/com/sun/org/apache/xalan/internal/xsltc/compiler/util/Util.java 2013-04-16 14:29:26.553394447 +0100
+@@ -26,6 +26,7 @@
+ import java.util.StringTokenizer;
+
+ import com.sun.org.apache.bcel.internal.generic.Type;
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+ import com.sun.org.apache.xalan.internal.xsltc.compiler.Constants;
+ import com.sun.org.apache.xml.internal.utils.XML11Char;
+
+@@ -37,7 +38,7 @@
+ private static char filesep;
+
+ static {
+- String temp = System.getProperty("file.separator", "/");
++ String temp = SecuritySupport.getSystemProperty("file.separator", "/");
+ filesep = temp.charAt(0);
+ }
+
+--- src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java 2013-04-16 14:28:09.396151201 +0100
++++ src/com/sun/org/apache/xalan/internal/xsltc/compiler/XSLTC.java 2013-04-16 14:29:26.553394447 +0100
+@@ -41,10 +41,12 @@
+ import java.util.jar.Manifest;
+
+ import com.sun.org.apache.bcel.internal.classfile.JavaClass;
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+ import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
+ import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Util;
+ import com.sun.org.apache.xml.internal.dtm.DTM;
+
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+ import org.xml.sax.InputSource;
+ import org.xml.sax.XMLReader;
+
+@@ -257,7 +259,7 @@
+ return compile(input, _className);
+ }
+ catch (IOException e) {
+- _parser.reportError(Constants.FATAL, new ErrorMsg(e));
++ _parser.reportError(Constants.FATAL, new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR, e));
+ return false;
+ }
+ }
+@@ -276,7 +278,7 @@
+ return compile(input, name);
+ }
+ catch (IOException e) {
+- _parser.reportError(Constants.FATAL, new ErrorMsg(e));
++ _parser.reportError(Constants.FATAL, new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR, e));
+ return false;
+ }
+ }
+@@ -361,11 +363,11 @@
+ }
+ catch (Exception e) {
+ /*if (_debug)*/ e.printStackTrace();
+- _parser.reportError(Constants.FATAL, new ErrorMsg(e));
++ _parser.reportError(Constants.FATAL, new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR, e));
+ }
+ catch (Error e) {
+ if (_debug) e.printStackTrace();
+- _parser.reportError(Constants.FATAL, new ErrorMsg(e));
++ _parser.reportError(Constants.FATAL, new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR, e));
+ }
+ finally {
+ _reader = null; // reset this here to be sure it is not re-used
+@@ -573,7 +575,7 @@
+ */
+ public boolean setDestDirectory(String dstDirName) {
+ final File dir = new File(dstDirName);
+- if (dir.exists() || dir.mkdirs()) {
++ if (SecuritySupport.getFileExists(dir) || dir.mkdirs()) {
+ _destDir = dir;
+ return true;
+ }
+@@ -746,7 +748,7 @@
+ String parentDir = outFile.getParent();
+ if (parentDir != null) {
+ File parentFile = new File(parentDir);
+- if (!parentFile.exists())
++ if (!SecuritySupport.getFileExists(parentFile))
+ parentFile.mkdirs();
+ }
+ }
+--- src/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecord.java 2013-04-16 14:28:09.444151975 +0100
++++ src/com/sun/org/apache/xalan/internal/xsltc/dom/NodeSortRecord.java 2013-04-16 14:29:26.553394447 +0100
+@@ -32,6 +32,7 @@
+ import com.sun.org.apache.xalan.internal.xsltc.TransletException;
+ import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
+ import com.sun.org.apache.xml.internal.utils.StringComparable;
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+
+ /**
+ * Base class for sort records containing application specific sort keys
+@@ -111,7 +112,7 @@
+ try {
+ // -- W. Eliot Kimber (eliot@isogen.com)
+ colFactClassname =
+- System.getProperty("com.sun.org.apache.xalan.internal.xsltc.COLLATOR_FACTORY");
++ SecuritySupport.getSystemProperty("com.sun.org.apache.xalan.internal.xsltc.COLLATOR_FACTORY");
+ }
+ catch (SecurityException e) {
+ // If we can't read the propery, just use default collator
+--- src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java 2013-04-16 14:28:09.448152039 +0100
++++ src/com/sun/org/apache/xalan/internal/xsltc/runtime/BasisLibrary.java 2013-04-16 14:29:26.553394447 +0100
+@@ -23,6 +23,7 @@
+
+ package com.sun.org.apache.xalan.internal.xsltc.runtime;
+
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+ import java.text.DecimalFormat;
+ import java.text.DecimalFormatSymbols;
+ import java.text.FieldPosition;
+@@ -1518,7 +1519,7 @@
+
+ static {
+ String resource = "com.sun.org.apache.xalan.internal.xsltc.runtime.ErrorMessages";
+- m_bundle = ResourceBundle.getBundle(resource);
++ m_bundle = SecuritySupport.getResourceBundle(resource);
+ }
+
+ /**
+--- src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/WriterOutputBuffer.java 2013-04-16 14:28:09.456152168 +0100
++++ src/com/sun/org/apache/xalan/internal/xsltc/runtime/output/WriterOutputBuffer.java 2013-04-16 14:29:26.557394511 +0100
+@@ -23,6 +23,7 @@
+
+ package com.sun.org.apache.xalan.internal.xsltc.runtime.output;
+
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+ import java.io.BufferedWriter;
+ import java.io.IOException;
+ import java.io.Writer;
+@@ -36,7 +37,7 @@
+
+ static {
+ // Set a larger buffer size for Solaris
+- final String osName = System.getProperty("os.name");
++ final String osName = SecuritySupport.getSystemProperty("os.name");
+ if (osName.equalsIgnoreCase("solaris")) {
+ BUFFER_SIZE = 32 * KB;
+ }
+--- src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java 2013-04-16 14:28:09.460152233 +0100
++++ src/com/sun/org/apache/xalan/internal/xsltc/trax/TemplatesImpl.java 2013-04-16 14:29:26.557394511 +0100
+@@ -42,6 +42,7 @@
+ import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
+ import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
+ import com.sun.org.apache.xalan.internal.xsltc.runtime.Hashtable;
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+
+ /**
+ * @author Morten Jorgensen
+@@ -51,6 +52,8 @@
+ */
+ public final class TemplatesImpl implements Templates, Serializable {
+ static final long serialVersionUID = 673094361519270707L;
++ public final static String DESERIALIZE_TRANSLET = "jdk.xml.enableTemplatesImplDeserialization";
++
+ /**
+ * Name of the superclass of all translets. This is needed to
+ * determine which, among all classes comprising a translet,
+@@ -181,6 +184,15 @@
+ private void readObject(ObjectInputStream is)
+ throws IOException, ClassNotFoundException
+ {
++ SecurityManager security = System.getSecurityManager();
++ if (security != null){
++ String temp = SecuritySupport.getSystemProperty(DESERIALIZE_TRANSLET);
++ if (temp == null || !(temp.length()==0 || temp.equalsIgnoreCase("true"))) {
++ ErrorMsg err = new ErrorMsg(ErrorMsg.DESERIALIZE_TRANSLET_ERR);
++ throw new UnsupportedOperationException(err.toString());
++ }
++ }
++
+ is.defaultReadObject();
+ if (is.readBoolean()) {
+ _uriResolver = (URIResolver) is.readObject();
+--- src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java 2013-04-16 14:28:09.460152233 +0100
++++ src/com/sun/org/apache/xalan/internal/xsltc/trax/TransformerFactoryImpl.java 2013-04-16 14:29:26.557394511 +0100
+@@ -69,7 +69,7 @@
+ import com.sun.org.apache.xalan.internal.xsltc.compiler.XSLTC;
+ import com.sun.org.apache.xalan.internal.xsltc.compiler.util.ErrorMsg;
+ import com.sun.org.apache.xalan.internal.xsltc.dom.XSLTCDTMManager;
+-
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+
+ import org.xml.sax.InputSource;
+ import org.xml.sax.XMLFilter;
+@@ -839,8 +839,14 @@
+ // Check that the transformation went well before returning
+ if (bytecodes == null) {
+
+- ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR);
+- TransformerConfigurationException exc = new TransformerConfigurationException(err.toString());
++ Vector errs = xsltc.getErrors();
++ ErrorMsg err = null;
++ if (errs != null) {
++ err = (ErrorMsg)errs.get(errs.size()-1);
++ } else {
++ err = new ErrorMsg(ErrorMsg.JAXP_COMPILE_ERR);
++ }
++ TransformerConfigurationException exc = new TransformerConfigurationException(err.toString(), err.getCause());
+
+ // Pass compiler errors to the error listener
+ if (_errorListener != null) {
+@@ -1187,7 +1193,7 @@
+ // Find the parent directory of the translet.
+ String transletParentDir = transletFile.getParent();
+ if (transletParentDir == null)
+- transletParentDir = System.getProperty("user.dir");
++ transletParentDir = SecuritySupport.getSystemProperty("user.dir");
+
+ File transletParentFile = new File(transletParentDir);
+
+--- src/com/sun/org/apache/xerces/internal/dom/DOMMessageFormatter.java 2013-04-16 14:28:09.472152426 +0100
++++ src/com/sun/org/apache/xerces/internal/dom/DOMMessageFormatter.java 2013-04-16 14:29:26.557394511 +0100
+@@ -20,10 +20,10 @@
+
+
+ package com.sun.org.apache.xerces.internal.dom;
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+-import java.util.PropertyResourceBundle;
+
+ /**
+ * Used to format DOM error messages, using the system locale.
+@@ -31,6 +31,7 @@
+ * @xerces.internal
+ *
+ * @author Sandy Gao, IBM
++ * @version $Id: DOMMessageFormatter.java,v 1.6 2010-11-01 04:39:38 joehw Exp $
+ */
+ public class DOMMessageFormatter {
+ public static final String DOM_DOMAIN = "http://www.w3.org/dom/DOMTR";
+@@ -122,13 +123,13 @@
+ */
+ public static void init(){
+ if (locale != null) {
+- domResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.DOMMessages", locale);
+- serResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSerializerMessages", locale);
+- xmlResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages", locale);
++ domResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.DOMMessages", locale);
++ serResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSerializerMessages", locale);
++ xmlResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages", locale);
+ }else{
+- domResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.DOMMessages");
+- serResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSerializerMessages");
+- xmlResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages");
++ domResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.DOMMessages");
++ serResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSerializerMessages");
++ xmlResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages");
+ }
+ }
+
+--- src/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java 2013-04-16 14:28:09.532153393 +0100
++++ src/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java 2013-04-16 14:29:26.557394511 +0100
+@@ -20,6 +20,7 @@
+
+ package com.sun.org.apache.xerces.internal.impl.dv;
+
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+ import java.util.ResourceBundle;
+ import java.util.PropertyResourceBundle;
+ import java.util.MissingResourceException;
+@@ -34,6 +35,7 @@
+ *
+ * @author Sandy Gao, IBM
+ *
++ * @version $Id: DatatypeException.java,v 1.6 2010-11-01 04:39:43 joehw Exp $
+ */
+ public class DatatypeException extends Exception {
+
+@@ -84,7 +86,7 @@
+ */
+ public String getMessage() {
+ ResourceBundle resourceBundle = null;
+- resourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages");
++ resourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages");
+ if (resourceBundle == null)
+ throw new MissingResourceException("Property file not found!", "com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages", key);
+
+--- src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter.java 2013-04-16 14:28:09.552153715 +0100
++++ src/com/sun/org/apache/xerces/internal/impl/msg/XMLMessageFormatter.java 2013-04-16 14:29:26.557394511 +0100
+@@ -20,12 +20,11 @@
+
+ package com.sun.org.apache.xerces.internal.impl.msg;
+
++import com.sun.org.apache.xerces.internal.util.MessageFormatter;
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+-import java.util.PropertyResourceBundle;
+-
+-import com.sun.org.apache.xerces.internal.util.MessageFormatter;
+
+ /**
+ * XMLMessageFormatter provides error messages for the XML 1.0 Recommendation and for
+@@ -71,12 +70,12 @@
+
+ if (fResourceBundle == null || locale != fLocale) {
+ if (locale != null) {
+- fResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages", locale);
++ fResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages", locale);
+ // memorize the most-recent locale
+ fLocale = locale;
+ }
+ if (fResourceBundle == null)
+- fResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages");
++ fResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLMessages");
+ }
+
+ // format message
+--- src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java 2013-04-16 14:28:09.504152942 +0100
++++ src/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java 2013-04-16 14:29:26.557394511 +0100
+@@ -52,6 +52,7 @@
+ import com.sun.org.apache.xerces.internal.xni.XNIException;
+ import com.sun.org.apache.xerces.internal.xni.parser.*;
+ import com.sun.org.apache.xerces.internal.impl.Constants;
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+ import com.sun.xml.internal.stream.Entity;
+ import com.sun.org.apache.xerces.internal.xni.Augmentations;
+
+@@ -1811,7 +1812,7 @@
+ // get the user.dir property
+ String userDir = "";
+ try {
+- userDir = System.getProperty("user.dir");
++ userDir = SecuritySupport.getSystemProperty("user.dir");
+ }
+ catch (SecurityException se) {
+ }
+@@ -2155,9 +2156,6 @@
+ private static String expandSystemIdStrictOff(String systemId, String baseSystemId)
+ throws URI.MalformedURIException {
+
+- systemId = escapeNonUSAscii(systemId);
+- baseSystemId = escapeNonUSAscii(baseSystemId);
+-
+ URI systemURI = new URI(systemId, true);
+ // If it's already an absolute one, return it
+ if (systemURI.isAbsoluteURI()) {
+@@ -2623,64 +2621,6 @@
+
+ } // fixURI(String):String
+
+- /**
+- * Escape invalid URI characters.
+- *
+- * Passed a URI that contains invalid characters (like spaces, non-ASCII Unicode characters, and the like),
+- * this function percent encodes the invalid characters per the URI specification (i.e., as a sequence of
+- * %-encoded UTF-8 octets).
+- *
+- * N.B. There are two problems. If the URI contains a '%' character, that might be an indication that
+- * the URI has already been escaped by the author, or it might be an invalid '%'. In the former case,
+- * it's important not to escape it, or we'll wind up with invalid, doubly-escaped '%'s. In the latter,
+- * the URI is broken if we don't encode it. Similarly, a '#' character might be the start of a fragment
+- * identifier or it might be an invalid '#'.
+- *
+- * Given that the former is vastly more likely than the latter in each case (most users are familiar with
+- * the magic status of '%' and '#' and they occur relatively infrequently in filenames, and if the user parses
+- * a proper Java File, we will already have %-escaped the URI), we simply assume that %'s and #'s are legit.
+- *
+- * Very rarely, we may be wrong. If so, tell the user to fix the clearly broken URI.
+- */
+- protected static String escapeNonUSAscii(String str) {
+- if (str == null) {
+- return str;
+- }
+-
+- // get UTF-8 bytes for the string
+- StringBuffer buffer = new StringBuffer();
+- byte[] bytes = null;
+- byte b;
+- try {
+- bytes = str.getBytes("UTF-8");
+- } catch (java.io.UnsupportedEncodingException e) {
+- // should never happen
+- return str;
+- }
+- int len = bytes.length;
+- int ch;
+-
+- // for each byte
+- for (int i = 0; i < len; i++) {
+- b = bytes[i];
+- // for non-ascii character: make it positive, then escape
+- if (b < 0) {
+- ch = b + 256;
+- buffer.append('%');
+- buffer.append(gHexChs[ch >> 4]);
+- buffer.append(gHexChs[ch & 0xf]);
+- }
+- else if (b != '%' && b != '#' && gNeedEscaping[b]) {
+- buffer.append('%');
+- buffer.append(gAfterEscaping1[b]);
+- buffer.append(gAfterEscaping2[b]);
+- }
+- else {
+- buffer.append((char)b);
+- }
+- }
+- return buffer.toString();
+- }
+
+ //
+ // Package visible methods
+--- src/com/sun/org/apache/xerces/internal/impl/xpath/regex/RegexParser.java 2013-04-16 14:28:09.560153844 +0100
++++ src/com/sun/org/apache/xerces/internal/impl/xpath/regex/RegexParser.java 2013-04-16 14:29:26.557394511 +0100
+@@ -20,6 +20,7 @@
+
+ package com.sun.org.apache.xerces.internal.impl.xpath.regex;
+
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+@@ -94,10 +95,10 @@
+ public void setLocale(Locale locale) {
+ try {
+ if (locale != null) {
+- this.resources = ResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.xpath.regex.message", locale);
++ this.resources = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.xpath.regex.message", locale);
+ }
+ else {
+- this.resources = ResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.xpath.regex.message");
++ this.resources = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.xpath.regex.message");
+ }
+ }
+ catch (MissingResourceException mre) {
+--- src/com/sun/org/apache/xerces/internal/impl/xs/XSMessageFormatter.java 2013-04-16 14:28:09.572154037 +0100
++++ src/com/sun/org/apache/xerces/internal/impl/xs/XSMessageFormatter.java 2013-04-16 14:29:26.557394511 +0100
+@@ -20,11 +20,11 @@
+
+ package com.sun.org.apache.xerces.internal.impl.xs;
+
++import com.sun.org.apache.xerces.internal.util.MessageFormatter;
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+-import java.util.PropertyResourceBundle;
+-import com.sun.org.apache.xerces.internal.util.MessageFormatter;
+
+
+ /**
+@@ -34,6 +34,7 @@
+ * @xerces.internal
+ *
+ * @author Elena Litani, IBM
++ * @version $Id: XSMessageFormatter.java,v 1.6 2010-11-01 04:39:55 joehw Exp $
+ */
+ public class XSMessageFormatter implements MessageFormatter {
+ /**
+@@ -66,12 +67,12 @@
+
+ if (fResourceBundle == null || locale != fLocale) {
+ if (locale != null) {
+- fResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages", locale);
++ fResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages", locale);
+ // memorize the most-recent locale
+ fLocale = locale;
+ }
+ if (fResourceBundle == null)
+- fResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages");
++ fResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages");
+ }
+
+ String msg = fResourceBundle.getString(key);
+--- src/com/sun/org/apache/xerces/internal/jaxp/validation/JAXPValidationMessageFormatter.java 2013-04-16 14:28:09.600154489 +0100
++++ src/com/sun/org/apache/xerces/internal/jaxp/validation/JAXPValidationMessageFormatter.java 2013-04-16 14:29:26.557394511 +0100
+@@ -20,15 +20,16 @@
+
+ package com.sun.org.apache.xerces.internal.jaxp.validation;
+
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+-import java.util.PropertyResourceBundle;
+
+ /**
+ * Used to format JAXP Validation API error messages using a specified locale.
+ *
+ * @author Michael Glavassevich, IBM
++ * @version $Id: JAXPValidationMessageFormatter.java,v 1.5 2010-11-01 04:40:08 joehw Exp $
+ */
+ final class JAXPValidationMessageFormatter {
+
+@@ -54,11 +55,11 @@
+ ResourceBundle resourceBundle = null;
+ if (locale != null) {
+ resourceBundle =
+- PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.JAXPValidationMessages", locale);
++ SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.JAXPValidationMessages", locale);
+ }
+ else {
+ resourceBundle =
+- PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.JAXPValidationMessages");
++ SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.JAXPValidationMessages");
+ }
+
+ // format message
+--- src/com/sun/org/apache/xerces/internal/util/DatatypeMessageFormatter.java 2013-04-16 14:28:09.616154746 +0100
++++ src/com/sun/org/apache/xerces/internal/util/DatatypeMessageFormatter.java 2013-04-16 14:29:26.557394511 +0100
+@@ -20,15 +20,16 @@
+
+ package com.sun.org.apache.xerces.internal.util;
+
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+-import java.util.PropertyResourceBundle;
+ import java.util.ResourceBundle;
+
+ /**
+ * Used to format JAXP 1.3 Datatype API error messages using a specified locale.
+ *
+ * @author Neeraj Bajaj, Sun Microsystems
++ * @version $Id: DatatypeMessageFormatter.java,v 1.6 2010-11-01 04:40:14 joehw Exp $
+ */
+ public class DatatypeMessageFormatter {
+
+@@ -56,11 +57,11 @@
+ ResourceBundle resourceBundle = null;
+ if (locale != null) {
+ resourceBundle =
+- PropertyResourceBundle.getBundle(BASE_NAME, locale);
++ SecuritySupport.getResourceBundle(BASE_NAME, locale);
+ }
+ else {
+ resourceBundle =
+- PropertyResourceBundle.getBundle(BASE_NAME);
++ SecuritySupport.getResourceBundle(BASE_NAME);
+ }
+
+ // format message
+--- src/com/sun/org/apache/xerces/internal/util/SAXMessageFormatter.java 2013-04-16 14:28:09.620154811 +0100
++++ src/com/sun/org/apache/xerces/internal/util/SAXMessageFormatter.java 2013-04-16 14:29:26.557394511 +0100
+@@ -19,16 +19,17 @@
+ */
+ package com.sun.org.apache.xerces.internal.util;
+
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+-import java.util.PropertyResourceBundle;
+
+ /**
+ * Used to format SAX error messages using a specified locale.
+ *
+ * @author Michael Glavassevich, IBM
+ *
++ * @version $Id: SAXMessageFormatter.java,v 1.6 2010-11-01 04:40:14 joehw Exp $
+ */
+ public class SAXMessageFormatter {
+
+@@ -54,11 +55,11 @@
+ ResourceBundle resourceBundle = null;
+ if (locale != null) {
+ resourceBundle =
+- PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.SAXMessages", locale);
++ SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.SAXMessages", locale);
+ }
+ else {
+ resourceBundle =
+- PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.SAXMessages");
++ SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.SAXMessages");
+ }
+
+ // format message
+--- src/com/sun/org/apache/xerces/internal/util/SecurityManager.java 2013-04-16 14:28:09.620154811 +0100
++++ src/com/sun/org/apache/xerces/internal/util/SecurityManager.java 2013-04-16 14:29:26.557394511 +0100
+@@ -61,6 +61,8 @@
+
+ package com.sun.org.apache.xerces.internal.util;
+ import com.sun.org.apache.xerces.internal.impl.Constants;
++import java.security.AccessController;
++import java.security.PrivilegedAction;
+ /**
+ * This class is a container for parser settings that relate to
+ * security, or more specifically, it is intended to be used to prevent denial-of-service
+@@ -77,6 +79,7 @@
+ *
+ * @author Neil Graham, IBM
+ *
++ * @version $Id: SecurityManager.java,v 1.5 2010-11-01 04:40:14 joehw Exp $
+ */
+ public final class SecurityManager {
+
+@@ -176,41 +179,48 @@
+
+ private void readSystemProperties(){
+
+- //TODO: also read SYSTEM_PROPERTY_ELEMENT_ATTRIBUTE_LIMIT
+- try {
+- String value = System.getProperty(Constants.ENTITY_EXPANSION_LIMIT);
+- if(value != null && !value.equals("")){
+- entityExpansionLimit = Integer.parseInt(value);
+- if (entityExpansionLimit < 0)
+- entityExpansionLimit = DEFAULT_ENTITY_EXPANSION_LIMIT;
+- }
+- else
+- entityExpansionLimit = DEFAULT_ENTITY_EXPANSION_LIMIT;
+- }catch(Exception ex){}
+-
+- try {
+- String value = System.getProperty(Constants.MAX_OCCUR_LIMIT);
+- if(value != null && !value.equals("")){
+- maxOccurLimit = Integer.parseInt(value);
+- if (maxOccurLimit < 0)
+- maxOccurLimit = DEFAULT_MAX_OCCUR_NODE_LIMIT;
+- }
+- else
+- maxOccurLimit = DEFAULT_MAX_OCCUR_NODE_LIMIT;
+- }catch(Exception ex){}
+-
+- try {
+- String value = System.getProperty(Constants.SYSTEM_PROPERTY_ELEMENT_ATTRIBUTE_LIMIT);
+- if(value != null && !value.equals("")){
+- fElementAttributeLimit = Integer.parseInt(value);
+- if ( fElementAttributeLimit < 0)
+- fElementAttributeLimit = DEFAULT_ELEMENT_ATTRIBUTE_LIMIT;
+- }
+- else
+- fElementAttributeLimit = DEFAULT_ELEMENT_ATTRIBUTE_LIMIT;
++ //TODO: also read SYSTEM_PROPERTY_ELEMENT_ATTRIBUTE_LIMIT
++ try {
++ String value = getSystemProperty(Constants.ENTITY_EXPANSION_LIMIT);
++ if(value != null && !value.equals("")){
++ entityExpansionLimit = Integer.parseInt(value);
++ if (entityExpansionLimit < 0)
++ entityExpansionLimit = DEFAULT_ENTITY_EXPANSION_LIMIT;
++ }
++ else
++ entityExpansionLimit = DEFAULT_ENTITY_EXPANSION_LIMIT;
++ }catch(Exception ex){}
++
++ try {
++ String value = getSystemProperty(Constants.MAX_OCCUR_LIMIT);
++ if(value != null && !value.equals("")){
++ maxOccurLimit = Integer.parseInt(value);
++ if (maxOccurLimit < 0)
++ maxOccurLimit = DEFAULT_MAX_OCCUR_NODE_LIMIT;
++ }
++ else
++ maxOccurLimit = DEFAULT_MAX_OCCUR_NODE_LIMIT;
++ }catch(Exception ex){}
++
++ try {
++ String value = getSystemProperty(Constants.SYSTEM_PROPERTY_ELEMENT_ATTRIBUTE_LIMIT);
++ if(value != null && !value.equals("")){
++ fElementAttributeLimit = Integer.parseInt(value);
++ if ( fElementAttributeLimit < 0)
++ fElementAttributeLimit = DEFAULT_ELEMENT_ATTRIBUTE_LIMIT;
++ }
++ else
++ fElementAttributeLimit = DEFAULT_ELEMENT_ATTRIBUTE_LIMIT;
+
+ }catch(Exception ex){}
+
+ }
+
++ private String getSystemProperty(final String propName) {
++ return AccessController.doPrivileged(new PrivilegedAction() {
++ public String run() {
++ return System.getProperty(propName);
++ }
++ });
++ }
+ } // class SecurityManager
+--- src/com/sun/org/apache/xerces/internal/utils/ConfigurationError.java 1970-01-01 01:00:00.000000000 +0100
++++ src/com/sun/org/apache/xerces/internal/utils/ConfigurationError.java 2013-04-16 14:29:26.557394511 +0100
+@@ -0,0 +1,58 @@
++/*
++ * reserved comment block
++ * DO NOT REMOVE OR ALTER!
++ */
++/*
++ * Copyright 2001-2005 The Apache Software Foundation.
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ * http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++
++package com.sun.org.apache.xerces.internal.utils;
++
++/**
++ * A configuration error. This was an internal class in ObjectFactory previously
++ */
++public final class ConfigurationError
++ extends Error {
++
++ //
++ // Data
++ //
++
++ /** Exception. */
++ private Exception exception;
++
++ //
++ // Constructors
++ //
++
++ /**
++ * Construct a new instance with the specified detail string and
++ * exception.
++ */
++ ConfigurationError(String msg, Exception x) {
++ super(msg);
++ this.exception = x;
++ } // (String,Exception)
++
++ //
++ // methods
++ //
++
++ /** Returns the exception associated to this error. */
++ public Exception getException() {
++ return exception;
++ } // getException():Exception
++
++} // class ConfigurationError
+--- src/com/sun/org/apache/xerces/internal/utils/ObjectFactory.java 1970-01-01 01:00:00.000000000 +0100
++++ src/com/sun/org/apache/xerces/internal/utils/ObjectFactory.java 2013-04-16 14:29:26.557394511 +0100
+@@ -0,0 +1,436 @@
++/*
++ * reserved comment block
++ * DO NOT REMOVE OR ALTER!
++ */
++/*
++ * Copyright 2001-2005 The Apache Software Foundation.
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ * http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++
++package com.sun.org.apache.xerces.internal.utils;
++
++import java.io.InputStream;
++import java.io.IOException;
++import java.io.File;
++import java.io.FileInputStream;
++
++import java.util.Properties;
++import java.io.BufferedReader;
++import java.io.InputStreamReader;
++
++/**
++ * This class is duplicated for each JAXP subpackage so keep it in sync.
++ * It is package private and therefore is not exposed as part of the JAXP
++ * API.
++ *
++ * This code is designed to implement the JAXP 1.1 spec pluggability
++ * feature and is designed to run on JDK version 1.1 and
++ * later, and to compile on JDK 1.2 and onward.
++ * The code also runs both as part of an unbundled jar file and
++ * when bundled as part of the JDK.
++ *
++ *
++ * @version $Id: ObjectFactory.java,v 1.6 2010/04/23 01:44:34 joehw Exp $
++ */
++public final class ObjectFactory {
++
++ //
++ // Constants
++ //
++ private static final String DEFAULT_INTERNAL_CLASSES = "com.sun.org.apache.";
++
++ // name of default properties file to look for in JDK's jre/lib directory
++ private static final String DEFAULT_PROPERTIES_FILENAME = "xerces.properties";
++
++ /** Set to true for debugging */
++ private static final boolean DEBUG = isDebugEnabled();
++
++ /**
++ * Default columns per line.
++ */
++ private static final int DEFAULT_LINE_LENGTH = 80;
++
++ /** cache the contents of the xerces.properties file.
++ * Until an attempt has been made to read this file, this will
++ * be null; if the file does not exist or we encounter some other error
++ * during the read, this will be empty.
++ */
++ private static Properties fXercesProperties = null;
++
++ /***
++ * Cache the time stamp of the xerces.properties file so
++ * that we know if it's been modified and can invalidate
++ * the cache when necessary.
++ */
++ private static long fLastModified = -1;
++
++ //
++ // static methods
++ //
++
++ /**
++ * Finds the implementation Class object in the specified order. The
++ * specified order is the following:
++ *
++ * - query the system property using
System.getProperty
++ * - read
META-INF/services/factoryId file
++ * - use fallback classname
++ *
++ *
++ * @return Class object of factory, never null
++ *
++ * @param factoryId Name of the factory to find, same as
++ * a property name
++ * @param fallbackClassName Implementation class name, if nothing else
++ * is found. Use null to mean no fallback.
++ *
++ * @exception ObjectFactory.ConfigurationError
++ */
++ public static Object createObject(String factoryId, String fallbackClassName)
++ throws ConfigurationError {
++ return createObject(factoryId, null, fallbackClassName);
++ } // createObject(String,String):Object
++
++ /**
++ * Finds the implementation Class object in the specified order. The
++ * specified order is the following:
++ *
++ * - query the system property using
System.getProperty
++ * - read
$java.home/lib/propertiesFilename file
++ * - read
META-INF/services/factoryId file
++ * - use fallback classname
++ *
++ *
++ * @return Class object of factory, never null
++ *
++ * @param factoryId Name of the factory to find, same as
++ * a property name
++ * @param propertiesFilename The filename in the $java.home/lib directory
++ * of the properties file. If none specified,
++ * ${java.home}/lib/xerces.properties will be used.
++ * @param fallbackClassName Implementation class name, if nothing else
++ * is found. Use null to mean no fallback.
++ *
++ * @exception ObjectFactory.ConfigurationError
++ */
++ public static Object createObject(String factoryId,
++ String propertiesFilename,
++ String fallbackClassName)
++ throws ConfigurationError
++ {
++ if (DEBUG) debugPrintln("debug is on");
++
++ ClassLoader cl = findClassLoader();
++
++ // Use the system property first
++ try {
++ String systemProp = SecuritySupport.getSystemProperty(factoryId);
++ if (systemProp != null && systemProp.length() > 0) {
++ if (DEBUG) debugPrintln("found system property, value=" + systemProp);
++ return newInstance(systemProp, cl, true);
++ }
++ } catch (SecurityException se) {
++ // Ignore and continue w/ next location
++ }
++
++ // JAXP specific change
++ // always use fallback class to avoid the expense of constantly
++ // "stat"ing a non-existent "xerces.properties" and jar SPI entry
++ // see CR 6400863: Expensive creating of SAX parser in Mustang
++ if (fallbackClassName == null) {
++ throw new ConfigurationError(
++ "Provider for " + factoryId + " cannot be found", null);
++ }
++
++ if (DEBUG) debugPrintln("using fallback, value=" + fallbackClassName);
++ return newInstance(fallbackClassName, cl, true);
++
++ } // createObject(String,String,String):Object
++
++ //
++ // Private static methods
++ //
++
++ /** Returns true if debug has been enabled. */
++ private static boolean isDebugEnabled() {
++ try {
++ String val = SecuritySupport.getSystemProperty("xerces.debug");
++ // Allow simply setting the prop to turn on debug
++ return (val != null && (!"false".equals(val)));
++ }
++ catch (SecurityException se) {}
++ return false;
++ } // isDebugEnabled()
++
++ /** Prints a message to standard error if debugging is enabled. */
++ private static void debugPrintln(String msg) {
++ if (DEBUG) {
++ System.err.println("XERCES: " + msg);
++ }
++ } // debugPrintln(String)
++
++ /**
++ * Figure out which ClassLoader to use. For JDK 1.2 and later use
++ * the context ClassLoader.
++ */
++ public static ClassLoader findClassLoader()
++ throws ConfigurationError
++ {
++ if (System.getSecurityManager()!=null) {
++ //this will ensure bootclassloader is used
++ return null;
++ }
++ // Figure out which ClassLoader to use for loading the provider
++ // class. If there is a Context ClassLoader then use it.
++ ClassLoader context = SecuritySupport.getContextClassLoader();
++ ClassLoader system = SecuritySupport.getSystemClassLoader();
++
++ ClassLoader chain = system;
++ while (true) {
++ if (context == chain) {
++ // Assert: we are on JDK 1.1 or we have no Context ClassLoader
++ // or any Context ClassLoader in chain of system classloader
++ // (including extension ClassLoader) so extend to widest
++ // ClassLoader (always look in system ClassLoader if Xerces
++ // is in boot/extension/system classpath and in current
++ // ClassLoader otherwise); normal classloaders delegate
++ // back to system ClassLoader first so this widening doesn't
++ // change the fact that context ClassLoader will be consulted
++ ClassLoader current = ObjectFactory.class.getClassLoader();
++
++ chain = system;
++ while (true) {
++ if (current == chain) {
++ // Assert: Current ClassLoader in chain of
++ // boot/extension/system ClassLoaders
++ return system;
++ }
++ if (chain == null) {
++ break;
++ }
++ chain = SecuritySupport.getParentClassLoader(chain);
++ }
++
++ // Assert: Current ClassLoader not in chain of
++ // boot/extension/system ClassLoaders
++ return current;
++ }
++
++ if (chain == null) {
++ // boot ClassLoader reached
++ break;
++ }
++
++ // Check for any extension ClassLoaders in chain up to
++ // boot ClassLoader
++ chain = SecuritySupport.getParentClassLoader(chain);
++ };
++
++ // Assert: Context ClassLoader not in chain of
++ // boot/extension/system ClassLoaders
++ return context;
++ } // findClassLoader():ClassLoader
++
++ /**
++ * Create an instance of a class using the same classloader for the ObjectFactory by default
++ * or bootclassloader when Security Manager is in place
++ */
++ public static Object newInstance(String className, boolean doFallback)
++ throws ConfigurationError
++ {
++ if (System.getSecurityManager()!=null) {
++ return newInstance(className, null, doFallback);
++ } else {
++ return newInstance(className,
++ findClassLoader (), doFallback);
++ }
++ }
++
++ /**
++ * Create an instance of a class using the specified ClassLoader
++ */
++ public static Object newInstance(String className, ClassLoader cl,
++ boolean doFallback)
++ throws ConfigurationError
++ {
++ // assert(className != null);
++ try{
++ Class providerClass = findProviderClass(className, cl, doFallback);
++ Object instance = providerClass.newInstance();
++ if (DEBUG) debugPrintln("created new instance of " + providerClass +
++ " using ClassLoader: " + cl);
++ return instance;
++ } catch (ClassNotFoundException x) {
++ throw new ConfigurationError(
++ "Provider " + className + " not found", x);
++ } catch (Exception x) {
++ throw new ConfigurationError(
++ "Provider " + className + " could not be instantiated: " + x,
++ x);
++ }
++ }
++
++ /**
++ * Find a Class using the same classloader for the ObjectFactory by default
++ * or bootclassloader when Security Manager is in place
++ */
++ public static Class findProviderClass(String className, boolean doFallback)
++ throws ClassNotFoundException, ConfigurationError
++ {
++ if (System.getSecurityManager()!=null) {
++ return Class.forName(className);
++ } else {
++ return findProviderClass (className,
++ findClassLoader (), doFallback);
++ }
++ }
++ /**
++ * Find a Class using the specified ClassLoader
++ */
++ public static Class findProviderClass(String className, ClassLoader cl,
++ boolean doFallback)
++ throws ClassNotFoundException, ConfigurationError
++ {
++ //throw security exception if the calling thread is not allowed to access the package
++ //restrict the access to package as speicified in java.security policy
++ SecurityManager security = System.getSecurityManager();
++ if (security != null) {
++ if (className.startsWith(DEFAULT_INTERNAL_CLASSES)) {
++ cl = null;
++ } else {
++ final int lastDot = className.lastIndexOf(".");
++ String packageName = className;
++ if (lastDot != -1) packageName = className.substring(0, lastDot);
++ security.checkPackageAccess(packageName);
++ }
++ }
++ Class providerClass;
++ if (cl == null) {
++ //use the bootstrap ClassLoader.
++ providerClass = Class.forName(className);
++ } else {
++ try {
++ providerClass = cl.loadClass(className);
++ } catch (ClassNotFoundException x) {
++ if (doFallback) {
++ // Fall back to current classloader
++ ClassLoader current = ObjectFactory.class.getClassLoader();
++ if (current == null) {
++ providerClass = Class.forName(className);
++ } else if (cl != current) {
++ cl = current;
++ providerClass = cl.loadClass(className);
++ } else {
++ throw x;
++ }
++ } else {
++ throw x;
++ }
++ }
++ }
++
++ return providerClass;
++ }
++
++ /*
++ * Try to find provider using Jar Service Provider Mechanism
++ *
++ * @return instance of provider class if found or null
++ */
++ private static Object findJarServiceProvider(String factoryId)
++ throws ConfigurationError
++ {
++ String serviceId = "META-INF/services/" + factoryId;
++ InputStream is = null;
++
++ // First try the Context ClassLoader
++ ClassLoader cl = findClassLoader();
++
++ is = SecuritySupport.getResourceAsStream(cl, serviceId);
++
++ // If no provider found then try the current ClassLoader
++ if (is == null) {
++ ClassLoader current = ObjectFactory.class.getClassLoader();
++ if (cl != current) {
++ cl = current;
++ is = SecuritySupport.getResourceAsStream(cl, serviceId);
++ }
++ }
++
++ if (is == null) {
++ // No provider found
++ return null;
++ }
++
++ if (DEBUG) debugPrintln("found jar resource=" + serviceId +
++ " using ClassLoader: " + cl);
++
++ // Read the service provider name in UTF-8 as specified in
++ // the jar spec. Unfortunately this fails in Microsoft
++ // VJ++, which does not implement the UTF-8
++ // encoding. Theoretically, we should simply let it fail in
++ // that case, since the JVM is obviously broken if it
++ // doesn't support such a basic standard. But since there
++ // are still some users attempting to use VJ++ for
++ // development, we have dropped in a fallback which makes a
++ // second attempt using the platform's default encoding. In
++ // VJ++ this is apparently ASCII, which is a subset of
++ // UTF-8... and since the strings we'll be reading here are
++ // also primarily limited to the 7-bit ASCII range (at
++ // least, in English versions), this should work well
++ // enough to keep us on the air until we're ready to
++ // officially decommit from VJ++. [Edited comment from
++ // jkesselm]
++ BufferedReader rd;
++ try {
++ rd = new BufferedReader(new InputStreamReader(is, "UTF-8"), DEFAULT_LINE_LENGTH);
++ } catch (java.io.UnsupportedEncodingException e) {
++ rd = new BufferedReader(new InputStreamReader(is), DEFAULT_LINE_LENGTH);
++ }
++
++ String factoryClassName = null;
++ try {
++ // XXX Does not handle all possible input as specified by the
++ // Jar Service Provider specification
++ factoryClassName = rd.readLine();
++ } catch (IOException x) {
++ // No provider found
++ return null;
++ }
++ finally {
++ try {
++ // try to close the reader.
++ rd.close();
++ }
++ // Ignore the exception.
++ catch (IOException exc) {}
++ }
++
++ if (factoryClassName != null &&
++ ! "".equals(factoryClassName)) {
++ if (DEBUG) debugPrintln("found in resource, value="
++ + factoryClassName);
++
++ // Note: here we do not want to fall back to the current
++ // ClassLoader because we want to avoid the case where the
++ // resource file was found using one ClassLoader and the
++ // provider class was instantiated using a different one.
++ return newInstance(factoryClassName, cl, false);
++ }
++
++ // No provider found
++ return null;
++ }
++
++} // class ObjectFactory
+--- src/com/sun/org/apache/xerces/internal/utils/SecuritySupport.java 1970-01-01 01:00:00.000000000 +0100
++++ src/com/sun/org/apache/xerces/internal/utils/SecuritySupport.java 2013-04-16 14:29:26.557394511 +0100
+@@ -0,0 +1,199 @@
++/*
++ * reserved comment block
++ * DO NOT REMOVE OR ALTER!
++ */
++/*
++ * Copyright 2002,2004 The Apache Software Foundation.
++ *
++ * Licensed under the Apache License, Version 2.0 (the "License");
++ * you may not use this file except in compliance with the License.
++ * You may obtain a copy of the License at
++ *
++ * http://www.apache.org/licenses/LICENSE-2.0
++ *
++ * Unless required by applicable law or agreed to in writing, software
++ * distributed under the License is distributed on an "AS IS" BASIS,
++ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++ * See the License for the specific language governing permissions and
++ * limitations under the License.
++ */
++
++package com.sun.org.apache.xerces.internal.utils;
++
++import java.io.File;
++import java.io.FileInputStream;
++import java.io.FileNotFoundException;
++import java.io.InputStream;
++
++import java.security.AccessController;
++import java.security.PrivilegedAction;
++import java.security.PrivilegedActionException;
++import java.security.PrivilegedExceptionAction;
++import java.util.Locale;
++import java.util.MissingResourceException;
++import java.util.PropertyResourceBundle;
++import java.util.ResourceBundle;
++
++/**
++ * This class is duplicated for each subpackage so keep it in sync.
++ * It is package private and therefore is not exposed as part of any API.
++ *
++ * @xerces.internal
++ */
++public final class SecuritySupport {
++
++ private static final SecuritySupport securitySupport = new SecuritySupport();
++
++ /**
++ * Return an instance of this class.
++ */
++ public static SecuritySupport getInstance() {
++ return securitySupport;
++ }
++
++ static ClassLoader getContextClassLoader() {
++ return (ClassLoader)
++ AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ ClassLoader cl = null;
++ try {
++ cl = Thread.currentThread().getContextClassLoader();
++ } catch (SecurityException ex) { }
++ return cl;
++ }
++ });
++ }
++
++ static ClassLoader getSystemClassLoader() {
++ return (ClassLoader)
++ AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ ClassLoader cl = null;
++ try {
++ cl = ClassLoader.getSystemClassLoader();
++ } catch (SecurityException ex) {}
++ return cl;
++ }
++ });
++ }
++
++ static ClassLoader getParentClassLoader(final ClassLoader cl) {
++ return (ClassLoader)
++ AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ ClassLoader parent = null;
++ try {
++ parent = cl.getParent();
++ } catch (SecurityException ex) {}
++
++ // eliminate loops in case of the boot
++ // ClassLoader returning itself as a parent
++ return (parent == cl) ? null : parent;
++ }
++ });
++ }
++
++ public static String getSystemProperty(final String propName) {
++ return (String)
++ AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ return System.getProperty(propName);
++ }
++ });
++ }
++
++ static FileInputStream getFileInputStream(final File file)
++ throws FileNotFoundException
++ {
++ try {
++ return (FileInputStream)
++ AccessController.doPrivileged(new PrivilegedExceptionAction() {
++ public Object run() throws FileNotFoundException {
++ return new FileInputStream(file);
++ }
++ });
++ } catch (PrivilegedActionException e) {
++ throw (FileNotFoundException)e.getException();
++ }
++ }
++ /**
++ * Return resource using the same classloader for the ObjectFactory by default
++ * or bootclassloader when Security Manager is in place
++ */
++ public static InputStream getResourceAsStream(final String name) {
++ if (System.getSecurityManager()!=null) {
++ return getResourceAsStream(null, name);
++ } else {
++ return getResourceAsStream(ObjectFactory.findClassLoader(), name);
++ }
++ }
++
++ public static InputStream getResourceAsStream(final ClassLoader cl,
++ final String name)
++ {
++ return (InputStream)
++ AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ InputStream ris;
++ if (cl == null) {
++ ris = Object.class.getResourceAsStream("/"+name);
++ } else {
++ ris = cl.getResourceAsStream(name);
++ }
++ return ris;
++ }
++ });
++ }
++
++ /**
++ * Gets a resource bundle using the specified base name, the default locale, and the caller's class loader.
++ * @param bundle the base name of the resource bundle, a fully qualified class name
++ * @return a resource bundle for the given base name and the default locale
++ */
++ public static ResourceBundle getResourceBundle(String bundle) {
++ return getResourceBundle(bundle, Locale.getDefault());
++ }
++
++ /**
++ * Gets a resource bundle using the specified base name and locale, and the caller's class loader.
++ * @param bundle the base name of the resource bundle, a fully qualified class name
++ * @param locale the locale for which a resource bundle is desired
++ * @return a resource bundle for the given base name and locale
++ */
++ public static ResourceBundle getResourceBundle(final String bundle, final Locale locale) {
++ return AccessController.doPrivileged(new PrivilegedAction() {
++ public ResourceBundle run() {
++ try {
++ return PropertyResourceBundle.getBundle(bundle, locale);
++ } catch (MissingResourceException e) {
++ try {
++ return PropertyResourceBundle.getBundle(bundle, new Locale("en", "US"));
++ } catch (MissingResourceException e2) {
++ throw new MissingResourceException(
++ "Could not load any resource bundle by " + bundle, bundle, "");
++ }
++ }
++ }
++ });
++ }
++
++ static boolean getFileExists(final File f) {
++ return ((Boolean)
++ AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ return f.exists() ? Boolean.TRUE : Boolean.FALSE;
++ }
++ })).booleanValue();
++ }
++
++ static long getLastModified(final File f) {
++ return ((Long)
++ AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ return new Long(f.lastModified());
++ }
++ })).longValue();
++ }
++
++ private SecuritySupport () {}
++}
+--- src/com/sun/org/apache/xerces/internal/xinclude/XIncludeMessageFormatter.java 2013-04-16 14:28:09.628154939 +0100
++++ src/com/sun/org/apache/xerces/internal/xinclude/XIncludeMessageFormatter.java 2013-04-16 14:29:26.557394511 +0100
+@@ -20,11 +20,11 @@
+
+ package com.sun.org.apache.xerces.internal.xinclude;
+
++import com.sun.org.apache.xerces.internal.util.MessageFormatter;
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+ import java.util.ResourceBundle;
+-import java.util.PropertyResourceBundle;
+-import com.sun.org.apache.xerces.internal.util.MessageFormatter;
+
+ // TODO: fix error messages in XIncludeMessages.properties
+ /**
+@@ -32,6 +32,7 @@
+ *
+ * @author Peter McCracken, IBM
+ *
++ * @version $Id: XIncludeMessageFormatter.java,v 1.7 2010-11-01 04:40:18 joehw Exp $
+ */
+ public class XIncludeMessageFormatter implements MessageFormatter {
+
+@@ -61,12 +62,12 @@
+
+ if (fResourceBundle == null || locale != fLocale) {
+ if (locale != null) {
+- fResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.XIncludeMessages", locale);
++ fResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XIncludeMessages", locale);
+ // memorize the most-recent locale
+ fLocale = locale;
+ }
+ if (fResourceBundle == null)
+- fResourceBundle = PropertyResourceBundle.getBundle("com.sun.org.apache.xerces.internal.impl.msg.XIncludeMessages");
++ fResourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XIncludeMessages");
+ }
+
+ String msg = fResourceBundle.getString(key);
+--- src/com/sun/org/apache/xerces/internal/xpointer/XPointerMessageFormatter.java 2013-04-16 14:28:09.636155069 +0100
++++ src/com/sun/org/apache/xerces/internal/xpointer/XPointerMessageFormatter.java 2013-04-16 14:29:26.557394511 +0100
+@@ -24,6 +24,7 @@
+ import java.util.ResourceBundle;
+ import java.util.PropertyResourceBundle;
+ import com.sun.org.apache.xerces.internal.util.MessageFormatter;
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+
+ /**
+ * XPointerMessageFormatter provides error messages for the XPointer Framework
+@@ -31,6 +32,7 @@
+ *
+ * @xerces.internal
+ *
++ * @version $Id: XPointerMessageFormatter.java,v 1.5 2010-11-01 04:40:26 joehw Exp $
+ */
+ class XPointerMessageFormatter implements MessageFormatter {
+
+@@ -64,14 +66,14 @@
+
+ if (fResourceBundle == null || locale != fLocale) {
+ if (locale != null) {
+- fResourceBundle = PropertyResourceBundle.getBundle(
++ fResourceBundle = SecuritySupport.getResourceBundle(
+ "com.sun.org.apache.xerces.internal.impl.msg.XPointerMessages", locale);
+ // memorize the most-recent locale
+ fLocale = locale;
+ }
+ if (fResourceBundle == null)
+- fResourceBundle = PropertyResourceBundle
+- .getBundle("com.sun.org.apache.xerces.internal.impl.msg.XPointerMessages");
++ fResourceBundle = SecuritySupport.getResourceBundle(
++ "com.sun.org.apache.xerces.internal.impl.msg.XPointerMessages");
+ }
+
+ String msg = fResourceBundle.getString(key);
+--- src/com/sun/org/apache/xml/internal/dtm/DTMManager.java 2013-04-16 14:28:09.644155197 +0100
++++ src/com/sun/org/apache/xml/internal/dtm/DTMManager.java 2013-04-16 14:29:26.557394511 +0100
+@@ -26,6 +26,7 @@
+ import com.sun.org.apache.xml.internal.res.XMLMessages;
+ import com.sun.org.apache.xml.internal.utils.PrefixResolver;
+ import com.sun.org.apache.xml.internal.utils.XMLStringFactory;
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+
+ /**
+ * A DTMManager instance can be used to create DTM and
+@@ -358,7 +359,7 @@
+ {
+ try
+ {
+- debug = System.getProperty("dtm.debug") != null;
++ debug = SecuritySupport.getSystemProperty("dtm.debug") != null;
+ }
+ catch (SecurityException ex){}
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLErrorResources_ca.java 2013-04-16 14:28:09.664155519 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLErrorResources_ca.java 2013-04-16 14:29:26.557394511 +0100
+@@ -24,9 +24,6 @@
+
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -442,67 +439,4 @@
+ };
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XMLErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XMLErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XMLErrorResources) ResourceBundle.getBundle(className,
+- new Locale("ca", "ES"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLErrorResources_cs.java 2013-04-16 14:28:09.664155519 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLErrorResources_cs.java 2013-04-16 14:29:26.557394511 +0100
+@@ -24,9 +24,6 @@
+
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -442,67 +439,4 @@
+ };
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XMLErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XMLErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XMLErrorResources) ResourceBundle.getBundle(className,
+- new Locale("cs", "CZ"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLErrorResources_de.java 2013-04-16 14:28:09.664155519 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLErrorResources_de.java 2013-04-16 14:29:26.561394576 +0100
+@@ -24,9 +24,6 @@
+
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -442,67 +439,4 @@
+ };
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XMLErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XMLErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XMLErrorResources) ResourceBundle.getBundle(className,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLErrorResources_es.java 2013-04-16 14:28:09.664155519 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLErrorResources_es.java 2013-04-16 14:29:26.561394576 +0100
+@@ -24,9 +24,6 @@
+
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -442,67 +439,4 @@
+ };
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XMLErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XMLErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XMLErrorResources) ResourceBundle.getBundle(className,
+- new Locale("es", "ES"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLErrorResources_fr.java 2013-04-16 14:28:09.664155519 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLErrorResources_fr.java 2013-04-16 14:29:26.561394576 +0100
+@@ -24,9 +24,6 @@
+
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -442,67 +439,4 @@
+ };
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XMLErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XMLErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XMLErrorResources) ResourceBundle.getBundle(className,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLErrorResources_it.java 2013-04-16 14:28:09.664155519 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLErrorResources_it.java 2013-04-16 14:29:26.561394576 +0100
+@@ -24,9 +24,6 @@
+
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -442,67 +439,4 @@
+ };
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XMLErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XMLErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XMLErrorResources) ResourceBundle.getBundle(className,
+- new Locale("it", "IT"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLErrorResources_ja.java 2013-04-16 14:28:09.664155519 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLErrorResources_ja.java 2013-04-16 14:29:26.561394576 +0100
+@@ -24,9 +24,6 @@
+
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -442,67 +439,4 @@
+ };
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XMLErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XMLErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XMLErrorResources) ResourceBundle.getBundle(className,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLErrorResources.java 2013-04-16 14:28:09.660155456 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLErrorResources.java 2013-04-16 14:29:26.557394511 +0100
+@@ -24,9 +24,6 @@
+
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -461,67 +458,4 @@
+ return msgCopy;
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XMLErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XMLErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XMLErrorResources) ResourceBundle.getBundle(className,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLErrorResources_ko.java 2013-04-16 14:28:09.664155519 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLErrorResources_ko.java 2013-04-16 14:29:26.561394576 +0100
+@@ -24,9 +24,6 @@
+
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -442,67 +439,4 @@
+ };
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XMLErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XMLErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XMLErrorResources) ResourceBundle.getBundle(className,
+- new Locale("ko", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLErrorResources_sk.java 2013-04-16 14:28:09.664155519 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLErrorResources_sk.java 2013-04-16 14:29:26.561394576 +0100
+@@ -24,9 +24,6 @@
+
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -442,67 +439,4 @@
+ };
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XMLErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XMLErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XMLErrorResources) ResourceBundle.getBundle(className,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLErrorResources_tr.java 2013-04-16 14:28:09.668155584 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLErrorResources_tr.java 2013-04-16 14:29:26.561394576 +0100
+@@ -24,9 +24,6 @@
+
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -442,67 +439,4 @@
+ };
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XMLErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XMLErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XMLErrorResources) ResourceBundle.getBundle(className,
+- new Locale("tr", "TR"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_CN.java 2013-04-16 14:28:09.668155584 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_CN.java 2013-04-16 14:29:26.561394576 +0100
+@@ -24,9 +24,6 @@
+
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -442,67 +439,4 @@
+ };
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XMLErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XMLErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XMLErrorResources) ResourceBundle.getBundle(className,
+- new Locale("zh", "CN"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "\u65e0\u6cd5\u88c5\u5165\u4efb\u4f55\u8d44\u6e90\u5305\u3002", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_TW.java 2013-04-16 14:28:09.668155584 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLErrorResources_zh_TW.java 2013-04-16 14:29:26.561394576 +0100
+@@ -24,9 +24,6 @@
+
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -442,67 +439,4 @@
+ };
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XMLErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XMLErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XMLErrorResources) ResourceBundle.getBundle(className,
+- new Locale("zh", "TW"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xml/internal/res/XMLMessages.java 2013-04-16 14:28:09.668155584 +0100
++++ src/com/sun/org/apache/xml/internal/res/XMLMessages.java 2013-04-16 14:29:26.561394576 +0100
+@@ -22,10 +22,9 @@
+ */
+ package com.sun.org.apache.xml.internal.res;
+
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+ import java.util.ListResourceBundle;
+ import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * A utility class for issuing XML error messages.
+@@ -82,8 +81,9 @@
+ */
+ public static final String createXMLMessage(String msgKey, Object args[])
+ {
+- if (XMLBundle == null)
+- XMLBundle = loadResourceBundle(XML_ERROR_RESOURCES);
++ if (XMLBundle == null) {
++ XMLBundle = SecuritySupport.getResourceBundle(XML_ERROR_RESOURCES);
++ }
+
+ if (XMLBundle != null)
+ {
+@@ -156,61 +156,4 @@
+ return fmsg;
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className The class name of the resource bundle.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static ListResourceBundle loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+- Locale locale = Locale.getDefault();
+-
+- try
+- {
+- return (ListResourceBundle)ResourceBundle.getBundle(className, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (ListResourceBundle)ResourceBundle.getBundle(
+- className, new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles." + className, className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which can be appended to a resource name
+- */
+- protected static String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+ }
+--- src/com/sun/org/apache/xml/internal/resolver/Catalog.java 2013-04-16 14:28:09.668155584 +0100
++++ src/com/sun/org/apache/xml/internal/resolver/Catalog.java 2013-04-16 14:29:26.561394576 +0100
+@@ -23,6 +23,8 @@
+
+ package com.sun.org.apache.xml.internal.resolver;
+
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
++
+ import java.io.IOException;
+ import java.io.FileNotFoundException;
+ import java.io.InputStream;
+@@ -819,7 +821,7 @@
+ // tack on a basename because URLs point to files not dirs
+ catalogCwd = FileURL.makeURL("basename");
+ } catch (MalformedURLException e) {
+- String userdir = System.getProperty("user.dir");
++ String userdir = SecuritySupport.getSystemProperty("user.dir");
+ userdir.replace('\\', '/');
+ catalogManager.debug.message(1, "Malformed URL on cwd", userdir);
+ catalogCwd = null;
+@@ -1715,7 +1717,7 @@
+ protected String resolveLocalSystem(String systemId)
+ throws MalformedURLException, IOException {
+
+- String osname = System.getProperty("os.name");
++ String osname = SecuritySupport.getSystemProperty("os.name");
+ boolean windows = (osname.indexOf("Windows") >= 0);
+ Enumeration en = catalogEntries.elements();
+ while (en.hasMoreElements()) {
+--- src/com/sun/org/apache/xml/internal/resolver/CatalogManager.java 2013-04-16 14:28:09.668155584 +0100
++++ src/com/sun/org/apache/xml/internal/resolver/CatalogManager.java 2013-04-16 14:29:26.561394576 +0100
+@@ -23,6 +23,7 @@
+
+ package com.sun.org.apache.xml.internal.resolver;
+
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+ import java.io.InputStream;
+
+ import java.net.URL;
+@@ -141,8 +142,8 @@
+
+ /** Flag to ignore missing property files and/or properties */
+ private boolean ignoreMissingProperties
+- = (System.getProperty(pIgnoreMissing) != null
+- || System.getProperty(pFiles) != null);
++ = (SecuritySupport.getSystemProperty(pIgnoreMissing) != null
++ || SecuritySupport.getSystemProperty(pFiles) != null);
+
+ /** Holds the resources after they are loaded from the file. */
+ private ResourceBundle resources;
+@@ -331,7 +332,7 @@
+ private int queryVerbosity () {
+ String defaultVerbStr = Integer.toString(defaultVerbosity);
+
+- String verbStr = System.getProperty(pVerbosity);
++ String verbStr = SecuritySupport.getSystemProperty(pVerbosity);
+
+ if (verbStr == null) {
+ if (resources==null) readProperties();
+@@ -466,7 +467,7 @@
+ * @return A semicolon delimited list of catlog file URIs
+ */
+ private String queryCatalogFiles () {
+- String catalogList = System.getProperty(pFiles);
++ String catalogList = SecuritySupport.getSystemProperty(pFiles);
+ fromPropertiesFile = false;
+
+ if (catalogList == null) {
+@@ -551,7 +552,7 @@
+ * defaultPreferSetting.
+ */
+ private boolean queryPreferPublic () {
+- String prefer = System.getProperty(pPrefer);
++ String prefer = SecuritySupport.getSystemProperty(pPrefer);
+
+ if (prefer == null) {
+ if (resources==null) readProperties();
+@@ -610,7 +611,7 @@
+ * defaultUseStaticCatalog.
+ */
+ private boolean queryUseStaticCatalog () {
+- String staticCatalog = System.getProperty(pStatic);
++ String staticCatalog = SecuritySupport.getSystemProperty(pStatic);
+
+ if (staticCatalog == null) {
+ if (resources==null) readProperties();
+@@ -741,7 +742,7 @@
+ * defaultOasisXMLCatalogPI.
+ */
+ public boolean queryAllowOasisXMLCatalogPI () {
+- String allow = System.getProperty(pAllowPI);
++ String allow = SecuritySupport.getSystemProperty(pAllowPI);
+
+ if (allow == null) {
+ if (resources==null) readProperties();
+@@ -794,7 +795,7 @@
+ *
+ */
+ public String queryCatalogClassName () {
+- String className = System.getProperty(pClassname);
++ String className = SecuritySupport.getSystemProperty(pClassname);
+
+ if (className == null) {
+ if (resources==null) readProperties();
+--- src/com/sun/org/apache/xml/internal/resolver/Resolver.java 2013-04-16 14:28:09.668155584 +0100
++++ src/com/sun/org/apache/xml/internal/resolver/Resolver.java 2013-04-16 14:29:26.561394576 +0100
+@@ -31,6 +31,7 @@
+ import java.net.URL;
+ import java.net.URLConnection;
+ import java.net.MalformedURLException;
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+ import com.sun.org.apache.xml.internal.resolver.readers.SAXCatalogReader;
+ import com.sun.org.apache.xml.internal.resolver.readers.OASISXMLCatalogReader;
+ import com.sun.org.apache.xml.internal.resolver.readers.TR9401CatalogReader;
+@@ -521,7 +522,7 @@
+ */
+ private Vector resolveAllLocalSystem(String systemId) {
+ Vector map = new Vector();
+- String osname = System.getProperty("os.name");
++ String osname = SecuritySupport.getSystemProperty("os.name");
+ boolean windows = (osname.indexOf("Windows") >= 0);
+ Enumeration en = catalogEntries.elements();
+ while (en.hasMoreElements()) {
+@@ -549,7 +550,7 @@
+ */
+ private Vector resolveLocalSystemReverse(String systemId) {
+ Vector map = new Vector();
+- String osname = System.getProperty("os.name");
++ String osname = SecuritySupport.getSystemProperty("os.name");
+ boolean windows = (osname.indexOf("Windows") >= 0);
+ Enumeration en = catalogEntries.elements();
+ while (en.hasMoreElements()) {
+--- src/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java 2013-04-16 14:28:09.684155841 +0100
++++ src/com/sun/org/apache/xml/internal/serialize/SerializerFactory.java 2013-04-16 14:29:26.561394576 +0100
+@@ -21,6 +21,7 @@
+
+ package com.sun.org.apache.xml.internal.serialize;
+
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+
+ import java.io.OutputStream;
+ import java.io.Writer;
+@@ -63,7 +64,7 @@
+ factory = new SerializerFactoryImpl( Method.TEXT );
+ registerSerializerFactory( factory );
+
+- list = System.getProperty( FactoriesProperty );
++ list = SecuritySupport.getSystemProperty( FactoriesProperty );
+ if ( list != null ) {
+ token = new StringTokenizer( list, " ;,:" );
+ while ( token.hasMoreTokens() ) {
+--- src/com/sun/org/apache/xml/internal/serializer/Encodings.java 2013-04-16 14:28:09.684155841 +0100
++++ src/com/sun/org/apache/xml/internal/serializer/Encodings.java 2013-04-16 14:29:26.561394576 +0100
+@@ -34,6 +34,7 @@
+ import java.util.Properties;
+ import java.util.StringTokenizer;
+
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+
+ /**
+ * Provides information about encodings. Depends on the Java runtime
+@@ -218,7 +219,7 @@
+ // Get the default system character encoding. This may be
+ // incorrect if they passed in a writer, but right now there
+ // seems to be no way to get the encoding from a writer.
+- encoding = System.getProperty("file.encoding", "UTF8");
++ encoding = SecuritySupport.getSystemProperty("file.encoding", "UTF8");
+
+ if (null != encoding)
+ {
+@@ -312,7 +313,7 @@
+
+ try
+ {
+- urlString = System.getProperty(ENCODINGS_PROP, "");
++ urlString = SecuritySupport.getSystemProperty(ENCODINGS_PROP, "");
+ }
+ catch (SecurityException e)
+ {
+@@ -324,9 +325,7 @@
+ }
+
+ if (is == null) {
+- SecuritySupport ss = SecuritySupport.getInstance();
+- is = ss.getResourceAsStream(ObjectFactory.findClassLoader(),
+- ENCODINGS_FILE);
++ is = SecuritySupport.getResourceAsStream(ENCODINGS_FILE);
+ }
+
+ Properties props = new Properties();
+--- src/com/sun/org/apache/xml/internal/serializer/ObjectFactory.java 2013-04-16 14:28:09.688155906 +0100
++++ src/com/sun/org/apache/xml/internal/serializer/ObjectFactory.java 1970-01-01 01:00:00.000000000 +0100
+@@ -1,662 +0,0 @@
+-/*
+- * reserved comment block
+- * DO NOT REMOVE OR ALTER!
+- */
+-/*
+- * Copyright 2001-2004 The Apache Software Foundation.
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- *
+- * http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-/*
+- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/15 08:15:20 suresh_emailid Exp $
+- */
+-
+-package com.sun.org.apache.xml.internal.serializer;
+-
+-import java.io.BufferedReader;
+-import java.io.File;
+-import java.io.FileInputStream;
+-import java.io.IOException;
+-import java.io.InputStream;
+-import java.io.InputStreamReader;
+-import java.util.Properties;
+-
+-/**
+- * This class is duplicated for each JAXP subpackage so keep it in sync.
+- * It is package private and therefore is not exposed as part of the JAXP
+- * API.
+- *
+- * This code is designed to implement the JAXP 1.1 spec pluggability
+- * feature and is designed to run on JDK version 1.1 and
+- * later, and to compile on JDK 1.2 and onward.
+- * The code also runs both as part of an unbundled jar file and
+- * when bundled as part of the JDK.
+- *
+- * This class was moved from the javax.xml.parsers.ObjectFactory
+- * class and modified to be used as a general utility for creating objects
+- * dynamically.
+- *
+- * @xsl.usage internal
+- */
+-class ObjectFactory {
+-
+- //
+- // Constants
+- //
+-
+- // name of default properties file to look for in JDK's jre/lib directory
+- private static final String DEFAULT_PROPERTIES_FILENAME =
+- "xalan.properties";
+-
+- private static final String SERVICES_PATH = "META-INF/services/";
+-
+- /** Set to true for debugging */
+- private static final boolean DEBUG = false;
+-
+- /** cache the contents of the xalan.properties file.
+- * Until an attempt has been made to read this file, this will
+- * be null; if the file does not exist or we encounter some other error
+- * during the read, this will be empty.
+- */
+- private static Properties fXalanProperties = null;
+-
+- /***
+- * Cache the time stamp of the xalan.properties file so
+- * that we know if it's been modified and can invalidate
+- * the cache when necessary.
+- */
+- private static long fLastModified = -1;
+-
+- //
+- // Public static methods
+- //
+-
+- /**
+- * Finds the implementation Class object in the specified order. The
+- * specified order is the following:
+- *
+- * - query the system property using
System.getProperty
+- * - read
META-INF/services/factoryId file
+- * - use fallback classname
+- *
+- *
+- * @return instance of factory, never null
+- *
+- * @param factoryId Name of the factory to find, same as
+- * a property name
+- * @param fallbackClassName Implementation class name, if nothing else
+- * is found. Use null to mean no fallback.
+- *
+- * @exception ObjectFactory.ConfigurationError
+- */
+- static Object createObject(String factoryId, String fallbackClassName)
+- throws ConfigurationError {
+- return createObject(factoryId, null, fallbackClassName);
+- } // createObject(String,String):Object
+-
+- /**
+- * Finds the implementation Class object in the specified order. The
+- * specified order is the following:
+- *
+- * - query the system property using
System.getProperty
+- * - read
$java.home/lib/propertiesFilename file
+- * - read
META-INF/services/factoryId file
+- * - use fallback classname
+- *
+- *
+- * @return instance of factory, never null
+- *
+- * @param factoryId Name of the factory to find, same as
+- * a property name
+- * @param propertiesFilename The filename in the $java.home/lib directory
+- * of the properties file. If none specified,
+- * ${java.home}/lib/xalan.properties will be used.
+- * @param fallbackClassName Implementation class name, if nothing else
+- * is found. Use null to mean no fallback.
+- *
+- * @exception ObjectFactory.ConfigurationError
+- */
+- static Object createObject(String factoryId,
+- String propertiesFilename,
+- String fallbackClassName)
+- throws ConfigurationError
+- {
+- Class factoryClass = lookUpFactoryClass(factoryId,
+- propertiesFilename,
+- fallbackClassName);
+-
+- if (factoryClass == null) {
+- throw new ConfigurationError(
+- "Provider for " + factoryId + " cannot be found", null);
+- }
+-
+- try{
+- Object instance = factoryClass.newInstance();
+- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
+- return instance;
+- } catch (Exception x) {
+- throw new ConfigurationError(
+- "Provider for factory " + factoryId
+- + " could not be instantiated: " + x, x);
+- }
+- } // createObject(String,String,String):Object
+-
+- /**
+- * Finds the implementation Class object in the specified order. The
+- * specified order is the following:
+- *
+- * - query the system property using
System.getProperty
+- * - read
$java.home/lib/propertiesFilename file
+- * - read
META-INF/services/factoryId file
+- * - use fallback classname
+- *
+- *
+- * @return Class object of factory, never null
+- *
+- * @param factoryId Name of the factory to find, same as
+- * a property name
+- * @param propertiesFilename The filename in the $java.home/lib directory
+- * of the properties file. If none specified,
+- * ${java.home}/lib/xalan.properties will be used.
+- * @param fallbackClassName Implementation class name, if nothing else
+- * is found. Use null to mean no fallback.
+- *
+- * @exception ObjectFactory.ConfigurationError
+- */
+- static Class lookUpFactoryClass(String factoryId)
+- throws ConfigurationError
+- {
+- return lookUpFactoryClass(factoryId, null, null);
+- } // lookUpFactoryClass(String):Class
+-
+- /**
+- * Finds the implementation Class object in the specified order. The
+- * specified order is the following:
+- *
+- * - query the system property using
System.getProperty
+- * - read
$java.home/lib/propertiesFilename file
+- * - read
META-INF/services/factoryId file
+- * - use fallback classname
+- *
+- *
+- * @return Class object that provides factory service, never null
+- *
+- * @param factoryId Name of the factory to find, same as
+- * a property name
+- * @param propertiesFilename The filename in the $java.home/lib directory
+- * of the properties file. If none specified,
+- * ${java.home}/lib/xalan.properties will be used.
+- * @param fallbackClassName Implementation class name, if nothing else
+- * is found. Use null to mean no fallback.
+- *
+- * @exception ObjectFactory.ConfigurationError
+- */
+- static Class lookUpFactoryClass(String factoryId,
+- String propertiesFilename,
+- String fallbackClassName)
+- throws ConfigurationError
+- {
+- String factoryClassName = lookUpFactoryClassName(factoryId,
+- propertiesFilename,
+- fallbackClassName);
+- ClassLoader cl = findClassLoader();
+-
+- if (factoryClassName == null) {
+- factoryClassName = fallbackClassName;
+- }
+-
+- // assert(className != null);
+- try{
+- Class providerClass = findProviderClass(factoryClassName,
+- cl,
+- true);
+- if (DEBUG) debugPrintln("created new instance of " + providerClass +
+- " using ClassLoader: " + cl);
+- return providerClass;
+- } catch (ClassNotFoundException x) {
+- throw new ConfigurationError(
+- "Provider " + factoryClassName + " not found", x);
+- } catch (Exception x) {
+- throw new ConfigurationError(
+- "Provider "+factoryClassName+" could not be instantiated: "+x,
+- x);
+- }
+- } // lookUpFactoryClass(String,String,String):Class
+-
+- /**
+- * Finds the name of the required implementation class in the specified
+- * order. The specified order is the following:
+- *
+- * - query the system property using
System.getProperty
+- * - read
$java.home/lib/propertiesFilename file
+- * - read
META-INF/services/factoryId file
+- * - use fallback classname
+- *
+- *
+- * @return name of class that provides factory service, never null
+- *
+- * @param factoryId Name of the factory to find, same as
+- * a property name
+- * @param propertiesFilename The filename in the $java.home/lib directory
+- * of the properties file. If none specified,
+- * ${java.home}/lib/xalan.properties will be used.
+- * @param fallbackClassName Implementation class name, if nothing else
+- * is found. Use null to mean no fallback.
+- *
+- * @exception ObjectFactory.ConfigurationError
+- */
+- static String lookUpFactoryClassName(String factoryId,
+- String propertiesFilename,
+- String fallbackClassName)
+- {
+- SecuritySupport ss = SecuritySupport.getInstance();
+-
+- // Use the system property first
+- try {
+- String systemProp = ss.getSystemProperty(factoryId);
+- if (systemProp != null) {
+- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
+- return systemProp;
+- }
+- } catch (SecurityException se) {
+- // Ignore and continue w/ next location
+- }
+-
+- // Try to read from propertiesFilename, or
+- // $java.home/lib/xalan.properties
+- String factoryClassName = null;
+- // no properties file name specified; use
+- // $JAVA_HOME/lib/xalan.properties:
+- if (propertiesFilename == null) {
+- File propertiesFile = null;
+- boolean propertiesFileExists = false;
+- try {
+- String javah = ss.getSystemProperty("java.home");
+- propertiesFilename = javah + File.separator +
+- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
+- propertiesFile = new File(propertiesFilename);
+- propertiesFileExists = ss.getFileExists(propertiesFile);
+- } catch (SecurityException e) {
+- // try again...
+- fLastModified = -1;
+- fXalanProperties = null;
+- }
+-
+- synchronized (ObjectFactory.class) {
+- boolean loadProperties = false;
+- FileInputStream fis = null;
+- try {
+- // file existed last time
+- if(fLastModified >= 0) {
+- if(propertiesFileExists &&
+- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
+- loadProperties = true;
+- } else {
+- // file has stopped existing...
+- if(!propertiesFileExists) {
+- fLastModified = -1;
+- fXalanProperties = null;
+- } // else, file wasn't modified!
+- }
+- } else {
+- // file has started to exist:
+- if(propertiesFileExists) {
+- loadProperties = true;
+- fLastModified = ss.getLastModified(propertiesFile);
+- } // else, nothing's changed
+- }
+- if(loadProperties) {
+- // must never have attempted to read xalan.properties
+- // before (or it's outdeated)
+- fXalanProperties = new Properties();
+- fis = ss.getFileInputStream(propertiesFile);
+- fXalanProperties.load(fis);
+- }
+- } catch (Exception x) {
+- fXalanProperties = null;
+- fLastModified = -1;
+- // assert(x instanceof FileNotFoundException
+- // || x instanceof SecurityException)
+- // In both cases, ignore and continue w/ next location
+- }
+- finally {
+- // try to close the input stream if one was opened.
+- if (fis != null) {
+- try {
+- fis.close();
+- }
+- // Ignore the exception.
+- catch (IOException exc) {}
+- }
+- }
+- }
+- if(fXalanProperties != null) {
+- factoryClassName = fXalanProperties.getProperty(factoryId);
+- }
+- } else {
+- FileInputStream fis = null;
+- try {
+- fis = ss.getFileInputStream(new File(propertiesFilename));
+- Properties props = new Properties();
+- props.load(fis);
+- factoryClassName = props.getProperty(factoryId);
+- } catch (Exception x) {
+- // assert(x instanceof FileNotFoundException
+- // || x instanceof SecurityException)
+- // In both cases, ignore and continue w/ next location
+- }
+- finally {
+- // try to close the input stream if one was opened.
+- if (fis != null) {
+- try {
+- fis.close();
+- }
+- // Ignore the exception.
+- catch (IOException exc) {}
+- }
+- }
+- }
+- if (factoryClassName != null) {
+- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
+- + factoryClassName);
+- return factoryClassName;
+- }
+-
+- // Try Jar Service Provider Mechanism
+- return findJarServiceProviderName(factoryId);
+- } // lookUpFactoryClass(String,String):String
+-
+- //
+- // Private static methods
+- //
+-
+- /** Prints a message to standard error if debugging is enabled. */
+- private static void debugPrintln(String msg) {
+- if (DEBUG) {
+- System.err.println("JAXP: " + msg);
+- }
+- } // debugPrintln(String)
+-
+- /**
+- * Figure out which ClassLoader to use. For JDK 1.2 and later use
+- * the context ClassLoader.
+- */
+- static ClassLoader findClassLoader()
+- throws ConfigurationError
+- {
+- SecuritySupport ss = SecuritySupport.getInstance();
+-
+- // Figure out which ClassLoader to use for loading the provider
+- // class. If there is a Context ClassLoader then use it.
+- ClassLoader context = ss.getContextClassLoader();
+- ClassLoader system = ss.getSystemClassLoader();
+-
+- ClassLoader chain = system;
+- while (true) {
+- if (context == chain) {
+- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
+- // or any Context ClassLoader in chain of system classloader
+- // (including extension ClassLoader) so extend to widest
+- // ClassLoader (always look in system ClassLoader if Xalan
+- // is in boot/extension/system classpath and in current
+- // ClassLoader otherwise); normal classloaders delegate
+- // back to system ClassLoader first so this widening doesn't
+- // change the fact that context ClassLoader will be consulted
+- ClassLoader current = ObjectFactory.class.getClassLoader();
+-
+- chain = system;
+- while (true) {
+- if (current == chain) {
+- // Assert: Current ClassLoader in chain of
+- // boot/extension/system ClassLoaders
+- return system;
+- }
+- if (chain == null) {
+- break;
+- }
+- chain = ss.getParentClassLoader(chain);
+- }
+-
+- // Assert: Current ClassLoader not in chain of
+- // boot/extension/system ClassLoaders
+- return current;
+- }
+-
+- if (chain == null) {
+- // boot ClassLoader reached
+- break;
+- }
+-
+- // Check for any extension ClassLoaders in chain up to
+- // boot ClassLoader
+- chain = ss.getParentClassLoader(chain);
+- };
+-
+- // Assert: Context ClassLoader not in chain of
+- // boot/extension/system ClassLoaders
+- return context;
+- } // findClassLoader():ClassLoader
+-
+- /**
+- * Create an instance of a class using the specified ClassLoader
+- */
+- static Object newInstance(String className, ClassLoader cl,
+- boolean doFallback)
+- throws ConfigurationError
+- {
+- // assert(className != null);
+- try{
+- Class providerClass = findProviderClass(className, cl, doFallback);
+- Object instance = providerClass.newInstance();
+- if (DEBUG) debugPrintln("created new instance of " + providerClass +
+- " using ClassLoader: " + cl);
+- return instance;
+- } catch (ClassNotFoundException x) {
+- throw new ConfigurationError(
+- "Provider " + className + " not found", x);
+- } catch (Exception x) {
+- throw new ConfigurationError(
+- "Provider " + className + " could not be instantiated: " + x,
+- x);
+- }
+- }
+-
+- /**
+- * Find a Class using the specified ClassLoader
+- */
+- static Class findProviderClass(String className, ClassLoader cl,
+- boolean doFallback)
+- throws ClassNotFoundException, ConfigurationError
+- {
+- //throw security exception if the calling thread is not allowed to access the
+- //class. Restrict the access to the package classes as specified in java.security policy.
+- SecurityManager security = System.getSecurityManager();
+- try{
+- if (security != null){
+- final int lastDot = className.lastIndexOf(".");
+- String packageName = className;
+- if (lastDot != -1) packageName = className.substring(0, lastDot);
+- security.checkPackageAccess(packageName);
+- }
+- }catch(SecurityException e){
+- throw e;
+- }
+-
+- Class providerClass;
+- if (cl == null) {
+- // XXX Use the bootstrap ClassLoader. There is no way to
+- // load a class using the bootstrap ClassLoader that works
+- // in both JDK 1.1 and Java 2. However, this should still
+- // work b/c the following should be true:
+- //
+- // (cl == null) iff current ClassLoader == null
+- //
+- // Thus Class.forName(String) will use the current
+- // ClassLoader which will be the bootstrap ClassLoader.
+- providerClass = Class.forName(className);
+- } else {
+- try {
+- providerClass = cl.loadClass(className);
+- } catch (ClassNotFoundException x) {
+- if (doFallback) {
+- // Fall back to current classloader
+- ClassLoader current = ObjectFactory.class.getClassLoader();
+- if (current == null) {
+- providerClass = Class.forName(className);
+- } else if (cl != current) {
+- cl = current;
+- providerClass = cl.loadClass(className);
+- } else {
+- throw x;
+- }
+- } else {
+- throw x;
+- }
+- }
+- }
+-
+- return providerClass;
+- }
+-
+- /**
+- * Find the name of service provider using Jar Service Provider Mechanism
+- *
+- * @return instance of provider class if found or null
+- */
+- private static String findJarServiceProviderName(String factoryId)
+- {
+- SecuritySupport ss = SecuritySupport.getInstance();
+- String serviceId = SERVICES_PATH + factoryId;
+- InputStream is = null;
+-
+- // First try the Context ClassLoader
+- ClassLoader cl = findClassLoader();
+-
+- is = ss.getResourceAsStream(cl, serviceId);
+-
+- // If no provider found then try the current ClassLoader
+- if (is == null) {
+- ClassLoader current = ObjectFactory.class.getClassLoader();
+- if (cl != current) {
+- cl = current;
+- is = ss.getResourceAsStream(cl, serviceId);
+- }
+- }
+-
+- if (is == null) {
+- // No provider found
+- return null;
+- }
+-
+- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
+- " using ClassLoader: " + cl);
+-
+- // Read the service provider name in UTF-8 as specified in
+- // the jar spec. Unfortunately this fails in Microsoft
+- // VJ++, which does not implement the UTF-8
+- // encoding. Theoretically, we should simply let it fail in
+- // that case, since the JVM is obviously broken if it
+- // doesn't support such a basic standard. But since there
+- // are still some users attempting to use VJ++ for
+- // development, we have dropped in a fallback which makes a
+- // second attempt using the platform's default encoding. In
+- // VJ++ this is apparently ASCII, which is a subset of
+- // UTF-8... and since the strings we'll be reading here are
+- // also primarily limited to the 7-bit ASCII range (at
+- // least, in English versions), this should work well
+- // enough to keep us on the air until we're ready to
+- // officially decommit from VJ++. [Edited comment from
+- // jkesselm]
+- BufferedReader rd;
+- try {
+- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
+- } catch (java.io.UnsupportedEncodingException e) {
+- rd = new BufferedReader(new InputStreamReader(is));
+- }
+-
+- String factoryClassName = null;
+- try {
+- // XXX Does not handle all possible input as specified by the
+- // Jar Service Provider specification
+- factoryClassName = rd.readLine();
+- } catch (IOException x) {
+- // No provider found
+- return null;
+- }
+- finally {
+- try {
+- // try to close the reader.
+- rd.close();
+- }
+- // Ignore the exception.
+- catch (IOException exc) {}
+- }
+-
+- if (factoryClassName != null &&
+- ! "".equals(factoryClassName)) {
+- if (DEBUG) debugPrintln("found in resource, value="
+- + factoryClassName);
+-
+- // Note: here we do not want to fall back to the current
+- // ClassLoader because we want to avoid the case where the
+- // resource file was found using one ClassLoader and the
+- // provider class was instantiated using a different one.
+- return factoryClassName;
+- }
+-
+- // No provider found
+- return null;
+- }
+-
+- //
+- // Classes
+- //
+-
+- /**
+- * A configuration error.
+- */
+- static class ConfigurationError
+- extends Error {
+- static final long serialVersionUID = 8859254254255146542L;
+- //
+- // Data
+- //
+-
+- /** Exception. */
+- private Exception exception;
+-
+- //
+- // Constructors
+- //
+-
+- /**
+- * Construct a new instance with the specified detail string and
+- * exception.
+- */
+- ConfigurationError(String msg, Exception x) {
+- super(msg);
+- this.exception = x;
+- } // (String,Exception)
+-
+- //
+- // Public methods
+- //
+-
+- /** Returns the exception associated to this error. */
+- Exception getException() {
+- return exception;
+- } // getException():Exception
+-
+- } // class ConfigurationError
+-
+-} // class ObjectFactory
+--- src/com/sun/org/apache/xml/internal/serializer/OutputPropertiesFactory.java 2013-04-16 14:28:09.688155906 +0100
++++ src/com/sun/org/apache/xml/internal/serializer/OutputPropertiesFactory.java 2013-04-16 14:29:26.561394576 +0100
+@@ -22,6 +22,7 @@
+ */
+ package com.sun.org.apache.xml.internal.serializer;
+
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+ import java.io.BufferedInputStream;
+ import java.io.IOException;
+ import java.io.InputStream;
+@@ -451,7 +452,7 @@
+ String value = null;
+ try
+ {
+- value = System.getProperty(key);
++ value = SecuritySupport.getSystemProperty(key);
+ }
+ catch (SecurityException se)
+ {
+@@ -464,7 +465,7 @@
+ String newValue = null;
+ try
+ {
+- newValue = System.getProperty(newKey);
++ newValue = SecuritySupport.getSystemProperty(newKey);
+ }
+ catch (SecurityException se)
+ {
+--- src/com/sun/org/apache/xml/internal/serializer/SecuritySupport12.java 2013-04-16 14:28:09.688155906 +0100
++++ src/com/sun/org/apache/xml/internal/serializer/SecuritySupport12.java 1970-01-01 01:00:00.000000000 +0100
+@@ -1,145 +0,0 @@
+-/*
+- * reserved comment block
+- * DO NOT REMOVE OR ALTER!
+- */
+-/*
+- * Copyright 2002-2004 The Apache Software Foundation.
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- *
+- * http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-/*
+- * $Id: SecuritySupport12.java,v 1.2.4.1 2005/09/15 08:15:22 suresh_emailid Exp $
+- */
+-
+-package com.sun.org.apache.xml.internal.serializer;
+-
+-import java.io.File;
+-import java.io.FileInputStream;
+-import java.io.FileNotFoundException;
+-import java.io.InputStream;
+-import java.security.AccessController;
+-import java.security.PrivilegedAction;
+-import java.security.PrivilegedActionException;
+-import java.security.PrivilegedExceptionAction;
+-
+-/**
+- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
+- * It is package private and therefore is not exposed as part of the Xalan-Java
+- * API.
+- *
+- * Security related methods that only work on J2SE 1.2 and newer.
+- */
+-class SecuritySupport12 extends SecuritySupport {
+-
+- ClassLoader getContextClassLoader() {
+- return (ClassLoader)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- ClassLoader cl = null;
+- try {
+- cl = Thread.currentThread().getContextClassLoader();
+- } catch (SecurityException ex) { }
+- return cl;
+- }
+- });
+- }
+-
+- ClassLoader getSystemClassLoader() {
+- return (ClassLoader)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- ClassLoader cl = null;
+- try {
+- cl = ClassLoader.getSystemClassLoader();
+- } catch (SecurityException ex) {}
+- return cl;
+- }
+- });
+- }
+-
+- ClassLoader getParentClassLoader(final ClassLoader cl) {
+- return (ClassLoader)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- ClassLoader parent = null;
+- try {
+- parent = cl.getParent();
+- } catch (SecurityException ex) {}
+-
+- // eliminate loops in case of the boot
+- // ClassLoader returning itself as a parent
+- return (parent == cl) ? null : parent;
+- }
+- });
+- }
+-
+- String getSystemProperty(final String propName) {
+- return (String)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- return System.getProperty(propName);
+- }
+- });
+- }
+-
+- FileInputStream getFileInputStream(final File file)
+- throws FileNotFoundException
+- {
+- try {
+- return (FileInputStream)
+- AccessController.doPrivileged(new PrivilegedExceptionAction() {
+- public Object run() throws FileNotFoundException {
+- return new FileInputStream(file);
+- }
+- });
+- } catch (PrivilegedActionException e) {
+- throw (FileNotFoundException)e.getException();
+- }
+- }
+-
+- InputStream getResourceAsStream(final ClassLoader cl,
+- final String name)
+- {
+- return (InputStream)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- InputStream ris;
+- if (cl == null) {
+- ris = ClassLoader.getSystemResourceAsStream(name);
+- } else {
+- ris = cl.getResourceAsStream(name);
+- }
+- return ris;
+- }
+- });
+- }
+-
+- boolean getFileExists(final File f) {
+- return ((Boolean)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- return new Boolean(f.exists());
+- }
+- })).booleanValue();
+- }
+-
+- long getLastModified(final File f) {
+- return ((Long)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- return new Long(f.lastModified());
+- }
+- })).longValue();
+- }
+-
+-}
+--- src/com/sun/org/apache/xml/internal/serializer/SecuritySupport.java 2013-04-16 14:28:09.688155906 +0100
++++ src/com/sun/org/apache/xml/internal/serializer/SecuritySupport.java 1970-01-01 01:00:00.000000000 +0100
+@@ -1,125 +0,0 @@
+-/*
+- * reserved comment block
+- * DO NOT REMOVE OR ALTER!
+- */
+-/*
+- * Copyright 2002-2004 The Apache Software Foundation.
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- *
+- * http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-/*
+- * $Id: SecuritySupport.java,v 1.2.4.1 2005/09/15 08:15:21 suresh_emailid Exp $
+- */
+-
+-package com.sun.org.apache.xml.internal.serializer;
+-
+-import java.io.File;
+-import java.io.FileInputStream;
+-import java.io.FileNotFoundException;
+-import java.io.InputStream;
+-
+-/**
+- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
+- * It is package private and therefore is not exposed as part of the Xalan-Java
+- * API.
+- *
+- * Base class with security related methods that work on JDK 1.1.
+- */
+-class SecuritySupport {
+-
+- /*
+- * Make this of type Object so that the verifier won't try to
+- * prove its type, thus possibly trying to load the SecuritySupport12
+- * class.
+- */
+- private static final Object securitySupport;
+-
+- static {
+- SecuritySupport ss = null;
+- try {
+- Class c = Class.forName("java.security.AccessController");
+- // if that worked, we're on 1.2.
+- /*
+- // don't reference the class explicitly so it doesn't
+- // get dragged in accidentally.
+- c = Class.forName("javax.mail.SecuritySupport12");
+- Constructor cons = c.getConstructor(new Class[] { });
+- ss = (SecuritySupport)cons.newInstance(new Object[] { });
+- */
+- /*
+- * Unfortunately, we can't load the class using reflection
+- * because the class is package private. And the class has
+- * to be package private so the APIs aren't exposed to other
+- * code that could use them to circumvent security. Thus,
+- * we accept the risk that the direct reference might fail
+- * on some JDK 1.1 JVMs, even though we would never execute
+- * this code in such a case. Sigh...
+- */
+- ss = new SecuritySupport12();
+- } catch (Exception ex) {
+- // ignore it
+- } finally {
+- if (ss == null)
+- ss = new SecuritySupport();
+- securitySupport = ss;
+- }
+- }
+-
+- /**
+- * Return an appropriate instance of this class, depending on whether
+- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
+- */
+- static SecuritySupport getInstance() {
+- return (SecuritySupport)securitySupport;
+- }
+-
+- ClassLoader getContextClassLoader() {
+- return null;
+- }
+-
+- ClassLoader getSystemClassLoader() {
+- return null;
+- }
+-
+- ClassLoader getParentClassLoader(ClassLoader cl) {
+- return null;
+- }
+-
+- String getSystemProperty(String propName) {
+- return System.getProperty(propName);
+- }
+-
+- FileInputStream getFileInputStream(File file)
+- throws FileNotFoundException
+- {
+- return new FileInputStream(file);
+- }
+-
+- InputStream getResourceAsStream(ClassLoader cl, String name) {
+- InputStream ris;
+- if (cl == null) {
+- ris = ClassLoader.getSystemResourceAsStream(name);
+- } else {
+- ris = cl.getResourceAsStream(name);
+- }
+- return ris;
+- }
+-
+- boolean getFileExists(File f) {
+- return f.exists();
+- }
+-
+- long getLastModified(File f) {
+- return f.lastModified();
+- }
+-}
+--- src/com/sun/org/apache/xml/internal/serializer/ToStream.java 2013-04-16 14:28:09.700156100 +0100
++++ src/com/sun/org/apache/xml/internal/serializer/ToStream.java 2013-04-16 14:29:26.565394640 +0100
+@@ -22,6 +22,7 @@
+ */
+ package com.sun.org.apache.xml.internal.serializer;
+
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+ import java.io.IOException;
+ import java.io.OutputStream;
+ import java.io.UnsupportedEncodingException;
+@@ -140,7 +141,7 @@
+ * extension attribute xalan:line-separator.
+ */
+ protected char[] m_lineSep =
+- System.getProperty("line.separator").toCharArray();
++ SecuritySupport.getSystemProperty("line.separator").toCharArray();
+
+ /**
+ * True if the the system line separator is to be used.
+--- src/com/sun/org/apache/xml/internal/serializer/TreeWalker.java 2013-04-16 14:28:09.704156164 +0100
++++ src/com/sun/org/apache/xml/internal/serializer/TreeWalker.java 2013-04-16 14:29:26.565394640 +0100
+@@ -22,6 +22,7 @@
+ */
+ package com.sun.org.apache.xml.internal.serializer;
+
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+ import java.io.File;
+
+ import com.sun.org.apache.xml.internal.serializer.utils.AttList;
+@@ -104,7 +105,7 @@
+ else {
+ try {
+ // Bug see Bugzilla 26741
+- m_locator.setSystemId(System.getProperty("user.dir") + File.separator + "dummy.xsl");
++ m_locator.setSystemId(SecuritySupport.getSystemProperty("user.dir") + File.separator + "dummy.xsl");
+ }
+ catch (SecurityException se) {// user.dir not accessible from applet
+ }
+@@ -115,7 +116,7 @@
+ m_contentHandler.setDocumentLocator(m_locator);
+ try {
+ // Bug see Bugzilla 26741
+- m_locator.setSystemId(System.getProperty("user.dir") + File.separator + "dummy.xsl");
++ m_locator.setSystemId(SecuritySupport.getSystemProperty("user.dir") + File.separator + "dummy.xsl");
+ }
+ catch (SecurityException se){// user.dir not accessible from applet
+
+--- src/com/sun/org/apache/xml/internal/serializer/utils/Messages.java 2013-04-16 14:28:09.708156229 +0100
++++ src/com/sun/org/apache/xml/internal/serializer/utils/Messages.java 2013-04-16 14:29:26.565394640 +0100
+@@ -22,6 +22,7 @@
+ */
+ package com.sun.org.apache.xml.internal.serializer.utils;
+
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+ import java.util.ListResourceBundle;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+@@ -87,9 +88,6 @@
+ * can have the Message strings translated in an alternate language
+ * in a errorResourceClass with a language suffix.
+ *
+- * More sophisticated use of this class would be to pass null
+- * when contructing it, but then call loadResourceBundle()
+- * before creating any messages.
+ *
+ * This class is not a public API, it is only public because it is
+ * used in com.sun.org.apache.xml.internal.serializer.
+@@ -126,18 +124,6 @@
+ m_resourceBundleName = resourceBundle;
+ }
+
+- /*
+- * Set the Locale object to use. If this method is not called the
+- * default locale is used. This method needs to be called before
+- * loadResourceBundle().
+- *
+- * @param locale non-null reference to Locale object.
+- * @xsl.usage internal
+- */
+-// public void setLocale(Locale locale)
+-// {
+-// m_locale = locale;
+-// }
+
+ /**
+ * Get the Locale object that is being used.
+@@ -151,16 +137,6 @@
+ }
+
+ /**
+- * Get the ListResourceBundle being used by this Messages instance which was
+- * previously set by a call to loadResourceBundle(className)
+- * @xsl.usage internal
+- */
+- private ListResourceBundle getResourceBundle()
+- {
+- return m_resourceBundle;
+- }
+-
+- /**
+ * Creates a message from the specified key and replacement
+ * arguments, localized to the given locale.
+ *
+@@ -174,7 +150,7 @@
+ public final String createMessage(String msgKey, Object args[])
+ {
+ if (m_resourceBundle == null)
+- m_resourceBundle = loadResourceBundle(m_resourceBundleName);
++ m_resourceBundle = SecuritySupport.getResourceBundle(m_resourceBundleName);
+
+ if (m_resourceBundle != null)
+ {
+@@ -293,76 +269,4 @@
+ return fmsg;
+ }
+
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className the name of the class that implements ListResourceBundle,
+- * without language suffix.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- * @xsl.usage internal
+- */
+- private ListResourceBundle loadResourceBundle(String resourceBundle)
+- throws MissingResourceException
+- {
+- m_resourceBundleName = resourceBundle;
+- Locale locale = getLocale();
+-
+- ListResourceBundle lrb;
+-
+- try
+- {
+-
+- ResourceBundle rb =
+- ResourceBundle.getBundle(m_resourceBundleName, locale);
+- lrb = (ListResourceBundle) rb;
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- lrb =
+- (ListResourceBundle) ResourceBundle.getBundle(
+- m_resourceBundleName,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles." + m_resourceBundleName,
+- m_resourceBundleName,
+- "");
+- }
+- }
+- m_resourceBundle = lrb;
+- return lrb;
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which can be appended to a resource name
+- * @xsl.usage internal
+- */
+- private static String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+ }
+--- src/com/sun/org/apache/xml/internal/utils/res/XResourceBundle.java 2013-04-16 14:28:09.728156552 +0100
++++ src/com/sun/org/apache/xml/internal/utils/res/XResourceBundle.java 2013-04-16 14:29:26.565394640 +0100
+@@ -22,6 +22,8 @@
+ */
+ package com.sun.org.apache.xml.internal.utils.res;
+
++import java.security.AccessController;
++import java.security.PrivilegedAction;
+ import java.util.ListResourceBundle;
+ import java.util.Locale;
+ import java.util.MissingResourceException;
+@@ -29,114 +31,45 @@
+
+ /**
+ * The default (english) resource bundle.
++ *
+ * @xsl.usage internal
+ */
+-public class XResourceBundle extends ListResourceBundle
+-{
++public class XResourceBundle extends ListResourceBundle {
+
+- /** Error resource constants */
+- public static final String ERROR_RESOURCES =
+- "com.sun.org.apache.xalan.internal.res.XSLTErrorResources", XSLT_RESOURCE =
+- "com.sun.org.apache.xml.internal.utils.res.XResourceBundle", LANG_BUNDLE_NAME =
+- "com.sun.org.apache.xml.internal.utils.res.XResources", MULT_ORDER =
+- "multiplierOrder", MULT_PRECEDES = "precedes", MULT_FOLLOWS =
+- "follows", LANG_ORIENTATION = "orientation", LANG_RIGHTTOLEFT =
+- "rightToLeft", LANG_LEFTTORIGHT = "leftToRight", LANG_NUMBERING =
+- "numbering", LANG_ADDITIVE = "additive", LANG_MULT_ADD =
+- "multiplicative-additive", LANG_MULTIPLIER =
+- "multiplier", LANG_MULTIPLIER_CHAR =
+- "multiplierChar", LANG_NUMBERGROUPS = "numberGroups", LANG_NUM_TABLES =
+- "tables", LANG_ALPHABET = "alphabet", LANG_TRAD_ALPHABET = "tradAlphabet";
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className Name of local-specific subclass.
+- * @param locale the locale to prefer when searching for the bundle
+- */
+- public static final XResourceBundle loadResourceBundle(
+- String className, Locale locale) throws MissingResourceException
+- {
+-
+- String suffix = getResourceSuffix(locale);
+-
+- //System.out.println("resource " + className + suffix);
+- try
+- {
+-
+- // first try with the given locale
+- String resourceName = className + suffix;
+- return (XResourceBundle) ResourceBundle.getBundle(resourceName, locale);
++ /**
++ * Error resource constants
++ */
++ public static final String ERROR_RESOURCES =
++ "com.sun.org.apache.xalan.internal.res.XSLTErrorResources", XSLT_RESOURCE =
++ "com.sun.org.apache.xml.internal.utils.res.XResourceBundle", LANG_BUNDLE_NAME =
++ "com.sun.org.apache.xml.internal.utils.res.XResources", MULT_ORDER =
++ "multiplierOrder", MULT_PRECEDES = "precedes", MULT_FOLLOWS =
++ "follows", LANG_ORIENTATION = "orientation", LANG_RIGHTTOLEFT =
++ "rightToLeft", LANG_LEFTTORIGHT = "leftToRight", LANG_NUMBERING =
++ "numbering", LANG_ADDITIVE = "additive", LANG_MULT_ADD =
++ "multiplicative-additive", LANG_MULTIPLIER =
++ "multiplier", LANG_MULTIPLIER_CHAR =
++ "multiplierChar", LANG_NUMBERGROUPS = "numberGroups", LANG_NUM_TABLES =
++ "tables", LANG_ALPHABET = "alphabet", LANG_TRAD_ALPHABET = "tradAlphabet";
++
++
++ /**
++ * Get the association list.
++ *
++ * @return The association list.
++ */
++ public Object[][] getContents() {
++ return new Object[][]{
++ {"ui_language", "en"}, {"help_language", "en"}, {"language", "en"},
++ {"alphabet", new CharArrayWrapper(new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G',
++ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
++ 'V', 'W', 'X', 'Y', 'Z'})},
++ {"tradAlphabet", new CharArrayWrapper(new char[]{'A', 'B', 'C', 'D', 'E', 'F',
++ 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
++ 'U', 'V', 'W', 'X', 'Y', 'Z'})},
++ //language orientation
++ {"orientation", "LeftToRight"},
++ //language numbering
++ {"numbering", "additive"},};
+ }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XResourceBundle) ResourceBundle.getBundle(
+- XSLT_RESOURCE, new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String lang = locale.getLanguage();
+- String country = locale.getCountry();
+- String variant = locale.getVariant();
+- String suffix = "_" + locale.getLanguage();
+-
+- if (lang.equals("zh"))
+- suffix += "_" + country;
+-
+- if (country.equals("JP"))
+- suffix += "_" + country + "_" + variant;
+-
+- return suffix;
+- }
+-
+- /**
+- * Get the association list.
+- *
+- * @return The association list.
+- */
+- public Object[][] getContents()
+- {
+- return new Object[][]
+- {
+- { "ui_language", "en" }, { "help_language", "en" }, { "language", "en" },
+- { "alphabet", new CharArrayWrapper(new char[]{ 'A', 'B', 'C', 'D', 'E', 'F', 'G',
+- 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',
+- 'V', 'W', 'X', 'Y', 'Z' })},
+- { "tradAlphabet", new CharArrayWrapper(new char[]{ 'A', 'B', 'C', 'D', 'E', 'F',
+- 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
+- 'U', 'V', 'W', 'X', 'Y', 'Z' }) },
+-
+- //language orientation
+- { "orientation", "LeftToRight" },
+-
+- //language numbering
+- { "numbering", "additive" },
+- };
+- }
+ }
+--- src/com/sun/org/apache/xml/internal/utils/TreeWalker.java 2013-04-16 14:28:09.720156422 +0100
++++ src/com/sun/org/apache/xml/internal/utils/TreeWalker.java 2013-04-16 14:29:26.565394640 +0100
+@@ -22,6 +22,7 @@
+ */
+ package com.sun.org.apache.xml.internal.utils;
+
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+ import java.io.File;
+
+ import org.w3c.dom.Comment;
+@@ -93,7 +94,7 @@
+ else {
+ try {
+ // Bug see Bugzilla 26741
+- m_locator.setSystemId(System.getProperty("user.dir") + File.separator + "dummy.xsl");
++ m_locator.setSystemId(SecuritySupport.getSystemProperty("user.dir") + File.separator + "dummy.xsl");
+ }
+ catch (SecurityException se) {// user.dir not accessible from applet
+ }
+@@ -112,7 +113,7 @@
+ m_contentHandler.setDocumentLocator(m_locator);
+ try {
+ // Bug see Bugzilla 26741
+- m_locator.setSystemId(System.getProperty("user.dir") + File.separator + "dummy.xsl");
++ m_locator.setSystemId(SecuritySupport.getSystemProperty("user.dir") + File.separator + "dummy.xsl");
+ }
+ catch (SecurityException se){// user.dir not accessible from applet
+ }
+@@ -131,7 +132,7 @@
+ m_contentHandler.setDocumentLocator(m_locator);
+ try {
+ // Bug see Bugzilla 26741
+- m_locator.setSystemId(System.getProperty("user.dir") + File.separator + "dummy.xsl");
++ m_locator.setSystemId(SecuritySupport.getSystemProperty("user.dir") + File.separator + "dummy.xsl");
+ }
+ catch (SecurityException se){// user.dir not accessible from applet
+
+--- src/com/sun/org/apache/xpath/internal/functions/FuncSystemProperty.java 2013-04-16 14:28:09.752156937 +0100
++++ src/com/sun/org/apache/xpath/internal/functions/FuncSystemProperty.java 2013-04-16 14:29:26.565394640 +0100
+@@ -31,6 +31,8 @@
+ import com.sun.org.apache.xpath.internal.objects.XObject;
+ import com.sun.org.apache.xpath.internal.objects.XString;
+ import com.sun.org.apache.xpath.internal.res.XPATHErrorResources;
++import com.sun.org.apache.xalan.internal.utils.ObjectFactory;
++import com.sun.org.apache.xalan.internal.utils.SecuritySupport;
+
+ /**
+ * Execute the SystemProperty() function.
+@@ -100,7 +102,7 @@
+
+ try
+ {
+- result = System.getProperty(propName);
++ result = SecuritySupport.getSystemProperty(propName);
+
+ if (null == result)
+ {
+@@ -122,7 +124,7 @@
+ {
+ try
+ {
+- result = System.getProperty(fullName);
++ result = SecuritySupport.getSystemProperty(fullName);
+
+ if (null == result)
+ {
+@@ -163,14 +165,12 @@
+ * should already be fully qualified as path/filename
+ * @param target The target property bag the file will be placed into.
+ */
+- private void loadPropertyFile(String file, Properties target)
++ public void loadPropertyFile(String file, Properties target)
+ {
+ try
+ {
+ // Use SecuritySupport class to provide priveleged access to property file
+- SecuritySupport ss = SecuritySupport.getInstance();
+-
+- InputStream is = ss.getResourceAsStream(ObjectFactory.findClassLoader(),
++ InputStream is = SecuritySupport.getResourceAsStream(ObjectFactory.findClassLoader(),
+ file);
+
+ // get a buffered version
+--- src/com/sun/org/apache/xpath/internal/functions/ObjectFactory.java 2013-04-16 14:28:09.752156937 +0100
++++ src/com/sun/org/apache/xpath/internal/functions/ObjectFactory.java 1970-01-01 01:00:00.000000000 +0100
+@@ -1,663 +0,0 @@
+-/*
+- * reserved comment block
+- * DO NOT REMOVE OR ALTER!
+- */
+-/*
+- * Copyright 2001-2004 The Apache Software Foundation.
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- *
+- * http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-/*
+- * $Id: ObjectFactory.java,v 1.2.4.1 2005/09/14 20:25:54 jeffsuttor Exp $
+- */
+-
+-package com.sun.org.apache.xpath.internal.functions;
+-
+-import java.io.InputStream;
+-import java.io.IOException;
+-import java.io.File;
+-import java.io.FileInputStream;
+-
+-import java.util.Properties;
+-import java.io.BufferedReader;
+-import java.io.InputStreamReader;
+-
+-/**
+- * This class is duplicated for each JAXP subpackage so keep it in sync.
+- * It is package private and therefore is not exposed as part of the JAXP
+- * API.
+- *
+- * This code is designed to implement the JAXP 1.1 spec pluggability
+- * feature and is designed to run on JDK version 1.1 and
+- * later, and to compile on JDK 1.2 and onward.
+- * The code also runs both as part of an unbundled jar file and
+- * when bundled as part of the JDK.
+- *
+- * This class was moved from the javax.xml.parsers.ObjectFactory
+- * class and modified to be used as a general utility for creating objects
+- * dynamically.
+- *
+- * @version $Id: ObjectFactory.java,v 1.7 2008/04/02 00:40:59 joehw Exp $
+- */
+-class ObjectFactory {
+-
+- //
+- // Constants
+- //
+-
+- // name of default properties file to look for in JDK's jre/lib directory
+- private static final String DEFAULT_PROPERTIES_FILENAME =
+- "xalan.properties";
+-
+- private static final String SERVICES_PATH = "META-INF/services/";
+-
+- /** Set to true for debugging */
+- private static final boolean DEBUG = false;
+-
+- /** cache the contents of the xalan.properties file.
+- * Until an attempt has been made to read this file, this will
+- * be null; if the file does not exist or we encounter some other error
+- * during the read, this will be empty.
+- */
+- private static Properties fXalanProperties = null;
+-
+- /***
+- * Cache the time stamp of the xalan.properties file so
+- * that we know if it's been modified and can invalidate
+- * the cache when necessary.
+- */
+- private static long fLastModified = -1;
+-
+- //
+- // Public static methods
+- //
+-
+- /**
+- * Finds the implementation Class object in the specified order. The
+- * specified order is the following:
+- *
+- * - query the system property using
System.getProperty
+- * - read
META-INF/services/factoryId file
+- * - use fallback classname
+- *
+- *
+- * @return instance of factory, never null
+- *
+- * @param factoryId Name of the factory to find, same as
+- * a property name
+- * @param fallbackClassName Implementation class name, if nothing else
+- * is found. Use null to mean no fallback.
+- *
+- * @exception ObjectFactory.ConfigurationError
+- */
+- static Object createObject(String factoryId, String fallbackClassName)
+- throws ConfigurationError {
+- return createObject(factoryId, null, fallbackClassName);
+- } // createObject(String,String):Object
+-
+- /**
+- * Finds the implementation Class object in the specified order. The
+- * specified order is the following:
+- *
+- * - query the system property using
System.getProperty
+- * - read
$java.home/lib/propertiesFilename file
+- * - read
META-INF/services/factoryId file
+- * - use fallback classname
+- *
+- *
+- * @return instance of factory, never null
+- *
+- * @param factoryId Name of the factory to find, same as
+- * a property name
+- * @param propertiesFilename The filename in the $java.home/lib directory
+- * of the properties file. If none specified,
+- * ${java.home}/lib/xalan.properties will be used.
+- * @param fallbackClassName Implementation class name, if nothing else
+- * is found. Use null to mean no fallback.
+- *
+- * @exception ObjectFactory.ConfigurationError
+- */
+- static Object createObject(String factoryId,
+- String propertiesFilename,
+- String fallbackClassName)
+- throws ConfigurationError
+- {
+- Class factoryClass = lookUpFactoryClass(factoryId,
+- propertiesFilename,
+- fallbackClassName);
+-
+- if (factoryClass == null) {
+- throw new ConfigurationError(
+- "Provider for " + factoryId + " cannot be found", null);
+- }
+-
+- try{
+- Object instance = factoryClass.newInstance();
+- if (DEBUG) debugPrintln("created new instance of factory " + factoryId);
+- return instance;
+- } catch (Exception x) {
+- throw new ConfigurationError(
+- "Provider for factory " + factoryId
+- + " could not be instantiated: " + x, x);
+- }
+- } // createObject(String,String,String):Object
+-
+- /**
+- * Finds the implementation Class object in the specified order. The
+- * specified order is the following:
+- *
+- * - query the system property using
System.getProperty
+- * - read
$java.home/lib/propertiesFilename file
+- * - read
META-INF/services/factoryId file
+- * - use fallback classname
+- *
+- *
+- * @return Class object of factory, never null
+- *
+- * @param factoryId Name of the factory to find, same as
+- * a property name
+- * @param propertiesFilename The filename in the $java.home/lib directory
+- * of the properties file. If none specified,
+- * ${java.home}/lib/xalan.properties will be used.
+- * @param fallbackClassName Implementation class name, if nothing else
+- * is found. Use null to mean no fallback.
+- *
+- * @exception ObjectFactory.ConfigurationError
+- */
+- static Class lookUpFactoryClass(String factoryId)
+- throws ConfigurationError
+- {
+- return lookUpFactoryClass(factoryId, null, null);
+- } // lookUpFactoryClass(String):Class
+-
+- /**
+- * Finds the implementation Class object in the specified order. The
+- * specified order is the following:
+- *
+- * - query the system property using
System.getProperty
+- * - read
$java.home/lib/propertiesFilename file
+- * - read
META-INF/services/factoryId file
+- * - use fallback classname
+- *
+- *
+- * @return Class object that provides factory service, never null
+- *
+- * @param factoryId Name of the factory to find, same as
+- * a property name
+- * @param propertiesFilename The filename in the $java.home/lib directory
+- * of the properties file. If none specified,
+- * ${java.home}/lib/xalan.properties will be used.
+- * @param fallbackClassName Implementation class name, if nothing else
+- * is found. Use null to mean no fallback.
+- *
+- * @exception ObjectFactory.ConfigurationError
+- */
+- static Class lookUpFactoryClass(String factoryId,
+- String propertiesFilename,
+- String fallbackClassName)
+- throws ConfigurationError
+- {
+- String factoryClassName = lookUpFactoryClassName(factoryId,
+- propertiesFilename,
+- fallbackClassName);
+- ClassLoader cl = findClassLoader();
+-
+- if (factoryClassName == null) {
+- factoryClassName = fallbackClassName;
+- }
+-
+- // assert(className != null);
+- try{
+- Class providerClass = findProviderClass(factoryClassName,
+- cl,
+- true);
+- if (DEBUG) debugPrintln("created new instance of " + providerClass +
+- " using ClassLoader: " + cl);
+- return providerClass;
+- } catch (ClassNotFoundException x) {
+- throw new ConfigurationError(
+- "Provider " + factoryClassName + " not found", x);
+- } catch (Exception x) {
+- throw new ConfigurationError(
+- "Provider "+factoryClassName+" could not be instantiated: "+x,
+- x);
+- }
+- } // lookUpFactoryClass(String,String,String):Class
+-
+- /**
+- * Finds the name of the required implementation class in the specified
+- * order. The specified order is the following:
+- *
+- * - query the system property using
System.getProperty
+- * - read
$java.home/lib/propertiesFilename file
+- * - read
META-INF/services/factoryId file
+- * - use fallback classname
+- *
+- *
+- * @return name of class that provides factory service, never null
+- *
+- * @param factoryId Name of the factory to find, same as
+- * a property name
+- * @param propertiesFilename The filename in the $java.home/lib directory
+- * of the properties file. If none specified,
+- * ${java.home}/lib/xalan.properties will be used.
+- * @param fallbackClassName Implementation class name, if nothing else
+- * is found. Use null to mean no fallback.
+- *
+- * @exception ObjectFactory.ConfigurationError
+- */
+- static String lookUpFactoryClassName(String factoryId,
+- String propertiesFilename,
+- String fallbackClassName)
+- {
+- SecuritySupport ss = SecuritySupport.getInstance();
+-
+- // Use the system property first
+- try {
+- String systemProp = ss.getSystemProperty(factoryId);
+- if (systemProp != null) {
+- if (DEBUG) debugPrintln("found system property, value=" + systemProp);
+- return systemProp;
+- }
+- } catch (SecurityException se) {
+- // Ignore and continue w/ next location
+- }
+-
+- // Try to read from propertiesFilename, or
+- // $java.home/lib/xalan.properties
+- String factoryClassName = null;
+- // no properties file name specified; use
+- // $JAVA_HOME/lib/xalan.properties:
+- if (propertiesFilename == null) {
+- File propertiesFile = null;
+- boolean propertiesFileExists = false;
+- try {
+- String javah = ss.getSystemProperty("java.home");
+- propertiesFilename = javah + File.separator +
+- "lib" + File.separator + DEFAULT_PROPERTIES_FILENAME;
+- propertiesFile = new File(propertiesFilename);
+- propertiesFileExists = ss.getFileExists(propertiesFile);
+- } catch (SecurityException e) {
+- // try again...
+- fLastModified = -1;
+- fXalanProperties = null;
+- }
+-
+- synchronized (ObjectFactory.class) {
+- boolean loadProperties = false;
+- FileInputStream fis = null;
+- try {
+- // file existed last time
+- if(fLastModified >= 0) {
+- if(propertiesFileExists &&
+- (fLastModified < (fLastModified = ss.getLastModified(propertiesFile)))) {
+- loadProperties = true;
+- } else {
+- // file has stopped existing...
+- if(!propertiesFileExists) {
+- fLastModified = -1;
+- fXalanProperties = null;
+- } // else, file wasn't modified!
+- }
+- } else {
+- // file has started to exist:
+- if(propertiesFileExists) {
+- loadProperties = true;
+- fLastModified = ss.getLastModified(propertiesFile);
+- } // else, nothing's changed
+- }
+- if(loadProperties) {
+- // must never have attempted to read xalan.properties
+- // before (or it's outdeated)
+- fXalanProperties = new Properties();
+- fis = ss.getFileInputStream(propertiesFile);
+- fXalanProperties.load(fis);
+- }
+- } catch (Exception x) {
+- fXalanProperties = null;
+- fLastModified = -1;
+- // assert(x instanceof FileNotFoundException
+- // || x instanceof SecurityException)
+- // In both cases, ignore and continue w/ next location
+- }
+- finally {
+- // try to close the input stream if one was opened.
+- if (fis != null) {
+- try {
+- fis.close();
+- }
+- // Ignore the exception.
+- catch (IOException exc) {}
+- }
+- }
+- }
+- if(fXalanProperties != null) {
+- factoryClassName = fXalanProperties.getProperty(factoryId);
+- }
+- } else {
+- FileInputStream fis = null;
+- try {
+- fis = ss.getFileInputStream(new File(propertiesFilename));
+- Properties props = new Properties();
+- props.load(fis);
+- factoryClassName = props.getProperty(factoryId);
+- } catch (Exception x) {
+- // assert(x instanceof FileNotFoundException
+- // || x instanceof SecurityException)
+- // In both cases, ignore and continue w/ next location
+- }
+- finally {
+- // try to close the input stream if one was opened.
+- if (fis != null) {
+- try {
+- fis.close();
+- }
+- // Ignore the exception.
+- catch (IOException exc) {}
+- }
+- }
+- }
+- if (factoryClassName != null) {
+- if (DEBUG) debugPrintln("found in " + propertiesFilename + ", value="
+- + factoryClassName);
+- return factoryClassName;
+- }
+-
+- // Try Jar Service Provider Mechanism
+- return findJarServiceProviderName(factoryId);
+- } // lookUpFactoryClass(String,String):String
+-
+- //
+- // Private static methods
+- //
+-
+- /** Prints a message to standard error if debugging is enabled. */
+- private static void debugPrintln(String msg) {
+- if (DEBUG) {
+- System.err.println("JAXP: " + msg);
+- }
+- } // debugPrintln(String)
+-
+- /**
+- * Figure out which ClassLoader to use. For JDK 1.2 and later use
+- * the context ClassLoader.
+- */
+- static ClassLoader findClassLoader()
+- throws ConfigurationError
+- {
+- SecuritySupport ss = SecuritySupport.getInstance();
+-
+- // Figure out which ClassLoader to use for loading the provider
+- // class. If there is a Context ClassLoader then use it.
+- ClassLoader context = ss.getContextClassLoader();
+- ClassLoader system = ss.getSystemClassLoader();
+-
+- ClassLoader chain = system;
+- while (true) {
+- if (context == chain) {
+- // Assert: we are on JDK 1.1 or we have no Context ClassLoader
+- // or any Context ClassLoader in chain of system classloader
+- // (including extension ClassLoader) so extend to widest
+- // ClassLoader (always look in system ClassLoader if Xalan
+- // is in boot/extension/system classpath and in current
+- // ClassLoader otherwise); normal classloaders delegate
+- // back to system ClassLoader first so this widening doesn't
+- // change the fact that context ClassLoader will be consulted
+- ClassLoader current = ObjectFactory.class.getClassLoader();
+-
+- chain = system;
+- while (true) {
+- if (current == chain) {
+- // Assert: Current ClassLoader in chain of
+- // boot/extension/system ClassLoaders
+- return system;
+- }
+- if (chain == null) {
+- break;
+- }
+- chain = ss.getParentClassLoader(chain);
+- }
+-
+- // Assert: Current ClassLoader not in chain of
+- // boot/extension/system ClassLoaders
+- return current;
+- }
+-
+- if (chain == null) {
+- // boot ClassLoader reached
+- break;
+- }
+-
+- // Check for any extension ClassLoaders in chain up to
+- // boot ClassLoader
+- chain = ss.getParentClassLoader(chain);
+- };
+-
+- // Assert: Context ClassLoader not in chain of
+- // boot/extension/system ClassLoaders
+- return context;
+- } // findClassLoader():ClassLoader
+-
+- /**
+- * Create an instance of a class using the specified ClassLoader
+- */
+- static Object newInstance(String className, ClassLoader cl,
+- boolean doFallback)
+- throws ConfigurationError
+- {
+- // assert(className != null);
+- try{
+- Class providerClass = findProviderClass(className, cl, doFallback);
+- Object instance = providerClass.newInstance();
+- if (DEBUG) debugPrintln("created new instance of " + providerClass +
+- " using ClassLoader: " + cl);
+- return instance;
+- } catch (ClassNotFoundException x) {
+- throw new ConfigurationError(
+- "Provider " + className + " not found", x);
+- } catch (Exception x) {
+- throw new ConfigurationError(
+- "Provider " + className + " could not be instantiated: " + x,
+- x);
+- }
+- }
+-
+- /**
+- * Find a Class using the specified ClassLoader
+- */
+- static Class findProviderClass(String className, ClassLoader cl,
+- boolean doFallback)
+- throws ClassNotFoundException, ConfigurationError
+- {
+- //throw security exception if the calling thread is not allowed to access the
+- //class. Restrict the access to the package classes as specified in java.security policy.
+- SecurityManager security = System.getSecurityManager();
+- try{
+- if (security != null){
+- final int lastDot = className.lastIndexOf(".");
+- String packageName = className;
+- if (lastDot != -1) packageName = className.substring(0, lastDot);
+- security.checkPackageAccess(packageName);
+- }
+- }catch(SecurityException e){
+- throw e;
+- }
+-
+- Class providerClass;
+- if (cl == null) {
+- // XXX Use the bootstrap ClassLoader. There is no way to
+- // load a class using the bootstrap ClassLoader that works
+- // in both JDK 1.1 and Java 2. However, this should still
+- // work b/c the following should be true:
+- //
+- // (cl == null) iff current ClassLoader == null
+- //
+- // Thus Class.forName(String) will use the current
+- // ClassLoader which will be the bootstrap ClassLoader.
+- providerClass = Class.forName(className);
+- } else {
+- try {
+- providerClass = cl.loadClass(className);
+- } catch (ClassNotFoundException x) {
+- if (doFallback) {
+- // Fall back to current classloader
+- ClassLoader current = ObjectFactory.class.getClassLoader();
+- if (current == null) {
+- providerClass = Class.forName(className);
+- } else if (cl != current) {
+- cl = current;
+- providerClass = cl.loadClass(className);
+- } else {
+- throw x;
+- }
+- } else {
+- throw x;
+- }
+- }
+- }
+-
+- return providerClass;
+- }
+-
+- /**
+- * Find the name of service provider using Jar Service Provider Mechanism
+- *
+- * @return instance of provider class if found or null
+- */
+- private static String findJarServiceProviderName(String factoryId)
+- {
+- SecuritySupport ss = SecuritySupport.getInstance();
+- String serviceId = SERVICES_PATH + factoryId;
+- InputStream is = null;
+-
+- // First try the Context ClassLoader
+- ClassLoader cl = findClassLoader();
+-
+- is = ss.getResourceAsStream(cl, serviceId);
+-
+- // If no provider found then try the current ClassLoader
+- if (is == null) {
+- ClassLoader current = ObjectFactory.class.getClassLoader();
+- if (cl != current) {
+- cl = current;
+- is = ss.getResourceAsStream(cl, serviceId);
+- }
+- }
+-
+- if (is == null) {
+- // No provider found
+- return null;
+- }
+-
+- if (DEBUG) debugPrintln("found jar resource=" + serviceId +
+- " using ClassLoader: " + cl);
+-
+- // Read the service provider name in UTF-8 as specified in
+- // the jar spec. Unfortunately this fails in Microsoft
+- // VJ++, which does not implement the UTF-8
+- // encoding. Theoretically, we should simply let it fail in
+- // that case, since the JVM is obviously broken if it
+- // doesn't support such a basic standard. But since there
+- // are still some users attempting to use VJ++ for
+- // development, we have dropped in a fallback which makes a
+- // second attempt using the platform's default encoding. In
+- // VJ++ this is apparently ASCII, which is a subset of
+- // UTF-8... and since the strings we'll be reading here are
+- // also primarily limited to the 7-bit ASCII range (at
+- // least, in English versions), this should work well
+- // enough to keep us on the air until we're ready to
+- // officially decommit from VJ++. [Edited comment from
+- // jkesselm]
+- BufferedReader rd;
+- try {
+- rd = new BufferedReader(new InputStreamReader(is, "UTF-8"));
+- } catch (java.io.UnsupportedEncodingException e) {
+- rd = new BufferedReader(new InputStreamReader(is));
+- }
+-
+- String factoryClassName = null;
+- try {
+- // XXX Does not handle all possible input as specified by the
+- // Jar Service Provider specification
+- factoryClassName = rd.readLine();
+- } catch (IOException x) {
+- // No provider found
+- return null;
+- }
+- finally {
+- try {
+- // try to close the reader.
+- rd.close();
+- }
+- // Ignore the exception.
+- catch (IOException exc) {}
+- }
+-
+- if (factoryClassName != null &&
+- ! "".equals(factoryClassName)) {
+- if (DEBUG) debugPrintln("found in resource, value="
+- + factoryClassName);
+-
+- // Note: here we do not want to fall back to the current
+- // ClassLoader because we want to avoid the case where the
+- // resource file was found using one ClassLoader and the
+- // provider class was instantiated using a different one.
+- return factoryClassName;
+- }
+-
+- // No provider found
+- return null;
+- }
+-
+- //
+- // Classes
+- //
+-
+- /**
+- * A configuration error.
+- */
+- static class ConfigurationError
+- extends Error {
+- static final long serialVersionUID = -5782303800588797207L;
+- //
+- // Data
+- //
+-
+- /** Exception. */
+- private Exception exception;
+-
+- //
+- // Constructors
+- //
+-
+- /**
+- * Construct a new instance with the specified detail string and
+- * exception.
+- */
+- ConfigurationError(String msg, Exception x) {
+- super(msg);
+- this.exception = x;
+- } // (String,Exception)
+-
+- //
+- // Public methods
+- //
+-
+- /** Returns the exception associated to this error. */
+- Exception getException() {
+- return exception;
+- } // getException():Exception
+-
+- } // class ConfigurationError
+-
+-} // class ObjectFactory
+--- src/com/sun/org/apache/xpath/internal/functions/SecuritySupport12.java 2013-04-16 14:28:09.752156937 +0100
++++ src/com/sun/org/apache/xpath/internal/functions/SecuritySupport12.java 1970-01-01 01:00:00.000000000 +0100
+@@ -1,148 +0,0 @@
+-/*
+- * reserved comment block
+- * DO NOT REMOVE OR ALTER!
+- */
+-/*
+- * Copyright 2002-2004 The Apache Software Foundation.
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- *
+- * http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-/*
+- * $Id: SecuritySupport12.java,v 1.1.2.1 2005/08/01 01:29:45 jeffsuttor Exp $
+- */
+-
+-package com.sun.org.apache.xpath.internal.functions;
+-
+-import java.io.File;
+-import java.io.FileInputStream;
+-import java.io.FileNotFoundException;
+-import java.io.InputStream;
+-
+-import java.security.AccessController;
+-import java.security.PrivilegedAction;
+-import java.security.PrivilegedActionException;
+-import java.security.PrivilegedExceptionAction;
+-
+-import java.util.Properties;
+-
+-/**
+- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
+- * It is package private and therefore is not exposed as part of the Xalan-Java
+- * API.
+- *
+- * Security related methods that only work on J2SE 1.2 and newer.
+- */
+-class SecuritySupport12 extends SecuritySupport {
+-
+- ClassLoader getContextClassLoader() {
+- return (ClassLoader)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- ClassLoader cl = null;
+- try {
+- cl = Thread.currentThread().getContextClassLoader();
+- } catch (SecurityException ex) { }
+- return cl;
+- }
+- });
+- }
+-
+- ClassLoader getSystemClassLoader() {
+- return (ClassLoader)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- ClassLoader cl = null;
+- try {
+- cl = ClassLoader.getSystemClassLoader();
+- } catch (SecurityException ex) {}
+- return cl;
+- }
+- });
+- }
+-
+- ClassLoader getParentClassLoader(final ClassLoader cl) {
+- return (ClassLoader)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- ClassLoader parent = null;
+- try {
+- parent = cl.getParent();
+- } catch (SecurityException ex) {}
+-
+- // eliminate loops in case of the boot
+- // ClassLoader returning itself as a parent
+- return (parent == cl) ? null : parent;
+- }
+- });
+- }
+-
+- String getSystemProperty(final String propName) {
+- return (String)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- return System.getProperty(propName);
+- }
+- });
+- }
+-
+- FileInputStream getFileInputStream(final File file)
+- throws FileNotFoundException
+- {
+- try {
+- return (FileInputStream)
+- AccessController.doPrivileged(new PrivilegedExceptionAction() {
+- public Object run() throws FileNotFoundException {
+- return new FileInputStream(file);
+- }
+- });
+- } catch (PrivilegedActionException e) {
+- throw (FileNotFoundException)e.getException();
+- }
+- }
+-
+- InputStream getResourceAsStream(final ClassLoader cl,
+- final String name)
+- {
+- return (InputStream)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- InputStream ris;
+- if (cl == null) {
+- ris = ClassLoader.getSystemResourceAsStream(name);
+- } else {
+- ris = cl.getResourceAsStream(name);
+- }
+- return ris;
+- }
+- });
+- }
+-
+- boolean getFileExists(final File f) {
+- return ((Boolean)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- return new Boolean(f.exists());
+- }
+- })).booleanValue();
+- }
+-
+- long getLastModified(final File f) {
+- return ((Long)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- return new Long(f.lastModified());
+- }
+- })).longValue();
+- }
+-
+-}
+--- src/com/sun/org/apache/xpath/internal/functions/SecuritySupport.java 2013-04-16 14:28:09.752156937 +0100
++++ src/com/sun/org/apache/xpath/internal/functions/SecuritySupport.java 1970-01-01 01:00:00.000000000 +0100
+@@ -1,127 +0,0 @@
+-/*
+- * reserved comment block
+- * DO NOT REMOVE OR ALTER!
+- */
+-/*
+- * Copyright 2002-2004 The Apache Software Foundation.
+- *
+- * Licensed under the Apache License, Version 2.0 (the "License");
+- * you may not use this file except in compliance with the License.
+- * You may obtain a copy of the License at
+- *
+- * http://www.apache.org/licenses/LICENSE-2.0
+- *
+- * Unless required by applicable law or agreed to in writing, software
+- * distributed under the License is distributed on an "AS IS" BASIS,
+- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+- * See the License for the specific language governing permissions and
+- * limitations under the License.
+- */
+-/*
+- * $Id: SecuritySupport.java,v 1.1.2.1 2005/08/01 01:29:39 jeffsuttor Exp $
+- */
+-
+-package com.sun.org.apache.xpath.internal.functions;
+-
+-import java.io.File;
+-import java.io.FileInputStream;
+-import java.io.FileNotFoundException;
+-import java.io.InputStream;
+-
+-import java.util.Properties;
+-
+-/**
+- * This class is duplicated for each Xalan-Java subpackage so keep it in sync.
+- * It is package private and therefore is not exposed as part of the Xalan-Java
+- * API.
+- *
+- * Base class with security related methods that work on JDK 1.1.
+- */
+-class SecuritySupport {
+-
+- /*
+- * Make this of type Object so that the verifier won't try to
+- * prove its type, thus possibly trying to load the SecuritySupport12
+- * class.
+- */
+- private static final Object securitySupport;
+-
+- static {
+- SecuritySupport ss = null;
+- try {
+- Class c = Class.forName("java.security.AccessController");
+- // if that worked, we're on 1.2.
+- /*
+- // don't reference the class explicitly so it doesn't
+- // get dragged in accidentally.
+- c = Class.forName("javax.mail.SecuritySupport12");
+- Constructor cons = c.getConstructor(new Class[] { });
+- ss = (SecuritySupport)cons.newInstance(new Object[] { });
+- */
+- /*
+- * Unfortunately, we can't load the class using reflection
+- * because the class is package private. And the class has
+- * to be package private so the APIs aren't exposed to other
+- * code that could use them to circumvent security. Thus,
+- * we accept the risk that the direct reference might fail
+- * on some JDK 1.1 JVMs, even though we would never execute
+- * this code in such a case. Sigh...
+- */
+- ss = new SecuritySupport12();
+- } catch (Exception ex) {
+- // ignore it
+- } finally {
+- if (ss == null)
+- ss = new SecuritySupport();
+- securitySupport = ss;
+- }
+- }
+-
+- /**
+- * Return an appropriate instance of this class, depending on whether
+- * we're on a JDK 1.1 or J2SE 1.2 (or later) system.
+- */
+- static SecuritySupport getInstance() {
+- return (SecuritySupport)securitySupport;
+- }
+-
+- ClassLoader getContextClassLoader() {
+- return null;
+- }
+-
+- ClassLoader getSystemClassLoader() {
+- return null;
+- }
+-
+- ClassLoader getParentClassLoader(ClassLoader cl) {
+- return null;
+- }
+-
+- String getSystemProperty(String propName) {
+- return System.getProperty(propName);
+- }
+-
+- FileInputStream getFileInputStream(File file)
+- throws FileNotFoundException
+- {
+- return new FileInputStream(file);
+- }
+-
+- InputStream getResourceAsStream(ClassLoader cl, String name) {
+- InputStream ris;
+- if (cl == null) {
+- ris = ClassLoader.getSystemResourceAsStream(name);
+- } else {
+- ris = cl.getResourceAsStream(name);
+- }
+- return ris;
+- }
+-
+- boolean getFileExists(File f) {
+- return f.exists();
+- }
+-
+- long getLastModified(File f) {
+- return f.lastModified();
+- }
+-}
+--- src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_de.java 2013-04-16 14:28:09.764157131 +0100
++++ src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_de.java 2013-04-16 14:29:26.565394640 +0100
+@@ -23,9 +23,6 @@
+ package com.sun.org.apache.xpath.internal.res;
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -1269,68 +1266,4 @@
+ /** Field QUERY_HEADER */
+ public static final String QUERY_HEADER = "MUSTER ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className Name of local-specific subclass.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XPATHErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XPATHErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XPATHErrorResources) ResourceBundle.getBundle(className,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_es.java 2013-04-16 14:28:09.764157131 +0100
++++ src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_es.java 2013-04-16 14:29:26.565394640 +0100
+@@ -23,9 +23,6 @@
+ package com.sun.org.apache.xpath.internal.res;
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -1273,68 +1270,4 @@
+ /** Field QUERY_HEADER */
+ public static final String QUERY_HEADER = "PATTERN ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className Name of local-specific subclass.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XPATHErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XPATHErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XPATHErrorResources) ResourceBundle.getBundle(className,
+- new Locale("es", "ES"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_fr.java 2013-04-16 14:28:09.768157196 +0100
++++ src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_fr.java 2013-04-16 14:29:26.565394640 +0100
+@@ -23,9 +23,6 @@
+ package com.sun.org.apache.xpath.internal.res;
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -1270,68 +1267,4 @@
+ /** Field QUERY_HEADER */
+ public static final String QUERY_HEADER = "PATTERN ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className Name of local-specific subclass.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XPATHErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XPATHErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XPATHErrorResources) ResourceBundle.getBundle(className,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_it.java 2013-04-16 14:28:09.768157196 +0100
++++ src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_it.java 2013-04-16 14:29:26.565394640 +0100
+@@ -23,9 +23,6 @@
+ package com.sun.org.apache.xpath.internal.res;
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -1272,68 +1269,4 @@
+ /** Field QUERY_HEADER */
+ public static final String QUERY_HEADER = "MODELLO ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className Name of local-specific subclass.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XPATHErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XPATHErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XPATHErrorResources) ResourceBundle.getBundle(className,
+- new Locale("it", "IT"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ja.java 2013-04-16 14:28:09.768157196 +0100
++++ src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ja.java 2013-04-16 14:29:26.565394640 +0100
+@@ -23,9 +23,6 @@
+ package com.sun.org.apache.xpath.internal.res;
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -1269,68 +1266,4 @@
+ /** Field QUERY_HEADER */
+ public static final String QUERY_HEADER = "\u30d1\u30bf\u30fc\u30f3 ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className Name of local-specific subclass.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XPATHErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XPATHErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XPATHErrorResources) ResourceBundle.getBundle(className,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources.java 2013-04-16 14:28:09.764157131 +0100
++++ src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources.java 2013-04-16 14:29:26.565394640 +0100
+@@ -23,9 +23,6 @@
+ package com.sun.org.apache.xpath.internal.res;
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -938,68 +935,4 @@
+ /** Field QUERY_HEADER */
+ public static final String QUERY_HEADER = "PATTERN ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className Name of local-specific subclass.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XPATHErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XPATHErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XPATHErrorResources) ResourceBundle.getBundle(className,
+- new Locale("en", "US"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ko.java 2013-04-16 14:28:09.768157196 +0100
++++ src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_ko.java 2013-04-16 14:29:26.565394640 +0100
+@@ -23,9 +23,6 @@
+ package com.sun.org.apache.xpath.internal.res;
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -1269,68 +1266,4 @@
+ /** Field QUERY_HEADER */
+ public static final String QUERY_HEADER = "PATTERN ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className Name of local-specific subclass.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XPATHErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XPATHErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XPATHErrorResources) ResourceBundle.getBundle(className,
+- new Locale("ko", "KR"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_CN.java 2013-04-16 14:28:09.772157260 +0100
++++ src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_CN.java 2013-04-16 14:29:26.565394640 +0100
+@@ -23,9 +23,6 @@
+ package com.sun.org.apache.xpath.internal.res;
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -1270,68 +1267,4 @@
+ /** Field QUERY_HEADER */
+ public static final String QUERY_HEADER = "PATTERN ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className Name of local-specific subclass.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XPATHErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XPATHErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XPATHErrorResources) ResourceBundle.getBundle(className,
+- new Locale("zh", "CN"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "\u65e0\u6cd5\u88c5\u5165\u4efb\u4f55\u8d44\u6e90\u5305\u3002", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_TW.java 2013-04-16 14:28:09.772157260 +0100
++++ src/com/sun/org/apache/xpath/internal/res/XPATHErrorResources_zh_TW.java 2013-04-16 14:29:26.565394640 +0100
+@@ -23,9 +23,6 @@
+ package com.sun.org.apache.xpath.internal.res;
+
+ import java.util.ListResourceBundle;
+-import java.util.Locale;
+-import java.util.MissingResourceException;
+-import java.util.ResourceBundle;
+
+ /**
+ * Set up error messages.
+@@ -1270,68 +1267,4 @@
+ /** Field QUERY_HEADER */
+ public static final String QUERY_HEADER = "PATTERN ";
+
+-
+- /**
+- * Return a named ResourceBundle for a particular locale. This method mimics the behavior
+- * of ResourceBundle.getBundle().
+- *
+- * @param className Name of local-specific subclass.
+- * @return the ResourceBundle
+- * @throws MissingResourceException
+- */
+- public static final XPATHErrorResources loadResourceBundle(String className)
+- throws MissingResourceException
+- {
+-
+- Locale locale = Locale.getDefault();
+- String suffix = getResourceSuffix(locale);
+-
+- try
+- {
+-
+- // first try with the given locale
+- return (XPATHErrorResources) ResourceBundle.getBundle(className
+- + suffix, locale);
+- }
+- catch (MissingResourceException e)
+- {
+- try // try to fall back to en_US if we can't load
+- {
+-
+- // Since we can't find the localized property file,
+- // fall back to en_US.
+- return (XPATHErrorResources) ResourceBundle.getBundle(className,
+- new Locale("zh", "TW"));
+- }
+- catch (MissingResourceException e2)
+- {
+-
+- // Now we are really in trouble.
+- // very bad, definitely very bad...not going to get very far
+- throw new MissingResourceException(
+- "Could not load any resource bundles.", className, "");
+- }
+- }
+- }
+-
+- /**
+- * Return the resource file suffic for the indicated locale
+- * For most locales, this will be based the language code. However
+- * for Chinese, we do distinguish between Taiwan and PRC
+- *
+- * @param locale the locale
+- * @return an String suffix which canbe appended to a resource name
+- */
+- private static final String getResourceSuffix(Locale locale)
+- {
+-
+- String suffix = "_" + locale.getLanguage();
+- String country = locale.getCountry();
+-
+- if (country.equals("TW"))
+- suffix += "_" + country;
+-
+- return suffix;
+- }
+-
+ }
+--- src/com/sun/org/apache/xpath/internal/res/XPATHMessages.java 2013-04-16 14:28:09.772157260 +0100
++++ src/com/sun/org/apache/xpath/internal/res/XPATHMessages.java 2013-04-16 14:29:26.569394704 +0100
+@@ -22,130 +22,128 @@
+ */
+ package com.sun.org.apache.xpath.internal.res;
+
+-import java.util.ListResourceBundle;
+-
++import com.sun.org.apache.bcel.internal.util.SecuritySupport;
+ import com.sun.org.apache.xml.internal.res.XMLMessages;
++import java.util.ListResourceBundle;
+
+ /**
+ * A utility class for issuing XPath error messages.
++ *
+ * @xsl.usage internal
+ */
+-public class XPATHMessages extends XMLMessages
+-{
+- /** The language specific resource object for XPath messages. */
+- private static ListResourceBundle XPATHBundle = null;
+-
+- /** The class name of the XPath error message string table. */
+- private static final String XPATH_ERROR_RESOURCES =
+- "com.sun.org.apache.xpath.internal.res.XPATHErrorResources";
+-
+- /**
+- * Creates a message from the specified key and replacement
+- * arguments, localized to the given locale.
+- *
+- * @param msgKey The key for the message text.
+- * @param args The arguments to be used as replacement text
+- * in the message created.
+- *
+- * @return The formatted message string.
+- */
+- public static final String createXPATHMessage(String msgKey, Object args[]) //throws Exception
+- {
+- if (XPATHBundle == null)
+- XPATHBundle = loadResourceBundle(XPATH_ERROR_RESOURCES);
++public class XPATHMessages extends XMLMessages {
+
+- if (XPATHBundle != null)
++ /**
++ * The language specific resource object for XPath messages.
++ */
++ private static ListResourceBundle XPATHBundle = null;
++ /**
++ * The class name of the XPath error message string table.
++ */
++ private static final String XPATH_ERROR_RESOURCES =
++ "com.sun.org.apache.xpath.internal.res.XPATHErrorResources";
++
++ /**
++ * Creates a message from the specified key and replacement arguments,
++ * localized to the given locale.
++ *
++ * @param msgKey The key for the message text.
++ * @param args The arguments to be used as replacement text in the message
++ * created.
++ *
++ * @return The formatted message string.
++ */
++ public static final String createXPATHMessage(String msgKey, Object args[]) //throws Exception
+ {
+- return createXPATHMsg(XPATHBundle, msgKey, args);
+- }
+- else
+- return "Could not load any resource bundles.";
+- }
+-
+- /**
+- * Creates a message from the specified key and replacement
+- * arguments, localized to the given locale.
+- *
+- * @param msgKey The key for the message text.
+- * @param args The arguments to be used as replacement text
+- * in the message created.
+- *
+- * @return The formatted warning string.
+- */
+- public static final String createXPATHWarning(String msgKey, Object args[]) //throws Exception
+- {
+- if (XPATHBundle == null)
+- XPATHBundle = loadResourceBundle(XPATH_ERROR_RESOURCES);
++ if (XPATHBundle == null) {
++ XPATHBundle = SecuritySupport.getResourceBundle(XPATH_ERROR_RESOURCES);
++ }
+
+- if (XPATHBundle != null)
+- {
+- return createXPATHMsg(XPATHBundle, msgKey, args);
++ if (XPATHBundle != null) {
++ return createXPATHMsg(XPATHBundle, msgKey, args);
++ } else {
++ return "Could not load any resource bundles.";
++ }
+ }
+- else
+- return "Could not load any resource bundles.";
+- }
+-
+- /**
+- * Creates a message from the specified key and replacement
+- * arguments, localized to the given locale.
+- *
+- * @param fResourceBundle The resource bundle to use.
+- * @param msgKey The message key to use.
+- * @param args The arguments to be used as replacement text
+- * in the message created.
+- *
+- * @return The formatted message string.
+- */
+- public static final String createXPATHMsg(ListResourceBundle fResourceBundle,
+- String msgKey, Object args[]) //throws Exception
+- {
+-
+- String fmsg = null;
+- boolean throwex = false;
+- String msg = null;
+-
+- if (msgKey != null)
+- msg = fResourceBundle.getString(msgKey);
+
+- if (msg == null)
++ /**
++ * Creates a message from the specified key and replacement arguments,
++ * localized to the given locale.
++ *
++ * @param msgKey The key for the message text.
++ * @param args The arguments to be used as replacement text in the message
++ * created.
++ *
++ * @return The formatted warning string.
++ */
++ public static final String createXPATHWarning(String msgKey, Object args[]) //throws Exception
+ {
+- msg = fResourceBundle.getString(XPATHErrorResources.BAD_CODE);
+- throwex = true;
++ if (XPATHBundle == null) {
++ XPATHBundle = SecuritySupport.getResourceBundle(XPATH_ERROR_RESOURCES);
++ }
++
++ if (XPATHBundle != null) {
++ return createXPATHMsg(XPATHBundle, msgKey, args);
++ } else {
++ return "Could not load any resource bundles.";
++ }
+ }
+
+- if (args != null)
++ /**
++ * Creates a message from the specified key and replacement arguments,
++ * localized to the given locale.
++ *
++ * @param fResourceBundle The resource bundle to use.
++ * @param msgKey The message key to use.
++ * @param args The arguments to be used as replacement text in the message
++ * created.
++ *
++ * @return The formatted message string.
++ */
++ public static final String createXPATHMsg(ListResourceBundle fResourceBundle,
++ String msgKey, Object args[]) //throws Exception
+ {
+- try
+- {
+
+- // Do this to keep format from crying.
+- // This is better than making a bunch of conditional
+- // code all over the place.
+- int n = args.length;
+-
+- for (int i = 0; i < n; i++)
+- {
+- if (null == args[i])
+- args[i] = "";
+- }
+-
+- fmsg = java.text.MessageFormat.format(msg, args);
+- }
+- catch (Exception e)
+- {
+- fmsg = fResourceBundle.getString(XPATHErrorResources.FORMAT_FAILED);
+- fmsg += " " + msg;
+- }
+- }
+- else
+- fmsg = msg;
++ String fmsg = null;
++ boolean throwex = false;
++ String msg = null;
+
+- if (throwex)
+- {
+- throw new RuntimeException(fmsg);
+- }
++ if (msgKey != null) {
++ msg = fResourceBundle.getString(msgKey);
++ }
++
++ if (msg == null) {
++ msg = fResourceBundle.getString(XPATHErrorResources.BAD_CODE);
++ throwex = true;
++ }
+
+- return fmsg;
+- }
++ if (args != null) {
++ try {
+
++ // Do this to keep format from crying.
++ // This is better than making a bunch of conditional
++ // code all over the place.
++ int n = args.length;
++
++ for (int i = 0; i < n; i++) {
++ if (null == args[i]) {
++ args[i] = "";
++ }
++ }
++
++ fmsg = java.text.MessageFormat.format(msg, args);
++ } catch (Exception e) {
++ fmsg = fResourceBundle.getString(XPATHErrorResources.FORMAT_FAILED);
++ fmsg += " " + msg;
++ }
++ } else {
++ fmsg = msg;
++ }
++
++ if (throwex) {
++ throw new RuntimeException(fmsg);
++ }
++
++ return fmsg;
++ }
+ }
+--- src/com/sun/xml/internal/stream/writers/WriterUtility.java 2013-04-16 14:28:09.780157389 +0100
++++ src/com/sun/xml/internal/stream/writers/WriterUtility.java 2013-04-16 14:29:26.569394704 +0100
+@@ -32,6 +32,7 @@
+ import java.nio.charset.Charset;
+ import java.nio.charset.CharsetEncoder;
+ import com.sun.org.apache.xerces.internal.util.XMLChar;
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+
+ /**
+ * Implements common xml writer functions.
+@@ -240,7 +241,7 @@
+
+ private CharsetEncoder getDefaultEncoder(){
+ try{
+- String encoding = System.getProperty("file.encoding");
++ String encoding = SecuritySupport.getSystemProperty("file.encoding");
+ if(encoding != null){
+ return Charset.forName(encoding).newEncoder();
+ }
+--- src/com/sun/xml/internal/stream/writers/XMLStreamWriterImpl.java 2013-04-16 14:28:09.780157389 +0100
++++ src/com/sun/xml/internal/stream/writers/XMLStreamWriterImpl.java 2013-04-16 14:29:26.569394704 +0100
+@@ -53,6 +53,7 @@
+ import com.sun.org.apache.xerces.internal.impl.PropertyManager;
+ import com.sun.org.apache.xerces.internal.util.NamespaceSupport;
+ import com.sun.org.apache.xerces.internal.util.SymbolTable;
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+ import com.sun.org.apache.xerces.internal.xni.QName;
+
+ import com.sun.xml.internal.stream.util.ReadOnlyIterator;
+@@ -339,7 +340,7 @@
+ fEncoder = Charset.forName(encoding).newEncoder();
+ }
+ } else {
+- encoding = System.getProperty("file.encoding");
++ encoding = SecuritySupport.getSystemProperty("file.encoding");
+ if (encoding != null && encoding.equalsIgnoreCase("utf-8")) {
+ fWriter = new UTF8OutputStreamWriter(os);
+ } else {
+--- src/com/sun/xml/internal/stream/XMLEntityStorage.java 2013-04-16 14:28:09.772157260 +0100
++++ src/com/sun/xml/internal/stream/XMLEntityStorage.java 2013-04-16 14:29:26.569394704 +0100
+@@ -36,6 +36,7 @@
+ import com.sun.org.apache.xerces.internal.impl.PropertyManager;
+ import com.sun.org.apache.xerces.internal.impl.XMLErrorReporter;
+ import com.sun.org.apache.xerces.internal.impl.Constants;
++import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
+
+ /**
+ *
+@@ -410,7 +411,7 @@
+ // get the user.dir property
+ String userDir = "";
+ try {
+- userDir = System.getProperty("user.dir");
++ userDir = SecuritySupport.getSystemProperty("user.dir");
+ }
+ catch (SecurityException se) {
+ }
+--- src/javax/xml/datatype/FactoryFinder.java 2013-04-16 14:28:09.784157453 +0100
++++ src/javax/xml/datatype/FactoryFinder.java 2013-04-16 14:29:26.569394704 +0100
+@@ -44,6 +44,7 @@
+ * @author Santiago.PericasGeertsen@sun.com
+ */
+ class FactoryFinder {
++ private static final String DEFAULT_PACKAGE = "com.sun.org.apache.xerces.internal";
+
+ /**
+ * Internal debug flag.
+@@ -95,18 +96,24 @@
+ * If the class loader supplied is null, first try using the
+ * context class loader followed by the current (i.e. bootstrap) class
+ * loader.
++ *
++ * Use bootstrap classLoader if cl = null and useBSClsLoader is true
+ */
+ static private Class getProviderClass(String className, ClassLoader cl,
+- boolean doFallback) throws ClassNotFoundException
++ boolean doFallback, boolean useBSClsLoader) throws ClassNotFoundException
+ {
+ try {
+ if (cl == null) {
+- cl = ss.getContextClassLoader();
+- if (cl == null) {
+- throw new ClassNotFoundException();
+- }
+- else {
+- return cl.loadClass(className);
++ if (useBSClsLoader) {
++ return Class.forName(className, true, FactoryFinder.class.getClassLoader());
++ } else {
++ cl = ss.getContextClassLoader();
++ if (cl == null) {
++ throw new ClassNotFoundException();
++ }
++ else {
++ return cl.loadClass(className);
++ }
+ }
+ }
+ else {
+@@ -131,8 +138,8 @@
+ * @param className Name of the concrete class corresponding to the
+ * service provider
+ *
+- * @param cl ClassLoader to use to load the class, null means to use
+- * the bootstrap ClassLoader
++ * @param cl ClassLoader used to load the factory class. If null
++ * current Thread's context classLoader is used to load the factory class.
+ *
+ * @param doFallback True if the current ClassLoader should be tried as
+ * a fallback if the class is not found using cl
+@@ -140,8 +147,38 @@
+ static Object newInstance(String className, ClassLoader cl, boolean doFallback)
+ throws ConfigurationError
+ {
++ return newInstance(className, cl, doFallback, false);
++ }
++
++ /**
++ * Create an instance of a class. Delegates to method
++ * getProviderClass() in order to load the class.
++ *
++ * @param className Name of the concrete class corresponding to the
++ * service provider
++ *
++ * @param cl ClassLoader to use to load the class, null means to use
++ * the bootstrap ClassLoader
++ *
++ * @param doFallback True if the current ClassLoader should be tried as
++ * a fallback if the class is not found using cl
++ *
++ * @param useBSClsLoader True if cl=null actually meant bootstrap classLoader. This parameter
++ * is needed since DocumentBuilderFactory/SAXParserFactory defined null as context classLoader.
++ */
++ static Object newInstance(String className, ClassLoader cl, boolean doFallback, boolean useBSClsLoader)
++ throws ConfigurationError
++ {
++ // make sure we have access to restricted packages
++ if (System.getSecurityManager() != null) {
++ if (className != null && className.startsWith(DEFAULT_PACKAGE)) {
++ cl = null;
++ useBSClsLoader = true;
++ }
++ }
++
+ try {
+- Class providerClass = getProviderClass(className, cl, doFallback);
++ Class providerClass = getProviderClass(className, cl, doFallback, useBSClsLoader);
+ Object instance = providerClass.newInstance();
+ if (debug) { // Extra check to avoid computing cl strings
+ dPrint("created new instance of " + providerClass +
+@@ -244,6 +281,7 @@
+
+ // First try the Context ClassLoader
+ ClassLoader cl = ss.getContextClassLoader();
++ boolean useBSClsLoader = false;
+ if (cl != null) {
+ is = ss.getResourceAsStream(cl, serviceId);
+
+@@ -251,11 +289,13 @@
+ if (is == null) {
+ cl = FactoryFinder.class.getClassLoader();
+ is = ss.getResourceAsStream(cl, serviceId);
++ useBSClsLoader = true;
+ }
+ } else {
+ // No Context ClassLoader, try the current ClassLoader
+ cl = FactoryFinder.class.getClassLoader();
+ is = ss.getResourceAsStream(cl, serviceId);
++ useBSClsLoader = true;
+ }
+
+ if (is == null) {
+@@ -293,7 +333,7 @@
+ // ClassLoader because we want to avoid the case where the
+ // resource file was found using one ClassLoader and the
+ // provider class was instantiated using a different one.
+- return newInstance(factoryClassName, cl, false);
++ return newInstance(factoryClassName, cl, false, useBSClsLoader);
+ }
+
+ // No provider found
+--- src/javax/xml/stream/FactoryFinder.java 2013-04-16 14:28:09.788157518 +0100
++++ src/javax/xml/stream/FactoryFinder.java 2013-04-16 14:29:26.569394704 +0100
+@@ -25,14 +25,12 @@
+
+ package javax.xml.stream;
+
+-import java.io.InputStream;
+-import java.io.IOException;
+-import java.io.File;
+-import java.io.FileInputStream;
+-
+-import java.util.Properties;
+ import java.io.BufferedReader;
++import java.io.File;
++import java.io.IOException;
++import java.io.InputStream;
+ import java.io.InputStreamReader;
++import java.util.Properties;
+
+ /**
+ * Implements pluggable Datatypes.
+@@ -43,6 +41,8 @@
+ * @author Santiago.PericasGeertsen@sun.com
+ */
+ class FactoryFinder {
++ // Check we have access to package.
++ private static final String DEFAULT_PACKAGE = "com.sun.xml.internal.";
+
+ /**
+ * Internal debug flag.
+@@ -94,18 +94,24 @@
+ * If the class loader supplied is null, first try using the
+ * context class loader followed by the current (i.e. bootstrap) class
+ * loader.
++ *
++ * Use bootstrap classLoader if cl = null and useBSClsLoader is true
+ */
+ static private Class getProviderClass(String className, ClassLoader cl,
+- boolean doFallback) throws ClassNotFoundException
++ boolean doFallback, boolean useBSClsLoader) throws ClassNotFoundException
+ {
+ try {
+ if (cl == null) {
+- cl = ss.getContextClassLoader();
+- if (cl == null) {
+- throw new ClassNotFoundException();
+- }
+- else {
+- return cl.loadClass(className);
++ if (useBSClsLoader) {
++ return Class.forName(className, true, FactoryFinder.class.getClassLoader());
++ } else {
++ cl = ss.getContextClassLoader();
++ if (cl == null) {
++ throw new ClassNotFoundException();
++ }
++ else {
++ return cl.loadClass(className);
++ }
+ }
+ }
+ else {
+@@ -130,8 +136,8 @@
+ * @param className Name of the concrete class corresponding to the
+ * service provider
+ *
+- * @param cl ClassLoader to use to load the class, null means to use
+- * the bootstrap ClassLoader
++ * @param cl ClassLoader used to load the factory class. If null
++ * current Thread's context classLoader is used to load the factory class.
+ *
+ * @param doFallback True if the current ClassLoader should be tried as
+ * a fallback if the class is not found using cl
+@@ -139,8 +145,38 @@
+ static Object newInstance(String className, ClassLoader cl, boolean doFallback)
+ throws ConfigurationError
+ {
++ return newInstance(className, cl, doFallback, false);
++ }
++
++ /**
++ * Create an instance of a class. Delegates to method
++ * getProviderClass() in order to load the class.
++ *
++ * @param className Name of the concrete class corresponding to the
++ * service provider
++ *
++ * @param cl ClassLoader used to load the factory class. If null
++ * current Thread's context classLoader is used to load the factory class.
++ *
++ * @param doFallback True if the current ClassLoader should be tried as
++ * a fallback if the class is not found using cl
++ *
++ * @param useBSClsLoader True if cl=null actually meant bootstrap classLoader. This parameter
++ * is needed since DocumentBuilderFactory/SAXParserFactory defined null as context classLoader.
++ */
++ static Object newInstance(String className, ClassLoader cl, boolean doFallback, boolean useBSClsLoader)
++ throws ConfigurationError
++ {
++ // make sure we have access to restricted packages
++ if (System.getSecurityManager() != null) {
++ if (className != null && className.startsWith(DEFAULT_PACKAGE)) {
++ cl = null;
++ useBSClsLoader = true;
++ }
++ }
++
+ try {
+- Class providerClass = getProviderClass(className, cl, doFallback);
++ Class providerClass = getProviderClass(className, cl, doFallback, useBSClsLoader);
+ Object instance = providerClass.newInstance();
+ if (debug) { // Extra check to avoid computing cl strings
+ dPrint("created new instance of " + providerClass +
+@@ -233,11 +269,11 @@
+ if (ss.doesFileExist(f)) {
+ dPrint("Read properties file "+f);
+ cacheProps.load(ss.getFileInputStream(f));
+- }
+- }
+ }
+ }
+ }
++ }
++ }
+ factoryClassName = cacheProps.getProperty(factoryId);
+
+ if (factoryClassName != null) {
+@@ -276,6 +312,7 @@
+
+ // First try the Context ClassLoader
+ ClassLoader cl = ss.getContextClassLoader();
++ boolean useBSClsLoader = false;
+ if (cl != null) {
+ is = ss.getResourceAsStream(cl, serviceId);
+
+@@ -283,11 +320,13 @@
+ if (is == null) {
+ cl = FactoryFinder.class.getClassLoader();
+ is = ss.getResourceAsStream(cl, serviceId);
++ useBSClsLoader = true;
+ }
+ } else {
+ // No Context ClassLoader, try the current ClassLoader
+ cl = FactoryFinder.class.getClassLoader();
+ is = ss.getResourceAsStream(cl, serviceId);
++ useBSClsLoader = true;
+ }
+
+ if (is == null) {
+@@ -325,7 +364,7 @@
+ // ClassLoader because we want to avoid the case where the
+ // resource file was found using one ClassLoader and the
+ // provider class was instantiated using a different one.
+- return newInstance(factoryClassName, cl, false);
++ return newInstance(factoryClassName, cl, false, useBSClsLoader);
+ }
+
+ // No provider found
+--- src/javax/xml/validation/SchemaFactoryFinder.java 2013-04-16 14:28:09.800157711 +0100
++++ src/javax/xml/validation/SchemaFactoryFinder.java 2013-04-16 14:29:26.569394704 +0100
+@@ -53,6 +53,7 @@
+ * Take care of restrictions imposed by java security model
+ */
+ private static SecuritySupport ss = new SecuritySupport();
++ private static final String DEFAULT_PACKAGE = "com.sun.org.apache.xerces.internal";
+ /**
+ * Cache properties for performance.
+ */
+@@ -212,28 +213,6 @@
+ }
+ }
+
+- /**
+- // try to read from $java.home/lib/jaxp.properties
+- try {
+- String javah = ss.getSystemProperty( "java.home" );
+- String configFile = javah + File.separator +
+- "lib" + File.separator + "jaxp.properties";
+- File f = new File( configFile );
+- if( ss.doesFileExist(f)) {
+- sf = loadFromProperty(
+- propertyName,f.getAbsolutePath(), new FileInputStream(f));
+- if(sf!=null) return sf;
+- } else {
+- debugPrintln("Tried to read "+ f.getAbsolutePath()+", but it doesn't exist.");
+- }
+- } catch(Throwable e) {
+- if( debug ) {
+- debugPrintln("failed to read $java.home/lib/jaxp.properties");
+- e.printStackTrace();
+- }
+- }
+- */
+-
+ // try META-INF/services files
+ Iterator sitr = createServiceFileIterator();
+ while(sitr.hasNext()) {
+@@ -268,14 +247,20 @@
+ */
+ private Class createClass(String className) {
+ Class clazz;
++ // make sure we have access to restricted packages
++ boolean internal = false;
++ if (System.getSecurityManager() != null) {
++ if (className != null && className.startsWith(DEFAULT_PACKAGE)) {
++ internal = true;
++ }
++ }
+
+- // use approprite ClassLoader
+ try {
+- if (classLoader != null) {
+- clazz = classLoader.loadClass(className);
+- } else {
+- clazz = Class.forName(className);
+- }
++ if (classLoader != null && !internal) {
++ clazz = classLoader.loadClass(className);
++ } else {
++ clazz = Class.forName(className);
++ }
+ } catch (Throwable t) {
+ if(debug) t.printStackTrace();
+ return null;
+--- src/javax/xml/xpath/XPathFactoryFinder.java 2013-04-16 14:28:09.800157711 +0100
++++ src/javax/xml/xpath/XPathFactoryFinder.java 2013-04-16 14:29:26.569394704 +0100
+@@ -47,6 +47,7 @@
+ * @since 1.5
+ */
+ class XPathFactoryFinder {
++ private static final String DEFAULT_PACKAGE = "com.sun.org.apache.xpath.internal";
+
+ private static SecuritySupport ss = new SecuritySupport() ;
+ /** debug support code. */
+@@ -245,18 +246,25 @@
+ */
+ private Class createClass(String className) {
+ Class clazz;
+-
+- // use approprite ClassLoader
+- try {
+- if (classLoader != null) {
+- clazz = classLoader.loadClass(className);
+- } else {
+- clazz = Class.forName(className);
+- }
+- } catch (Throwable t) {
+- if(debug) t.printStackTrace();
+- return null;
++ // make sure we have access to restricted packages
++ boolean internal = false;
++ if (System.getSecurityManager() != null) {
++ if (className != null && className.startsWith(DEFAULT_PACKAGE)) {
++ internal = true;
+ }
++ }
++
++ // use approprite ClassLoader
++ try {
++ if (classLoader != null && !internal) {
++ clazz = classLoader.loadClass(className);
++ } else {
++ clazz = Class.forName(className);
++ }
++ } catch (Throwable t) {
++ if(debug) t.printStackTrace();
++ return null;
++ }
+
+ return clazz;
+ }
+--- src/org/w3c/dom/bootstrap/DOMImplementationRegistry.java 2013-04-16 14:28:09.808157841 +0100
++++ src/org/w3c/dom/bootstrap/DOMImplementationRegistry.java 2013-04-16 14:29:26.569394704 +0100
+@@ -104,6 +104,8 @@
+ */
+ private static final String FALLBACK_CLASS =
+ "com.sun.org.apache.xerces.internal.dom.DOMXSImplementationSourceImpl";
++ private static final String DEFAULT_PACKAGE =
++ "com.sun.org.apache.xerces.internal.dom";
+ /**
+ * Private constructor.
+ * @param srcs Vector List of DOMImplementationSources
+@@ -168,10 +170,15 @@
+ StringTokenizer st = new StringTokenizer(p);
+ while (st.hasMoreTokens()) {
+ String sourceName = st.nextToken();
+- // Use context class loader, falling back to Class.forName
+- // if and only if this fails...
++ // make sure we have access to restricted packages
++ boolean internal = false;
++ if (System.getSecurityManager() != null) {
++ if (sourceName != null && sourceName.startsWith(DEFAULT_PACKAGE)) {
++ internal = true;
++ }
++ }
+ Class sourceClass = null;
+- if (classLoader != null) {
++ if (classLoader != null && !internal) {
+ sourceClass = classLoader.loadClass(sourceName);
+ } else {
+ sourceClass = Class.forName(sourceName);
+--- src/org/xml/sax/helpers/NewInstance.java 2013-04-16 14:28:09.832158226 +0100
++++ src/org/xml/sax/helpers/NewInstance.java 2013-04-16 14:29:26.569394704 +0100
+@@ -54,9 +54,10 @@
+ * including versions of Java 2.
+ *
+ * @author Edwin Goei, David Brownell
++ * @version 2.0.1 (sax2r2)
+ */
+ class NewInstance {
+-
++ private static final String DEFAULT_PACKAGE = "com.sun.org.apache.xerces.internal";
+ /**
+ * Creates a new instance of the specified class name
+ *
+@@ -66,8 +67,16 @@
+ throws ClassNotFoundException, IllegalAccessException,
+ InstantiationException
+ {
++ // make sure we have access to restricted packages
++ boolean internal = false;
++ if (System.getSecurityManager() != null) {
++ if (className != null && className.startsWith(DEFAULT_PACKAGE)) {
++ internal = true;
++ }
++ }
++
+ Class driverClass;
+- if (classLoader == null) {
++ if (classLoader == null || internal) {
+ driverClass = Class.forName(className);
+ } else {
+ driverClass = classLoader.loadClass(className);
+@@ -75,29 +84,4 @@
+ return driverClass.newInstance();
+ }
+
+- /**
+- * Figure out which ClassLoader to use. For JDK 1.2 and later use
+- * the context ClassLoader.
+- */
+- static ClassLoader getClassLoader ()
+- {
+- Method m = null;
+-
+- try {
+- m = Thread.class.getMethod("getContextClassLoader", (Class[]) null);
+- } catch (NoSuchMethodException e) {
+- // Assume that we are running JDK 1.1, use the current ClassLoader
+- return NewInstance.class.getClassLoader();
+- }
+-
+- try {
+- return (ClassLoader) m.invoke(Thread.currentThread(), (Object[]) null);
+- } catch (IllegalAccessException e) {
+- // assert(false)
+- throw new UnknownError(e.getMessage());
+- } catch (InvocationTargetException e) {
+- // assert(e.getTargetException() instanceof SecurityException)
+- throw new UnknownError(e.getMessage());
+- }
+- }
+ }
+--- src/org/xml/sax/helpers/ParserAdapter.java 2013-04-16 14:28:09.836158291 +0100
++++ src/org/xml/sax/helpers/ParserAdapter.java 2013-04-16 14:29:26.569394704 +0100
+@@ -74,13 +74,14 @@
+ *
+ * @since SAX 2.0
+ * @author David Megginson
++ * @version 2.0.1 (sax2r2)
+ * @see org.xml.sax.helpers.XMLReaderAdapter
+ * @see org.xml.sax.XMLReader
+ * @see org.xml.sax.Parser
+ */
+ public class ParserAdapter implements XMLReader, DocumentHandler
+ {
+-
++ private static SecuritySupport ss = new SecuritySupport();
+
+ ////////////////////////////////////////////////////////////////////
+ // Constructors.
+@@ -102,7 +103,7 @@
+ {
+ super();
+
+- String driver = System.getProperty("org.xml.sax.parser");
++ String driver = ss.getSystemProperty("org.xml.sax.parser");
+
+ try {
+ setup(ParserFactory.makeParser());
+--- src/org/xml/sax/helpers/ParserFactory.java 2013-04-16 14:28:09.836158291 +0100
++++ src/org/xml/sax/helpers/ParserFactory.java 2013-04-16 14:29:26.569394704 +0100
+@@ -30,12 +30,6 @@
+
+ package org.xml.sax.helpers;
+
+-import java.lang.ClassNotFoundException;
+-import java.lang.IllegalAccessException;
+-import java.lang.InstantiationException;
+-import java.lang.SecurityException;
+-import java.lang.ClassCastException;
+-
+ import org.xml.sax.Parser;
+
+
+@@ -69,9 +63,10 @@
+ * interface.
+ * @since SAX 1.0
+ * @author David Megginson
++ * @version 2.0.1 (sax2r2)
+ */
+ public class ParserFactory {
+-
++ private static SecuritySupport ss = new SecuritySupport();
+
+ /**
+ * Private null constructor.
+@@ -109,7 +104,7 @@
+ NullPointerException,
+ ClassCastException
+ {
+- String className = System.getProperty("org.xml.sax.parser");
++ String className = ss.getSystemProperty("org.xml.sax.parser");
+ if (className == null) {
+ throw new NullPointerException("No value for sax.parser property");
+ } else {
+@@ -146,7 +141,7 @@
+ ClassCastException
+ {
+ return (Parser) NewInstance.newInstance (
+- NewInstance.getClassLoader (), className);
++ ss.getContextClassLoader(), className);
+ }
+
+ }
+--- src/org/xml/sax/helpers/SecuritySupport.java 1970-01-01 01:00:00.000000000 +0100
++++ src/org/xml/sax/helpers/SecuritySupport.java 2013-04-16 14:29:26.569394704 +0100
+@@ -0,0 +1,108 @@
++/*
++ * Copyright (c) 2004, 2006, Oracle and/or its affiliates. All rights reserved.
++ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
++ *
++ * This code is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 only, as
++ * published by the Free Software Foundation. Oracle designates this
++ * particular file as subject to the "Classpath" exception as provided
++ * by Oracle in the LICENSE file that accompanied this code.
++ *
++ * This code is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
++ * version 2 for more details (a copy is included in the LICENSE file that
++ * accompanied this code).
++ *
++ * You should have received a copy of the GNU General Public License version
++ * 2 along with this work; if not, write to the Free Software Foundation,
++ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
++ *
++ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
++ * or visit www.oracle.com if you need additional information or have any
++ * questions.
++ */
++
++package org.xml.sax.helpers;
++
++import java.io.*;
++import java.security.*;
++
++/**
++ * This class is duplicated for each JAXP subpackage so keep it in sync.
++ * It is package private and therefore is not exposed as part of the JAXP
++ * API.
++ *
++ * Security related methods that only work on J2SE 1.2 and newer.
++ */
++class SecuritySupport {
++
++
++ ClassLoader getContextClassLoader() throws SecurityException{
++ return (ClassLoader)
++ AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ ClassLoader cl = null;
++ //try {
++ cl = Thread.currentThread().getContextClassLoader();
++ //} catch (SecurityException ex) { }
++
++ if (cl == null)
++ cl = ClassLoader.getSystemClassLoader();
++
++ return cl;
++ }
++ });
++ }
++
++ String getSystemProperty(final String propName) {
++ return (String)
++ AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ return System.getProperty(propName);
++ }
++ });
++ }
++
++ FileInputStream getFileInputStream(final File file)
++ throws FileNotFoundException
++ {
++ try {
++ return (FileInputStream)
++ AccessController.doPrivileged(new PrivilegedExceptionAction() {
++ public Object run() throws FileNotFoundException {
++ return new FileInputStream(file);
++ }
++ });
++ } catch (PrivilegedActionException e) {
++ throw (FileNotFoundException)e.getException();
++ }
++ }
++
++ InputStream getResourceAsStream(final ClassLoader cl,
++ final String name)
++ {
++ return (InputStream)
++ AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ InputStream ris;
++ if (cl == null) {
++ ris = Object.class.getResourceAsStream(name);
++ } else {
++ ris = cl.getResourceAsStream(name);
++ }
++ return ris;
++ }
++ });
++ }
++
++ boolean doesFileExist(final File f) {
++ return ((Boolean)
++ AccessController.doPrivileged(new PrivilegedAction() {
++ public Object run() {
++ return new Boolean(f.exists());
++ }
++ })).booleanValue();
++ }
++
++}
+--- src/org/xml/sax/helpers/XMLReaderFactory.java 2013-04-16 14:28:09.836158291 +0100
++++ src/org/xml/sax/helpers/XMLReaderFactory.java 2013-04-16 14:29:26.569394704 +0100
+@@ -34,8 +34,6 @@
+ import java.io.BufferedReader;
+ import java.io.InputStream;
+ import java.io.InputStreamReader;
+-import java.security.AccessController;
+-import java.security.PrivilegedAction;
+ import org.xml.sax.XMLReader;
+ import org.xml.sax.SAXException;
+
+@@ -85,8 +83,8 @@
+ }
+
+ private static final String property = "org.xml.sax.driver";
++ private static SecuritySupport ss = new SecuritySupport();
+
+- private static String _clsFromJar = null;
+ private static boolean _jarread = false;
+ /**
+ * Attempt to create an XMLReader from system defaults.
+@@ -134,43 +132,45 @@
+ throws SAXException
+ {
+ String className = null;
+- ClassLoader loader = NewInstance.getClassLoader ();
++ ClassLoader cl = ss.getContextClassLoader();
+
+ // 1. try the JVM-instance-wide system property
+- try { className = System.getProperty (property); }
+- catch (RuntimeException e) { /* normally fails for applets */ }
++ try {
++ className = ss.getSystemProperty(property);
++ }
++ catch (RuntimeException e) { /* continue searching */ }
+
+ // 2. if that fails, try META-INF/services/
+ if (className == null) {
+ if (!_jarread) {
+- final ClassLoader loader1 = loader;
+ _jarread = true;
+- _clsFromJar = (String)
+- AccessController.doPrivileged(new PrivilegedAction() {
+- public Object run() {
+- String clsName = null;
+- try {
+- String service = "META-INF/services/" + property;
+- InputStream in;
+- BufferedReader reader;
+- if (loader1 == null)
+- in = ClassLoader.getSystemResourceAsStream (service);
+- else
+- in = loader1.getResourceAsStream (service);
+-
+- if (in != null) {
+- reader = new BufferedReader (
+- new InputStreamReader (in, "UTF8"));
+- clsName = reader.readLine ();
+- in.close ();
+- }
+- } catch (Exception e) {
++ String service = "META-INF/services/" + property;
++ InputStream in;
++ BufferedReader reader;
++
++ try {
++ if (cl != null) {
++ in = ss.getResourceAsStream(cl, service);
++
++ // If no provider found then try the current ClassLoader
++ if (in == null) {
++ cl = null;
++ in = ss.getResourceAsStream(cl, service);
+ }
+- return clsName;
++ } else {
++ // No Context ClassLoader, try the current ClassLoader
++ in = ss.getResourceAsStream(cl, service);
+ }
+- });
++
++ if (in != null) {
++ reader = new BufferedReader (
++ new InputStreamReader (in, "UTF8"));
++ className = reader.readLine ();
++ in.close ();
++ }
++ } catch (Exception e) {
++ }
+ }
+- className = _clsFromJar;
+ }
+
+ // 3. Distro-specific fallback
+@@ -187,7 +187,7 @@
+
+ // do we know the XMLReader implementation class yet?
+ if (className != null)
+- return loadClass (loader, className);
++ return loadClass (cl, className);
+
+ // 4. panic -- adapt any SAX1 parser
+ try {
+@@ -217,7 +217,7 @@
+ public static XMLReader createXMLReader (String className)
+ throws SAXException
+ {
+- return loadClass (NewInstance.getClassLoader (), className);
++ return loadClass (ss.getContextClassLoader(), className);
+ }
+
+ private static XMLReader loadClass (ClassLoader loader, String className)
--- jdk/src/share/lib/security/java.security 2013-04-16 14:28:12.392199476 +0100
+++ jdk/src/share/lib/security/java.security 2013-04-16 14:29:26.545394318 +0100
@@ -130,10 +130,27 @@
package.access=sun.,\
com.sun.xml.internal.bind.,\
com.sun.xml.internal.org.jvnet.staxex.,\
+ com.sun.xml.internal.stream.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.,\
com.sun.istack.internal.,\
- com.sun.jmx.
+ com.sun.jmx.,\
+ com.sun.org.apache.bcel.internal.,\
+ com.sun.org.apache.regexp.internal.,\
+ com.sun.org.apache.xerces.internal.,\
+ com.sun.org.apache.xpath.internal.,\
+ com.sun.org.apache.xalan.internal.extensions.,\
+ com.sun.org.apache.xalan.internal.lib.,\
+ com.sun.org.apache.xalan.internal.res.,\
+ com.sun.org.apache.xalan.internal.templates.,\
+ com.sun.org.apache.xalan.internal.xslt.,\
+ com.sun.org.apache.xalan.internal.xsltc.cmdline.,\
+ com.sun.org.apache.xalan.internal.xsltc.compiler.,\
+ com.sun.org.apache.xalan.internal.xsltc.trax.,\
+ com.sun.org.apache.xalan.internal.xsltc.util.,\
+ com.sun.org.apache.xml.internal.res.,\
+ com.sun.org.apache.xml.internal.serializer.utils.,\
+ com.sun.org.apache.xml.internal.utils.
#
# List of comma-separated packages that start with or equal this string
@@ -148,10 +165,27 @@
package.definition=sun.,\
com.sun.xml.internal.bind.,\
com.sun.xml.internal.org.jvnet.staxex.,\
+ com.sun.xml.internal.stream.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.,\
com.sun.istack.internal.,\
- com.sun.jmx.
+ com.sun.jmx.,\
+ com.sun.org.apache.bcel.internal.,\
+ com.sun.org.apache.regexp.internal.,\
+ com.sun.org.apache.xerces.internal.,\
+ com.sun.org.apache.xpath.internal.,\
+ com.sun.org.apache.xalan.internal.extensions.,\
+ com.sun.org.apache.xalan.internal.lib.,\
+ com.sun.org.apache.xalan.internal.res.,\
+ com.sun.org.apache.xalan.internal.templates.,\
+ com.sun.org.apache.xalan.internal.xslt.,\
+ com.sun.org.apache.xalan.internal.xsltc.cmdline.,\
+ com.sun.org.apache.xalan.internal.xsltc.compiler.,\
+ com.sun.org.apache.xalan.internal.xsltc.trax.,\
+ com.sun.org.apache.xalan.internal.xsltc.util.,\
+ com.sun.org.apache.xml.internal.res.,\
+ com.sun.org.apache.xml.internal.serializer.utils.,\
+ com.sun.org.apache.xml.internal.utils.
#
# Determines whether this properties file can be appended to
--- jdk/src/share/lib/security/java.security-solaris 2013-04-16 14:28:12.396199540 +0100
+++ jdk/src/share/lib/security/java.security-solaris 2013-04-16 14:30:42.026610629 +0100
@@ -131,10 +131,27 @@
package.access=sun.,\
com.sun.xml.internal.bind.,\
com.sun.xml.internal.org.jvnet.staxex.,\
+ com.sun.xml.internal.stream.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.
com.sun.istack.internal.,\
- com.sun.jmx.
+ com.sun.jmx.,\
+ com.sun.org.apache.bcel.internal.,\
+ com.sun.org.apache.regexp.internal.,\
+ com.sun.org.apache.xerces.internal.,\
+ com.sun.org.apache.xpath.internal.,\
+ com.sun.org.apache.xalan.internal.extensions.,\
+ com.sun.org.apache.xalan.internal.lib.,\
+ com.sun.org.apache.xalan.internal.res.,\
+ com.sun.org.apache.xalan.internal.templates.,\
+ com.sun.org.apache.xalan.internal.xslt.,\
+ com.sun.org.apache.xalan.internal.xsltc.cmdline.,\
+ com.sun.org.apache.xalan.internal.xsltc.compiler.,\
+ com.sun.org.apache.xalan.internal.xsltc.trax.,\
+ com.sun.org.apache.xalan.internal.xsltc.util.,\
+ com.sun.org.apache.xml.internal.res.,\
+ com.sun.org.apache.xml.internal.serializer.utils.,\
+ com.sun.org.apache.xml.internal.utils.
#
# List of comma-separated packages that start with or equal this string
@@ -149,10 +166,27 @@
package.definition=sun.,\
com.sun.xml.internal.bind.,\
com.sun.xml.internal.org.jvnet.staxex.,\
+ com.sun.xml.internal.stream.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.
com.sun.istack.internal.,\
- com.sun.jmx.
+ com.sun.jmx.,\
+ com.sun.org.apache.bcel.internal.,\
+ com.sun.org.apache.regexp.internal.,\
+ com.sun.org.apache.xerces.internal.,\
+ com.sun.org.apache.xpath.internal.,\
+ com.sun.org.apache.xalan.internal.extensions.,\
+ com.sun.org.apache.xalan.internal.lib.,\
+ com.sun.org.apache.xalan.internal.res.,\
+ com.sun.org.apache.xalan.internal.templates.,\
+ com.sun.org.apache.xalan.internal.xslt.,\
+ com.sun.org.apache.xalan.internal.xsltc.cmdline.,\
+ com.sun.org.apache.xalan.internal.xsltc.compiler.,\
+ com.sun.org.apache.xalan.internal.xsltc.trax.,\
+ com.sun.org.apache.xalan.internal.xsltc.util.,\
+ com.sun.org.apache.xml.internal.res.,\
+ com.sun.org.apache.xml.internal.serializer.utils.,\
+ com.sun.org.apache.xml.internal.utils.
#
# Determines whether this properties file can be appended to
--- jdk/src/share/lib/security/java.security-windows 2013-04-16 14:28:12.396199540 +0100
+++ jdk/src/share/lib/security/java.security-windows 2013-04-16 14:31:35.027464728 +0100
@@ -131,10 +131,27 @@
package.access=sun.,\
com.sun.xml.internal.bind.,\
com.sun.xml.internal.org.jvnet.staxex.,\
+ com.sun.xml.internal.stream.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.
com.sun.istack.internal.,\
- com.sun.jmx.
+ com.sun.jmx.,\
+ com.sun.org.apache.bcel.internal.,\
+ com.sun.org.apache.regexp.internal.,\
+ com.sun.org.apache.xerces.internal.,\
+ com.sun.org.apache.xpath.internal.,\
+ com.sun.org.apache.xalan.internal.extensions.,\
+ com.sun.org.apache.xalan.internal.lib.,\
+ com.sun.org.apache.xalan.internal.res.,\
+ com.sun.org.apache.xalan.internal.templates.,\
+ com.sun.org.apache.xalan.internal.xslt.,\
+ com.sun.org.apache.xalan.internal.xsltc.cmdline.,\
+ com.sun.org.apache.xalan.internal.xsltc.compiler.,\
+ com.sun.org.apache.xalan.internal.xsltc.trax.,\
+ com.sun.org.apache.xalan.internal.xsltc.util.,\
+ com.sun.org.apache.xml.internal.res.,\
+ com.sun.org.apache.xml.internal.serializer.utils.,\
+ com.sun.org.apache.xml.internal.utils.
#
# List of comma-separated packages that start with or equal this string
@@ -149,10 +166,27 @@
package.definition=sun.,\
com.sun.xml.internal.bind.,\
com.sun.xml.internal.org.jvnet.staxex.,\
+ com.sun.xml.internal.stream.,\
com.sun.xml.internal.ws.,\
com.sun.imageio.
com.sun.istack.internal.,\
- com.sun.jmx.
+ com.sun.jmx.,\
+ com.sun.org.apache.bcel.internal.,\
+ com.sun.org.apache.regexp.internal.,\
+ com.sun.org.apache.xerces.internal.,\
+ com.sun.org.apache.xpath.internal.,\
+ com.sun.org.apache.xalan.internal.extensions.,\
+ com.sun.org.apache.xalan.internal.lib.,\
+ com.sun.org.apache.xalan.internal.res.,\
+ com.sun.org.apache.xalan.internal.templates.,\
+ com.sun.org.apache.xalan.internal.xslt.,\
+ com.sun.org.apache.xalan.internal.xsltc.cmdline.,\
+ com.sun.org.apache.xalan.internal.xsltc.compiler.,\
+ com.sun.org.apache.xalan.internal.xsltc.trax.,\
+ com.sun.org.apache.xalan.internal.xsltc.util.,\
+ com.sun.org.apache.xml.internal.res.,\
+ com.sun.org.apache.xml.internal.serializer.utils.,\
+ com.sun.org.apache.xml.internal.utils.
#
# Determines whether this properties file can be appended to