[jboss-svn-commits] JBL Code SVN: r29330 - in labs/jbossesb/trunk/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
Mon Sep 14 07:55:38 EDT 2009
Author: kevin.conner at jboss.com
Date: 2009-09-14 07:55:37 -0400 (Mon, 14 Sep 2009)
New Revision: 29330
Added:
labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGeneratorUnitTest.java
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/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/RequestResponseBaseWebService.java
Log:
Handle multiple instances of WS endpoint: JBESB-2808
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 2009-09-14 10:38:56 UTC (rev 29329)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/BaseWebService.java 2009-09-14 11:55:37 UTC (rev 29330)
@@ -84,10 +84,10 @@
protected final MessagePayloadProxy responseProxy ;
protected final String action ;
- protected BaseWebService(final String category, final String name, final String requestLocation, final String responseLocation, final String action)
+ protected BaseWebService(final ServiceInvoker serviceInvoker, final String requestLocation, final String responseLocation, final String action)
throws MessageDeliverException
{
- serviceInvoker = new ServiceInvoker(category, name) ;
+ this.serviceInvoker = serviceInvoker ;
requestProxy = new MessagePayloadProxy(null, requestLocation) ;
responseProxy = new MessagePayloadProxy(responseLocation, null) ;
this.action = action ;
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 2009-09-14 10:38:56 UTC (rev 29329)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGenerator.java 2009-09-14 11:55:37 UTC (rev 29330)
@@ -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;
@@ -111,7 +115,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 + "," +
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 2009-09-14 10:38:56 UTC (rev 29329)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/OneWayBaseWebService.java 2009-09-14 11:55:37 UTC (rev 29330)
@@ -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, final String requestLocation, final String responseLocation, final String action)
+ protected OneWayBaseWebService(final ServiceInvoker serviceInvoker, final String requestLocation, final String responseLocation, final String action)
throws MessageDeliverException
{
- super(category, name, requestLocation, responseLocation, action) ;
+ super(serviceInvoker, requestLocation, responseLocation, action) ;
}
@Override
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 2009-09-14 10:38:56 UTC (rev 29329)
+++ labs/jbossesb/trunk/product/rosetta/src/org/jboss/internal/soa/esb/webservice/RequestResponseBaseWebService.java 2009-09-14 11:55:37 UTC (rev 29330)
@@ -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;
@@ -42,10 +43,10 @@
private static final boolean BYPASS ;
private static final Logger LOGGER = Logger.getLogger(RequestResponseBaseWebService.class) ;
- protected RequestResponseBaseWebService(final String category, final String name, final String requestLocation, final String responseLocation, final String action)
+ protected RequestResponseBaseWebService(final ServiceInvoker serviceInvoker, final String requestLocation, final String responseLocation, final String action)
throws MessageDeliverException
{
- super(category, name, requestLocation, responseLocation, action) ;
+ super(serviceInvoker, requestLocation, responseLocation, action) ;
}
@Override
Copied: labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGeneratorUnitTest.java (from rev 28382, labs/jbossesb/branches/JBESB_4_4_GA_CP/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 (rev 0)
+++ labs/jbossesb/trunk/product/rosetta/tests/src/org/jboss/internal/soa/esb/webservice/JAXWSProviderClassGeneratorUnitTest.java 2009-09-14 11:55:37 UTC (rev 29330)
@@ -0,0 +1,148 @@
+/*
+ * 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.listeners.config.WebserviceInfo;
+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<WebserviceInfo> webservices = generator.getModel().getWebserviceServices();
+ final WebserviceInfo webservice = webservices.get(0) ;
+ final ESBServiceEndpointInfo endpointInfo = new ESBServiceEndpointInfo(webservice) ;
+
+ final EPR deliverEPR = new EPR(new URI("test:deliver")) ;
+ final MockCourier deliverCourier = new MockCourier(true);
+ final Service service = webservice.getService() ;
+ 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, false) ;
+ 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 ;
+ }
+ }
+}
More information about the jboss-svn-commits
mailing list