Author: alessio.soldano(a)jboss.com
Date: 2011-10-18 06:24:09 -0400 (Tue, 18 Oct 2011)
New Revision: 15120
Modified:
common/trunk/src/main/java/org/jboss/ws/common/utils/JBossWSEntityResolver.java
Log:
[JBWS-3369] Allow providing a classloader for entities properties file retrieval in
JBossWSEntityResolver
Modified: common/trunk/src/main/java/org/jboss/ws/common/utils/JBossWSEntityResolver.java
===================================================================
---
common/trunk/src/main/java/org/jboss/ws/common/utils/JBossWSEntityResolver.java 2011-10-18
10:13:37 UTC (rev 15119)
+++
common/trunk/src/main/java/org/jboss/ws/common/utils/JBossWSEntityResolver.java 2011-10-18
10:24:09 UTC (rev 15120)
@@ -59,19 +59,32 @@
// provide logging
private static final Logger log = Logger.getLogger(JBossWSEntityResolver.class);
+
+ private ClassLoader additionalClassLoader;
public JBossWSEntityResolver()
{
- this("META-INF/jbossws-entities.properties");
+ this(ClassLoaderProvider.getDefaultProvider().getServerIntegrationClassLoader());
}
+ public JBossWSEntityResolver(ClassLoader loader)
+ {
+ this("META-INF/jbossws-entities.properties", loader);
+ }
+
public JBossWSEntityResolver(final String entitiesResource)
{
+ this(entitiesResource,
ClassLoaderProvider.getDefaultProvider().getServerIntegrationClassLoader());
+ }
+
+ public JBossWSEntityResolver(final String entitiesResource, final ClassLoader loader)
+ {
super();
+ this.additionalClassLoader = loader;
Properties props = null;
- ClassLoader loader = SecurityActions.getContextClassLoader();
- Map<String, Properties> map = propertiesMap.get(loader);
+ ClassLoader tccl = SecurityActions.getContextClassLoader();
+ Map<String, Properties> map = propertiesMap.get(tccl);
if (map != null && map.containsKey(entitiesResource))
{
props = map.get(entitiesResource);
@@ -81,10 +94,10 @@
if (map == null)
{
map = new ConcurrentHashMap<String, Properties>();
- propertiesMap.put(loader, map);
+ propertiesMap.put(tccl, map);
}
// load entities
- props = loadEntitiesMappingFromClasspath(entitiesResource, loader);
+ props = loadEntitiesMappingFromClasspath(entitiesResource, tccl,
this.additionalClassLoader);
if (props.size() == 0)
throw new IllegalArgumentException(BundleUtils.getMessage(bundle,
"NO_ENTITIES_MAPPING_DEFINED_IN_RESOURCE_FILE", entitiesResource));
map.put(entitiesResource, props);
@@ -101,16 +114,16 @@
}
}
- private Properties loadEntitiesMappingFromClasspath(final String entitiesResource,
final ClassLoader classLoader)
+ private Properties loadEntitiesMappingFromClasspath(final String entitiesResource,
final ClassLoader classLoader, final ClassLoader additionalClassLoader)
{
return AccessController.doPrivileged(new PrivilegedAction<Properties>()
{
public Properties run()
{
- //use a delegate classloader: first try lookup using the provided
classloader,
- //otherwise use server integration classloader which has the default
configuration
- final ClassLoader intCl =
ClassLoaderProvider.getDefaultProvider().getServerIntegrationClassLoader();
- InputStream is = new DelegateClassLoader(intCl,
classLoader).getResourceAsStream(entitiesResource);
+ //use a delegate classloader: first try lookup using the provided (tccl)
classloader,
+ //otherwise use the constructor provided classloader if any (that defaults to
the
+ //server integration classloader which should have the default
configuration)
+ InputStream is = new DelegateClassLoader(additionalClassLoader,
classLoader).getResourceAsStream(entitiesResource);
// get stream
if (is == null)
throw new IllegalArgumentException(BundleUtils.getMessage(bundle,
"RESOURCE_NOT_FOUND", entitiesResource ));
@@ -160,7 +173,7 @@
final ClassLoader origLoader = SecurityActions.getContextClassLoader();
try
{
-
SecurityActions.setContextClassLoader(ClassLoaderProvider.getDefaultProvider().getServerIntegrationClassLoader());
+ SecurityActions.setContextClassLoader(this.additionalClassLoader);
is = super.loadClasspathResource(resource, trace);
}
finally
Show replies by date