[jboss-svn-commits] JBL Code SVN: r28382 - in labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta: tests/src/org/jboss/internal/soa/esb/webservice and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 24 07:31:33 EDT 2009


Author: kevin.conner at jboss.com
Date: 2009-07-24 07:31:32 -0400 (Fri, 24 Jul 2009)
New Revision: 28382

Added:
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGeneratorUnitTest.java
Modified:
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayBaseWebService.java
   labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseBaseWebService.java
Log:
Handle multiple instances of WS endpoint: JBESB-2754

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java	2009-07-24 11:09:54 UTC (rev 28381)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java	2009-07-24 11:31:32 UTC (rev 28382)
@@ -68,10 +68,10 @@
 
     protected final ServiceInvoker serviceInvoker ;
 
-    protected BaseWebService(final String category, final String name)
+    protected BaseWebService(final ServiceInvoker serviceInvoker)
         throws MessageDeliverException
     {
-        serviceInvoker = new ServiceInvoker(category, name) ;
+        this.serviceInvoker = serviceInvoker ;
     }
 
     public SOAPMessage invoke(final SOAPMessage request)

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java	2009-07-24 11:09:54 UTC (rev 28381)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java	2009-07-24 11:31:32 UTC (rev 28382)
@@ -19,10 +19,14 @@
  */
 package org.jboss.internal.soa.esb.webservice;
 
+import org.jboss.soa.esb.client.ServiceInvoker;
+
 import javassist.ClassPool;
 import javassist.CtClass;
 import javassist.CtConstructor;
+import javassist.CtField;
 import javassist.LoaderClassPath;
+import javassist.Modifier;
 import javassist.NotFoundException;
 import javassist.bytecode.AnnotationsAttribute;
 import javassist.bytecode.ConstPool;
@@ -102,7 +106,14 @@
 			
 			seiClass.getClassFile().addAttribute(attribute);
 			
-			final String constructorStr = "super(\"" + category + "\"," + "\""  + service + "\");";
+			final String siClassName = ServiceInvoker.class.getName() ;
+			final CtClass siClass = pool.get(siClassName) ;
+			final String siFieldName = "serviceInvoker" ;
+			final CtField field = new CtField(siClass, siFieldName, seiClass) ;
+			field.setModifiers(Modifier.PRIVATE | Modifier.STATIC | Modifier.FINAL) ;
+			seiClass.addField(field, "new " + siClassName + "(\"" + category + "\", \"" + service + "\")") ;
+			
+			final String constructorStr = "super("+siFieldName+");";
 			CtConstructor defaultConstructor = new CtConstructor(null, seiClass) ;
 			defaultConstructor.setBody(constructorStr) ;
 			seiClass.addConstructor(defaultConstructor) ;

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayBaseWebService.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayBaseWebService.java	2009-07-24 11:09:54 UTC (rev 28381)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayBaseWebService.java	2009-07-24 11:31:32 UTC (rev 28382)
@@ -21,6 +21,7 @@
 */
 package org.jboss.internal.soa.esb.webservice;
 
+import org.jboss.soa.esb.client.ServiceInvoker;
 import org.jboss.soa.esb.listeners.message.MessageDeliverException;
 import org.jboss.soa.esb.message.Message;
 
