[jbossws-commits] JBossWS SVN: r15120 - common/trunk/src/main/java/org/jboss/ws/common/utils.

jbossws-commits at lists.jboss.org jbossws-commits at lists.jboss.org
Tue Oct 18 06:24:09 EDT 2011


Author: alessio.soldano at 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



More information about the jbossws-commits mailing list