[
https://issues.apache.org/jira/browse/XERCESJ-1419?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Michael Glavassevich resolved XERCESJ-1419.
-------------------------------------------
Resolution: Invalid
XML Commons is a different project than Xerces-J. Issues for it are tracked in
ASF Bugzilla [1] (instead of JIRA). Please open your bug report there.
[1] https://issues.apache.org/bugzilla/
> Classloadering strategy for javax.xml.datatype.FactoryFinder is not
> consistent with javax.xml.parsers.DocumentBuilderFactory
> ----------------------------------------------------------------------------------------------------------------------------
>
> Key: XERCESJ-1419
> URL: https://issues.apache.org/jira/browse/XERCESJ-1419
> Project: Xerces2-J
> Issue Type: Bug
> Components: JAXP (javax.xml.datatype)
> Affects Versions: 2.9.1
> Reporter: Andy Piper
> Priority: Minor
>
> javax.xml.parsers.DocumentBuilderFactory looks first at the
> ContextClassLoader then Class.forName, but FactoryFinder does not. This
> causes problems on OSGi systems and it seems that the two strategies should
> be consistent. Here is the patch I used.
> Eagle Andy> diff -rc tmp/javax xml-commons-external-1.4.01/javax
> diff -rc tmp/javax/xml/datatype/FactoryFinder.java
> xml-commons-external-1.4.01/j
> avax/xml/datatype/FactoryFinder.java
> *** tmp/javax/xml/datatype/FactoryFinder.java 2009-02-16 00:09:32.000000000
> +0
> 000
> --- xml-commons-external-1.4.01/javax/xml/datatype/FactoryFinder.java
> 2010-01-
> 19 11:03:01.070864200 +0000
> ***************
> *** 143,164 ****
> */
> static Object newInstance(
> String className,
> ! ClassLoader classLoader)
> throws ConfigurationError {
> !
> try {
> ! Class spiClass;
> ! if (classLoader == null) {
> ! spiClass = Class.forName(className);
> } else {
> ! spiClass = classLoader.loadClass(className);
> ! }
> !
> ! if (debug) {
> ! debugPrintln("Loaded " + className + " from " +
> which(spiClass))
> ;
> }
> !
> ! return spiClass.newInstance();
> } catch (ClassNotFoundException x) {
> throw new ConfigurationError(
> "Provider " + className + " not found", x);
> --- 145,179 ----
> */
> static Object newInstance(
> String className,
> ! ClassLoader cl)
> throws ConfigurationError {
> !
> try {
> ! Class providerClass;
> ! if (cl == null) {
> ! // If classloader is null Use the bootstrap ClassLoader.
> ! // 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) {
> ! // Fall back to current classloader
> ! cl = FactoryFinder.class.getClassLoader();
> ! if (cl != null) {
> ! providerClass = cl.loadClass(className);
> ! }
> ! else {
> ! providerClass = Class.forName(className);
> ! }
> ! }
> }
> !
> ! 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);
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]