@@ -30,10 +31,10 @@
  */
 public class OneWayBaseWebService extends BaseWebService
 {
-    protected OneWayBaseWebService(final String category, final String name)
+    protected OneWayBaseWebService(final ServiceInvoker serviceInvoker)
         throws MessageDeliverException
     {
-        super(category, name) ;
+        super(serviceInvoker) ;
     }
     
     @Override

Modified: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseBaseWebService.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseBaseWebService.java	2009-07-24 11:09:54 UTC (rev 28381)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseBaseWebService.java	2009-07-24 11:31:32 UTC (rev 28382)
@@ -22,6 +22,7 @@
 package org.jboss.internal.soa.esb.webservice;
 
 import org.apache.log4j.Logger;
+import org.jboss.soa.esb.client.ServiceInvoker;
 import org.jboss.soa.esb.common.Environment;
 import org.jboss.soa.esb.common.ModulePropertyManager;
 import org.jboss.soa.esb.listeners.message.MessageDeliverException;
@@ -40,10 +41,10 @@
     private static final long TIMEOUT ;
     private static final Logger LOGGER = Logger.getLogger(RequestResponseBaseWebService.class) ;
     
-    protected RequestResponseBaseWebService(final String category, final String name)
+    protected RequestResponseBaseWebService(final ServiceInvoker serviceInvoker)
         throws MessageDeliverException
     {
-        super(category, name) ;
+        super(serviceInvoker) ;
     }
     
     @Override

Added: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGeneratorUnitTest.java
===================================================================
--- labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGeneratorUnitTest.java	                        (rev 0)
+++ labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGeneratorUnitTest.java	2009-07-24 11:31:32 UTC (rev 28382)
@@ -0,0 +1,146 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2006, JBoss Inc., and others contributors as indicated
+ * by the @authors tag. All rights reserved.
+ * See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ * This copyrighted material is made available to anyone wishing to use,
+ * modify, copy, or redistribute it subject to the terms and conditions
+ * of the GNU Lesser General Public License, v. 2.1.
+ * This program is distributed in the hope that it will be useful, but WITHOUT A
+ * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more details.
+ * You should have received a copy of the GNU Lesser General Public License,
+ * v.2.1 along with this distribution; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA  02110-1301, USA.
+ *
+ * (C) 2005-2006, JBoss Inc.
+ */
+package org.jboss.internal.soa.esb.webservice;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import junit.framework.TestCase;
+
+import org.jboss.internal.soa.esb.couriers.MockCourier;
+import org.jboss.internal.soa.esb.couriers.MockCourierFactory;
+import org.jboss.internal.soa.esb.services.registry.MockRegistry;
+import org.jboss.internal.soa.esb.util.StreamUtils;
+import org.jboss.soa.esb.Service;
+import org.jboss.soa.esb.addressing.EPR;
+import org.jboss.soa.esb.listeners.config.Generator;
+import org.jboss.soa.esb.message.Message;
+import org.jboss.soa.esb.message.format.MessageFactory;
+import org.jboss.soa.esb.services.registry.RegistryException;
+import org.jboss.soa.esb.services.registry.RegistryFactory;
+import org.jboss.soa.esb.util.ClassUtil;
+
+public class JAXWSProviderClassGeneratorUnitTest extends TestCase
+{
+    private TestRegistry testRegistry ;
+    
+    @Override
+    protected void setUp()
+        throws Exception
+    {
+        MockCourierFactory.install() ;
+        testRegistry = new TestRegistry() ;
+        RegistryFactory.setRegistry(testRegistry) ;
+    }
+    
+    @Override
+    protected void tearDown()
+        throws Exception
+    {
+        RegistryFactory.setRegistry(null) ;
+        MockCourierFactory.uninstall() ;
+    }
+    
+    public void testRegistryLookupCount()
+        throws Exception
+    {
+        final InputStream is = ClassUtil.getResourceAsStream("jbossesb_config_08.xml", getClass()) ;
+        final byte[] configBytes = StreamUtils.readStream(is) ;
+        ByteArrayOutputStream listenerXml = new ByteArrayOutputStream();
+        ByteArrayOutputStream gatewayXml = new ByteArrayOutputStream();
+        Generator generator = new Generator(new ByteArrayInputStream(configBytes), listenerXml, gatewayXml);
+        generator.generate();
+        List<org.jboss.soa.esb.listeners.config.xbeanmodel.ServiceDocument.Service> services = generator.getModel().getServices();
+        final org.jboss.soa.esb.listeners.config.xbeanmodel.ServiceDocument.Service service = services.get(0) ;
+        final ESBServiceEndpointInfo endpointInfo = new ESBServiceEndpointInfo(service) ;
+        
+        final EPR deliverEPR = new EPR(new URI("test:deliver")) ;
+        final MockCourier deliverCourier = new MockCourier(true);
+        final String category = service.getCategory() ;
+        final String name = service.getName() ;
+        TestRegistry.register(category, name, deliverEPR, deliverCourier);
+
+        final JAXWSProviderClassGenerator classGenerator = new JAXWSProviderClassGenerator() ;
+        
+        final byte[] bytes = classGenerator.generate(category, name, endpointInfo) ;
+        final ClassLoader classLoader = new ClassLoader() {
+            public java.lang.Class<?> loadClass(final String name) throws ClassNotFoundException {
+                if (endpointInfo.getClassName().equals(name)) {
+                    return defineClass(name, bytes, 0, bytes.length) ;
+                } else {
+                    return super.loadClass(name) ;
+                }
+            };
+        } ;
+        final Class<?> baseWebServiceClass = classLoader.loadClass(endpointInfo.getClassName()) ;
+        
+        final BaseWebService baseWebService = (BaseWebService)baseWebServiceClass.newInstance() ;
+        assertEquals("Initial instance count", 1, testRegistry.getCount(category, name)) ;
+        
+        final Message message = MessageFactory.getInstance().getMessage() ;
+        baseWebService.deliverMessage(message) ;
+        assertEquals("First invocation", 1, testRegistry.getCount(category, name)) ;
+        
+        final BaseWebService baseWebService2 = (BaseWebService)baseWebServiceClass.newInstance() ;
+        assertEquals("Second instance count", 1, testRegistry.getCount(category, name)) ;
+        
+        baseWebService2.deliverMessage(message) ;
+        assertEquals("Second invocation", 1, testRegistry.getCount(category, name)) ;
+    }
+    
+    final class TestRegistry extends MockRegistry
+    {
+        final Map<Service, Integer> counts = new HashMap<Service, Integer>() ;
+        
+        @Override
+        public List<EPR> findEPRs(final String category, final String serviceName)
+            throws RegistryException
+        {
+            final Service service = new Service(category, serviceName) ;
+            final Integer count = counts.get(service) ;
+            if (count != null)
+            {
+                counts.put(service, Integer.valueOf(count.intValue() + 1)) ;
+            }
+            else
+            {
+                counts.put(service, Integer.valueOf(1)) ;
+            }
+            
+            return super.findEPRs(category, serviceName) ;
+        }
+        
+        public int getCount(final String category, final String serviceName)
+        {
+            final Service service = new Service(category, serviceName) ;
+            final Integer count = counts.get(service) ;
+            if (count != null)
+            {
+                return count.intValue() ;
+            }
+            return 0 ;
+        }
+    }
+}


Property changes on: labs/jbossesb/branches/JBESB_4_4_GA_CP/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGeneratorUnitTest.java
___________________________________________________________________
Name: svn:keywords
   + Rev Date
Name: svn:eol-style
   + native



More information about the jboss-svn-commits mailing list