[jboss-svn-commits] JBL Code SVN: r34470 - in labs/jbossesb/trunk/product/rosetta: src/org/jboss/internal/soa/esb/webservice and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Aug 2 15:05:45 EDT 2010


Author: kevin.conner at jboss.com
Date: 2010-08-02 15:05:44 -0400 (Mon, 02 Aug 2010)
New Revision: 34470

Modified:
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/HttpGatewayDeploymentFactory.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebGatewayDeploymentFactory.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayBaseWebService.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayWebService.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseBaseWebService.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseWebService.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleResourceManager.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/ModelUtil.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/WebGatewayBuilder.java
   labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/http/HttpGatewayServlet.java
   labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGeneratorUnitTest.java
Log:
Set esb TCCL before invoking servlets: JBESB-3412

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/HttpGatewayDeploymentFactory.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/HttpGatewayDeploymentFactory.java	2010-08-02 19:01:26 UTC (rev 34469)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/HttpGatewayDeploymentFactory.java	2010-08-02 19:05:44 UTC (rev 34470)
@@ -40,7 +40,7 @@
     public static final String AUTH_METHOD = "authMethod";
     public static final String AUTH_DOMAIN = "authDomain";
 
-    public void updateWebModel(ConfigTree webEndpointConfig, WebModel webModel) throws ConfigurationException {
+    public void updateWebModel(final String deploymentName, ConfigTree webEndpointConfig, WebModel webModel) throws ConfigurationException {
         String servletName = webEndpointConfig.getRequiredAttribute("name");
         Servlet servlet = new Servlet(servletName, HttpGatewayServlet.class.getName(), webModel);
         
@@ -79,6 +79,7 @@
 
         // Map all config tree attributes as servlet parameters...
         servlet.getParams().addAll(webEndpointConfig.attributesAsList());
+        servlet.getParams().add(new KeyValuePair(ListenerTagNames.DEPLOYMENT_NAME_TAG, deploymentName)) ;
     }
     
     private void addEndpointAddress(ConfigTree webEndpointConfig, Servlet servlet, String urlMapping) {

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebGatewayDeploymentFactory.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebGatewayDeploymentFactory.java	2010-08-02 19:01:26 UTC (rev 34469)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/listeners/war/WebGatewayDeploymentFactory.java	2010-08-02 19:05:44 UTC (rev 34470)
@@ -32,12 +32,13 @@
 
     /**
      * Update the {@link WebModel} based on the supplied web endpoint configuration.
+     * @param deploymentName The ESB deployment name.
      * @param webEndpointConfig The web endpoint configuration.
      * @param webModel The Web Model to be updated.
      * @return The deployment archives.
      * @throws ConfigurationException Failed to create the Deployment Archives. 
      */
-    public void updateWebModel(ConfigTree webEndpointConfig, WebModel webModel) throws ConfigurationException;
+    public void updateWebModel(final String deploymentName, ConfigTree webEndpointConfig, WebModel webModel) throws ConfigurationException;
 
     /**
      * Factory builder.

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java	2010-08-02 19:01:26 UTC (rev 34469)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java	2010-08-02 19:05:44 UTC (rev 34470)
@@ -60,6 +60,7 @@
 import org.jboss.soa.esb.common.Environment;
 import org.jboss.soa.esb.common.ModulePropertyManager;
 import org.jboss.soa.esb.couriers.FaultMessageException;
+import org.jboss.soa.esb.lifecycle.LifecycleResourceManager;
 import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.message.Body;
 import org.jboss.soa.esb.message.Fault;
@@ -103,14 +104,16 @@
         extractors.add(new SamlSoapAssertionExtractor());
     }
     
+    private final String deployment ;
     protected final ServiceInvoker serviceInvoker ;
     protected final MessagePayloadProxy requestProxy ;
     protected final MessagePayloadProxy responseProxy ;
     protected final String action ;
 
-    protected BaseWebService(final ServiceInvoker serviceInvoker, final String requestLocation, final String responseLocation, final String action)
+    protected BaseWebService(final String deployment, final ServiceInvoker serviceInvoker, final String requestLocation, final String responseLocation, final String action)
         throws MessageDeliverException
     {
+        this.deployment = deployment ;
         this.serviceInvoker = serviceInvoker ;
         requestProxy = new MessagePayloadProxy(null, requestLocation) ;
         responseProxy = new MessagePayloadProxy(responseLocation, null) ;
@@ -127,6 +130,12 @@
         final MAP soapIncomingProps = AddressingContext.getAddressingProperties() ;
         
         final Message esbReq = MessageFactory.getInstance().getMessage() ;
+        final ClassLoader origClassLoader = Thread.currentThread().getContextClassLoader() ;
+        final ClassLoader deploymentClassLoader = LifecycleResourceManager.getSingleton().getClassLoaderForDeployment(deployment) ;
+        if (deploymentClassLoader != null)
+        {
+            Thread.currentThread().setContextClassLoader(deploymentClassLoader) ;
+        }
         try
         {
             final SOAPBody soapBody = request.getSOAPBody() ;
@@ -259,6 +268,10 @@
                 throw new WebServiceException("Unexpected exception generating fault response", soape) ;
             }
         }
+        finally
+        {
+            Thread.currentThread().setContextClassLoader(origClassLoader) ;
+        }
     }
 
     private static Document parseAsDom(String soapRes) throws ParserConfigurationException, XMLStreamException

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java	2010-08-02 19:01:26 UTC (rev 34469)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java	2010-08-02 19:05:44 UTC (rev 34470)
@@ -50,7 +50,7 @@
 		pool.appendClassPath(new LoaderClassPath(JAXWSProviderClassGenerator.class.getClassLoader())) ;
 	}
 	
-	public byte[] generate(final String category, final String service, final ESBServiceEndpointInfo epInfo, final boolean includeHandlers)
+	public byte[] generate(final String deployment, final String category, final String service, final ESBServiceEndpointInfo epInfo, final boolean includeHandlers)
 			throws WebServicePublishException {
 		try {
 			pool.get(epInfo.getClassName());
@@ -134,7 +134,7 @@
 				seiClass.removeConstructor(constructors[i]) ;
 			}
 
-			final String constructorStr = "super(" + siFieldName + "," +
+			final String constructorStr = "super(" + getParamValue(deployment) + "," + siFieldName + "," +
 				getParamValue(epInfo.getRequestLocation()) + "," + getParamValue(epInfo.getResponseLocation()) + ", \"" + 
 				epInfo.getResponseAction() + "\");" ;
 			CtConstructor defaultConstructor = new CtConstructor(null, seiClass) ;

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayBaseWebService.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayBaseWebService.java	2010-08-02 19:01:26 UTC (rev 34469)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayBaseWebService.java	2010-08-02 19:05:44 UTC (rev 34470)
@@ -31,10 +31,10 @@
  */
 public class OneWayBaseWebService extends BaseWebService
 {
-    protected OneWayBaseWebService(final ServiceInvoker serviceInvoker, final String requestLocation, final String responseLocation, final String action)
+    protected OneWayBaseWebService(final String deployment, final ServiceInvoker serviceInvoker, final String requestLocation, final String responseLocation, final String action)
         throws MessageDeliverException
     {
-        super(serviceInvoker, requestLocation, responseLocation, action) ;
+        super(deployment, serviceInvoker, requestLocation, responseLocation, action) ;
     }
     
     @Override

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayWebService.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayWebService.java	2010-08-02 19:01:26 UTC (rev 34469)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayWebService.java	2010-08-02 19:05:44 UTC (rev 34470)
@@ -39,9 +39,9 @@
  */
 public class OneWayWebService extends OneWayBaseWebService implements Provider<SOAPMessage>
 {
-    protected OneWayWebService(final ServiceInvoker serviceInvoker, final String requestLocation, final String responseLocation, final String action)
+    protected OneWayWebService(final String deployment, final ServiceInvoker serviceInvoker, final String requestLocation, final String responseLocation, final String action)
         throws MessageDeliverException
     {
-        super(serviceInvoker, requestLocation, responseLocation, action);
+        super(deployment, serviceInvoker, requestLocation, responseLocation, action);
     }
 }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseBaseWebService.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseBaseWebService.java	2010-08-02 19:01:26 UTC (rev 34469)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseBaseWebService.java	2010-08-02 19:05:44 UTC (rev 34470)
@@ -42,10 +42,10 @@
     private static final long TIMEOUT ;
     private static final Logger LOGGER = Logger.getLogger(RequestResponseBaseWebService.class) ;
     
-    protected RequestResponseBaseWebService(final ServiceInvoker serviceInvoker, final String requestLocation, final String responseLocation, final String action)
+    protected RequestResponseBaseWebService(final String deployment, final ServiceInvoker serviceInvoker, final String requestLocation, final String responseLocation, final String action)
         throws MessageDeliverException
     {
-        super(serviceInvoker, requestLocation, responseLocation, action) ;
+        super(deployment, serviceInvoker, requestLocation, responseLocation, action) ;
     }
     
     @Override

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseWebService.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseWebService.java	2010-08-02 19:01:26 UTC (rev 34469)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseWebService.java	2010-08-02 19:05:44 UTC (rev 34470)
@@ -39,9 +39,9 @@
  */
 public class RequestResponseWebService extends RequestResponseBaseWebService implements Provider<SOAPMessage>
 {
-    protected RequestResponseWebService(final ServiceInvoker serviceInvoker, final String requestLocation, final String responseLocation, final String action)
+    protected RequestResponseWebService(final String deployment, final ServiceInvoker serviceInvoker, final String requestLocation, final String responseLocation, final String action)
         throws MessageDeliverException
     {
-        super(serviceInvoker, requestLocation, responseLocation, action);
+        super(deployment, serviceInvoker, requestLocation, responseLocation, action);
     }
 }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleResourceManager.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleResourceManager.java	2010-08-02 19:01:26 UTC (rev 34469)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/lifecycle/LifecycleResourceManager.java	2010-08-02 19:05:44 UTC (rev 34470)
@@ -84,6 +84,10 @@
      */
     private final Map<ClassLoader, String> identities = new HashMap<ClassLoader, String>() ;
     /**
+     * The deployment to classloader mapping.
+     */
+    private final Map<String, ClassLoader> deployments = new HashMap<String, ClassLoader>() ;
+    /**
      * The deployment lock.
      */
     private ReadWriteLock deploymentLock = new ReentrantReadWriteLock() ;
@@ -124,12 +128,14 @@
             {
                 final Set<String> currentAssociations = associatedDeployments.get(classLoader) ;
                 currentAssociations.add(deploymentName) ;
+                deployments.put(deploymentName, classLoader) ;
             }
             else
             {
                 final Set<String> associations = new HashSet<String>() ;
                 associations.add(deploymentName) ;
                 associatedDeployments.put(classLoader, associations) ;
+                deployments.put(deploymentName, classLoader) ;
                 
                 identity = "ID-" + Long.toString(identityCounter++) ;
                 identities.put(classLoader, identity) ;
@@ -191,6 +197,7 @@
             if (currentAssociations != null)
             {
                 currentAssociations.remove(deploymentName) ;
+                deployments.remove(deploymentName) ;
                 cleanContext = (currentAssociations.size() == 0) ;
                 if (cleanContext)
                 {
@@ -249,6 +256,25 @@
         }
         return (null == identity ? DEFAULT_IDENTITY : identity) ;
     }
+    
+    /**
+     * Return the ClassLoader associated with a registered deployment.
+     * @param deploymentName The deployment name.
+     * @return The ClassLoader instance or null if not registered.
+     */
+    public ClassLoader getClassLoaderForDeployment(final String deploymentName)
+    {
+        final Lock readLock = deploymentLock.readLock() ;
+        readLock.lock() ;
+        try
+        {
+            return deployments.get(deploymentName) ;
+        }
+        finally
+        {
+            readLock.unlock() ;
+        }
+    }
 
     /**
      * Register a lifecycle resource with the manager.

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/ModelUtil.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/ModelUtil.java	2010-08-02 19:01:26 UTC (rev 34469)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/ModelUtil.java	2010-08-02 19:05:44 UTC (rev 34470)
@@ -82,7 +82,7 @@
      * @throws org.jboss.soa.esb.ConfigurationException A Configuration exception occured mapping data onto
      * the WebModel.
      */
-    public static void updateWebModel(Map<String, List<ConfigTree>> listenerGroups, WebModel webModel) throws ConfigurationException {
+    public static void updateWebModel(String deploymentName, Map<String, List<ConfigTree>> listenerGroups, WebModel webModel) throws ConfigurationException {
         Set<Map.Entry<String, List<ConfigTree>>> listenerGroupEntries = listenerGroups.entrySet();
         for(Map.Entry<String, List<ConfigTree>> listenerGroup : listenerGroupEntries) {
             List<ConfigTree> listeners = listenerGroup.getValue();
@@ -94,7 +94,7 @@
                 if(deploymentFactory != null) {
                     // For each listener...
                     for(ConfigTree listenerConfig : listeners) {
-                        deploymentFactory.updateWebModel(listenerConfig, webModel);
+                        deploymentFactory.updateWebModel(deploymentName, listenerConfig, webModel);
                     }
                 }
             }

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/WebGatewayBuilder.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/WebGatewayBuilder.java	2010-08-02 19:01:26 UTC (rev 34469)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/config/WebGatewayBuilder.java	2010-08-02 19:05:44 UTC (rev 34470)
@@ -112,7 +112,7 @@
         createWebserviceWars(webDeployment);
 
         // Add the web deployments info to the WebModel...
-        ModelUtil.updateWebModel(ModelUtil.getListenerGroups(model), webModel);
+        ModelUtil.updateWebModel(deploymentName, ModelUtil.getListenerGroups(model), webModel);
 
         // Add a sub-deloyment for the web model...
         this.servlets = webModel.getServlets();
@@ -165,7 +165,7 @@
                             webDeployment.addEntry(wsHandlerName, handlers.getBytes("UTF-8"));
                         }
                         
-                        final byte[] wsClass = generator.generate(service.getCategory(),
+                        final byte[] wsClass = generator.generate(deploymentName, service.getCategory(),
                             service.getName(), serviceInfo, includeHandlers);
                         final String wsClassName = serviceInfo.getClassName().replace('.', '/') + ".class";
                         webDeployment.addEntry("WEB-INF/classes/" + wsClassName, wsClass);

Modified: labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/http/HttpGatewayServlet.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/http/HttpGatewayServlet.java	2010-08-02 19:01:26 UTC (rev 34469)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/soa/esb/listeners/gateway/http/HttpGatewayServlet.java	2010-08-02 19:05:44 UTC (rev 34470)
@@ -46,6 +46,7 @@
 import org.jboss.soa.esb.helpers.ConfigTree;
 import org.jboss.soa.esb.http.HttpServletSecUtil;
 import org.jboss.soa.esb.lifecycle.LifecycleResourceException;
+import org.jboss.soa.esb.lifecycle.LifecycleResourceManager;
 import org.jboss.soa.esb.listeners.ListenerTagNames;
 import org.jboss.soa.esb.listeners.config.mappers120.HttpGatewayMapper;
 import org.jboss.soa.esb.listeners.message.MessageComposer;
@@ -89,93 +90,114 @@
     private long blockingTimeout = 30000L;
     private Map<String, Integer> exceptionMappings;
     private int[] allowedPorts = new int[0];
+    private String deployment ;
 
     public void init(ServletConfig config) throws ServletException {
-        service = new Service(
-        	config.getInitParameter(ListenerTagNames.TARGET_SERVICE_CATEGORY_TAG),
-        	config.getInitParameter(ListenerTagNames.TARGET_SERVICE_NAME_TAG)
-        );
-        try {
-            serviceInvoker = new ServiceInvoker(service);
-        } catch (MessageDeliverException e) {
-            throw new ServletException("Unable to create ServiceInvoker for Service '" + service + "'.", e);
+        deployment = config.getInitParameter(ListenerTagNames.DEPLOYMENT_NAME_TAG) ;
+        
+        final ClassLoader origClassLoader = Thread.currentThread().getContextClassLoader() ;
+        final ClassLoader deploymentClassLoader = LifecycleResourceManager.getSingleton().getClassLoaderForDeployment(deployment) ;
+        if (deploymentClassLoader != null) {
+            Thread.currentThread().setContextClassLoader(deploymentClassLoader) ;
         }
-    	endpointAddress = config.getInitParameter(Servlet.ENDPOINT_ADDRESS);
-
-        String allow = config.getInitParameter(Servlet.ALLOWED_PORTS);
-        if (allow != null) {
-            StringTokenizer tokens = new StringTokenizer(allow, ",");
-            int noOfItems = tokens.countTokens();
-            this.allowedPorts = new int[noOfItems];
-            for (int i = 0; i < noOfItems; i++) {
-                this.allowedPorts[i] = Integer.parseInt(tokens.nextToken());
-            }
-        }
-
-        ConfigTree configTree = toConfigTree(config);
-
         try {
-            messageComposer = MessageComposer.Factory.getInstance(configTree.getAttribute(ListenerTagNames.GATEWAY_COMPOSER_CLASS_TAG, HttpMessageComposer.class.getName()), configTree);
-        } catch (ConfigurationException e) {
-            throw new ServletException("Failed to create message composer.", e);
-        } catch (MessageDeliverException e) {
-            throw new ServletException("Failed to create message composer.", e);
-        }
-
-        asyncInvoke = configTree.getBooleanAttribute(ASYNC_SERVICE_INVOKE, false);
-        if(asyncInvoke) {
-            String asyncSCConfig = configTree.getAttribute(ASYNC_STATUS_CODE);
+            service = new Service(
+            	config.getInitParameter(ListenerTagNames.TARGET_SERVICE_CATEGORY_TAG),
+            	config.getInitParameter(ListenerTagNames.TARGET_SERVICE_NAME_TAG)
+            );
             try {
-                asyncStatusCode = Integer.parseInt(asyncSCConfig);
-            } catch (NumberFormatException e) {
-                throw new ServletException("Invalid static asynchronous response code configuration '" + asyncSCConfig + "'.", e);
+                serviceInvoker = new ServiceInvoker(service);
+            } catch (MessageDeliverException e) {
+                throw new ServletException("Unable to create ServiceInvoker for Service '" + service + "'.", e);
             }
-
-            String payloadPath = configTree.getAttribute(ASYNC_PAYLOAD);
-            if(payloadPath != null) {
+        	endpointAddress = config.getInitParameter(Servlet.ENDPOINT_ADDRESS);
+    
+            String allow = config.getInitParameter(Servlet.ALLOWED_PORTS);
+            if (allow != null) {
+                StringTokenizer tokens = new StringTokenizer(allow, ",");
+                int noOfItems = tokens.countTokens();
+                this.allowedPorts = new int[noOfItems];
+                for (int i = 0; i < noOfItems; i++) {
+                    this.allowedPorts[i] = Integer.parseInt(tokens.nextToken());
+                }
+            }
+    
+            ConfigTree configTree = toConfigTree(config);
+    
+            try {
+                messageComposer = MessageComposer.Factory.getInstance(configTree.getAttribute(ListenerTagNames.GATEWAY_COMPOSER_CLASS_TAG, HttpMessageComposer.class.getName()), configTree);
+            } catch (ConfigurationException e) {
+                throw new ServletException("Failed to create message composer.", e);
+            } catch (MessageDeliverException e) {
+                throw new ServletException("Failed to create message composer.", e);
+            }
+    
+            asyncInvoke = configTree.getBooleanAttribute(ASYNC_SERVICE_INVOKE, false);
+            if(asyncInvoke) {
+                String asyncSCConfig = configTree.getAttribute(ASYNC_STATUS_CODE);
                 try {
-                    asyncPayload = readStaticAsyncResponse(payloadPath);
+                    asyncStatusCode = Integer.parseInt(asyncSCConfig);
+                } catch (NumberFormatException e) {
+                    throw new ServletException("Invalid static asynchronous response code configuration '" + asyncSCConfig + "'.", e);
+                }
+    
+                String payloadPath = configTree.getAttribute(ASYNC_PAYLOAD);
+                if(payloadPath != null) {
+                    try {
+                        asyncPayload = readStaticAsyncResponse(payloadPath);
+                    } catch (ConfigurationException e) {
+                        throw new ServletException("Invalid Exception to HTTP Status mapping configuration.", e);
+                    }
+                    asyncContentType = configTree.getAttribute(ASYNC_PAYLOAD_CONTENT_TYPE);
+                    asyncCharacterEncoding = configTree.getAttribute(ASYNC_PAYLOAD_CHARACTER_ENCODING);
+                }
+            } else {
+                blockingTimeout = configTree.getLongAttribute("synchronousTimeout", 30000L);
+            }
+    
+            String exceptionMappingsCSV = configTree.getAttribute(EXCEPTION_MAPPINGS);
+            if(exceptionMappingsCSV != null) {
+                try {
+                    exceptionMappings = HttpGatewayMapper.decodeExceptionMappingsCSV(exceptionMappingsCSV);
                 } catch (ConfigurationException e) {
                     throw new ServletException("Invalid Exception to HTTP Status mapping configuration.", e);
                 }
-                asyncContentType = configTree.getAttribute(ASYNC_PAYLOAD_CONTENT_TYPE);
-                asyncCharacterEncoding = configTree.getAttribute(ASYNC_PAYLOAD_CHARACTER_ENCODING);
             }
-        } else {
-            blockingTimeout = configTree.getLongAttribute("synchronousTimeout", 30000L);
+        } finally {
+            Thread.currentThread().setContextClassLoader(origClassLoader) ;
         }
-
-        String exceptionMappingsCSV = configTree.getAttribute(EXCEPTION_MAPPINGS);
-        if(exceptionMappingsCSV != null) {
-            try {
-                exceptionMappings = HttpGatewayMapper.decodeExceptionMappingsCSV(exceptionMappingsCSV);
-            } catch (ConfigurationException e) {
-                throw new ServletException("Invalid Exception to HTTP Status mapping configuration.", e);
-            }
-        }
     }
 
     protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
-        int noOfItems = this.allowedPorts.length;
-        int port = req.getServerPort();
-        boolean allow = false;
-        if (noOfItems == 0) {
-            allow = true;
+        final ClassLoader origClassLoader = Thread.currentThread().getContextClassLoader() ;
+        final ClassLoader deploymentClassLoader = LifecycleResourceManager.getSingleton().getClassLoaderForDeployment(deployment) ;
+        if (deploymentClassLoader != null) {
+            Thread.currentThread().setContextClassLoader(deploymentClassLoader) ;
         }
-        else {
-            for (int i = 0; i < noOfItems; i++) {
-                if (allowedPorts[i] == port) {
-                    allow = true;
-                    break;
+        try {
+            int noOfItems = this.allowedPorts.length;
+            int port = req.getServerPort();
+            boolean allow = false;
+            if (noOfItems == 0) {
+                allow = true;
+            }
+            else {
+                for (int i = 0; i < noOfItems; i++) {
+                    if (allowedPorts[i] == port) {
+                        allow = true;
+                        break;
+                    }
                 }
             }
+    
+            if (allow) {
+                processServiceRequest(req, resp);
+            } else {
+                resp.sendError(HttpServletResponse.SC_NOT_FOUND);
+            }
+        } finally {
+            Thread.currentThread().setContextClassLoader(origClassLoader) ;
         }
-
-        if (allow) {
-            processServiceRequest(req, resp);
-        } else {
-            resp.sendError(HttpServletResponse.SC_NOT_FOUND);
-        }
     }
 
     private void processServiceRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

Modified: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGeneratorUnitTest.java
===================================================================
--- labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGeneratorUnitTest.java	2010-08-02 19:01:26 UTC (rev 34469)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGeneratorUnitTest.java	2010-08-02 19:05:44 UTC (rev 34470)
@@ -86,7 +86,7 @@
 
         final JAXWSProviderClassGenerator classGenerator = new JAXWSProviderClassGenerator() ;
         
-        final byte[] bytes = classGenerator.generate(category, name, endpointInfo, false) ;
+        final byte[] bytes = classGenerator.generate("deploymentName", category, name, endpointInfo, false) ;
         final ClassLoader classLoader = new ClassLoader() {
             public java.lang.Class<?> loadClass(final String name) throws ClassNotFoundException {
                 if (endpointInfo.getClassName().equals(name)) {



More information about the jboss-svn-commits mailing list