[jboss-cvs] JBossAS SVN: r111051 - projects/specs/trunk/jboss-jaxb-api_2.2_spec/src/main/java/javax/xml/bind.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Mar 28 13:37:23 EDT 2011
Author: jason.greene at jboss.com
Date: 2011-03-28 13:37:23 -0400 (Mon, 28 Mar 2011)
New Revision: 111051
Modified:
projects/specs/trunk/jboss-jaxb-api_2.2_spec/src/main/java/javax/xml/bind/ContextFinder.java
Log:
Fix CL discovery logic
Modified: projects/specs/trunk/jboss-jaxb-api_2.2_spec/src/main/java/javax/xml/bind/ContextFinder.java
===================================================================
--- projects/specs/trunk/jboss-jaxb-api_2.2_spec/src/main/java/javax/xml/bind/ContextFinder.java 2011-03-28 15:58:01 UTC (rev 111050)
+++ projects/specs/trunk/jboss-jaxb-api_2.2_spec/src/main/java/javax/xml/bind/ContextFinder.java 2011-03-28 17:37:23 UTC (rev 111051)
@@ -177,8 +177,8 @@
static JAXBContext newInstance(
Class[] classes,
Map properties,
- String className) throws JAXBException {
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ String className, boolean useDefiningCL) throws JAXBException {
+ ClassLoader cl = useDefiningCL ? null : Thread.currentThread().getContextClassLoader();
Class spi;
try {
spi = safeLoadClass(className,cl);
@@ -327,7 +327,7 @@
if (props.containsKey(JAXB_CONTEXT_FACTORY)) {
// trim() seems redundant, but adding to satisfy customer complaint
factoryClassName = props.getProperty(JAXB_CONTEXT_FACTORY).trim();
- return newInstance(classes, properties, factoryClassName);
+ return newInstance(classes, properties, factoryClassName, false);
} else {
throw new JAXBException(Messages.format(Messages.MISSING_PROPERTY, packageName, JAXB_CONTEXT_FACTORY));
}
@@ -339,7 +339,7 @@
factoryClassName = AccessController.doPrivileged(new GetPropertyAction(jaxbContextFQCN));
if( factoryClassName != null ) {
logger.fine(" found "+factoryClassName);
- return newInstance( classes, properties, factoryClassName );
+ return newInstance( classes, properties, factoryClassName, false);
}
logger.fine(" not found");
@@ -349,17 +349,27 @@
try {
final String resource = new StringBuilder("META-INF/services/").append(jaxbContextFQCN).toString();
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
- URL resourceURL;
- if(classLoader==null)
- resourceURL = ClassLoader.getSystemResource(resource);
- else
+
+ // Load via the TCCL, then try the defining loader, and finally app cl
+ URL resourceURL = null;
+ boolean useTCCL = true;
+ if (classLoader != null)
resourceURL = classLoader.getResource(resource);
+ if (resourceURL == null) {
+ useTCCL = false;
+ ClassLoader definingCL = ContextFinder.class.getClassLoader();
+ resourceURL = definingCL != null ? definingCL.getResource(resource) : null;
+ }
+
+ if (resourceURL == null)
+ resourceURL = ClassLoader.getSystemResource(resource);
+
if (resourceURL != null) {
logger.fine("Reading "+resourceURL);
r = new BufferedReader(new InputStreamReader(resourceURL.openStream(), "UTF-8"));
factoryClassName = r.readLine().trim();
- return newInstance(classes, properties, factoryClassName);
+ return newInstance(classes, properties, factoryClassName, !useTCCL);
} else {
logger.fine("Unable to find: " + resource);
}
@@ -372,7 +382,7 @@
// else no provider found
logger.fine("Trying to create the platform default provider");
- return newInstance(classes, properties, PLATFORM_DEFAULT_FACTORY_CLASS);
+ return newInstance(classes, properties, PLATFORM_DEFAULT_FACTORY_CLASS, true);
}
More information about the jboss-cvs-commits
mailing list