Author: barrettj Date: Mon May 10 20:51:22 2010 New Revision: 942898 URL: http://svn.apache.org/viewvc?rev=942898&view=rev Log: Add a String property on the sparse composite that will be included as part of the uniqueness of the client-side Service instance. This can be used to attach unique configurations (such as policy set) to different instances of the same WSDL Service injected on the client if each service uses a different service ref name for example. Add associated TDD test also.
Added: axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataServiceRefNameTests.java Modified: axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionKey.java axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/DescriptionBuilderComposite.java axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/MDQConstants.java axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImpl.java axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java Added: axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataServiceRefNameTests.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataServiceRefNameTests.java?rev=942898&view=auto ============================================================================== --- axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataServiceRefNameTests.java (added) +++ axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataServiceRefNameTests.java Mon May 10 20:51:22 2010 @@ -0,0 +1,331 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.axis2.jaxws.spi; + +import org.apache.axis2.description.AxisService; +import org.apache.axis2.description.Parameter; +import org.apache.axis2.jaxws.description.DescriptionTestUtils2; +import org.apache.axis2.jaxws.description.EndpointDescription; +import org.apache.axis2.jaxws.description.ServiceDescription; +import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite; +import org.apache.axis2.jaxws.description.builder.MDQConstants; + +import javax.xml.namespace.QName; +import javax.xml.ws.Service; + +import java.net.URL; + +import junit.framework.TestCase; + +/** + * Validate the behavior related to a ServiceRefName being specified (or not) in the client metadata. Different + * ServiceRefName values should result in different instances of an AxisService. This is so that unique policy sets + * can be attached to AxisSerivces based on a ServiceRefName. If the ServiceRefName is not unique then the AxisService + * should be shared. Also if no ServiceRefName is specified, the AxisService should be shared. + * + * Note that all these tests require that a test client configuration factory which caches ServiceDescriptions be + * installed and restored at the end. + */ +public class ClientMetadataServiceRefNameTests extends TestCase { + static final String namespaceURI = "http://description.jaxws.axis2.apache.org"; + static final String svcLocalPart = "svcLocalPart"; + static final String originalWsdl_portLocalPart = "portLocalPart"; + + + static final String originalWsdl = "ClientMetadata.wsdl"; + + // All tests require a test client configuration factory which caches ServiceDescriptions + protected void setUp() throws Exception { + ClientMetadataTest.installCachingFactory(); + } + protected void tearDown() throws Exception { + ClientMetadataTest.restoreOriginalFactory(); + } + + /** + * Validate that multiple ports created under the same service without additional service metadata + * specified via a setServiceMetatadata(composite) and therefore without a service ref name being specified + * share the same description objects and Axis service. + */ + public void testNoServiceRefNameSameService() { + QName serviceQName = new QName(namespaceURI, svcLocalPart); + URL wsdlUrl = ClientMetadataTest.getWsdlURL(originalWsdl); + QName portQN = new QName(namespaceURI, originalWsdl_portLocalPart); + + + Service service = Service.create(wsdlUrl, serviceQName); + ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service); + ServiceDescription serviceDesc = serviceDelegate.getServiceDescription(); + + // Get the first port under the service + ClientMetadataPortSEI port1 = service.getPort(portQN, ClientMetadataPortSEI.class); + EndpointDescription epDescArray1[] = serviceDesc.getEndpointDescriptions(); + assertEquals(1, epDescArray1.length); + EndpointDescription epDesc1 = epDescArray1[0]; + AxisService axisService1 = epDesc1.getAxisService(); + + // Get a second port using the same service and port names + ClientMetadataPortSEI port2 = service.getPort(portQN, ClientMetadataPortSEI.class); + EndpointDescription epDescArray2[] = serviceDesc.getEndpointDescriptions(); + assertEquals(1, epDescArray2.length); + EndpointDescription epDesc2 = epDescArray2[0]; + AxisService axisService2 = epDesc2.getAxisService(); + + // Validate that the description and AxisService objects are shared + assertNotSame("Ports should be different", port1, port2); + assertSame("Endpoint Descriptions should be same", epDesc1, epDesc2); + assertSame("Axis Services should be same", axisService1, axisService2); + + // Validate that the service ref name property does not exist on the axis service + assertNull("Service Ref Name should not exist", axisService1.getParameter(MDQConstants.SERVICE_REF_NAME)); + } + + /** + * Validate that multiple ports created under different service instances of the same Service QName and + * without additional metadata and therefore without a service ref name being specified share the same + * description objects and Axis service. + */ + public void testNoServiceRefNameMultipleService() { + QName serviceQName = new QName(namespaceURI, svcLocalPart); + URL wsdlUrl = ClientMetadataTest.getWsdlURL(originalWsdl); + QName portQN = new QName(namespaceURI, originalWsdl_portLocalPart); + + // Create the first service and port + Service service1 = Service.create(wsdlUrl, serviceQName); + ServiceDelegate serviceDelegate1 = DescriptionTestUtils2.getServiceDelegate(service1); + ServiceDescription serviceDesc1 = serviceDelegate1.getServiceDescription(); + + ClientMetadataPortSEI port1 = service1.getPort(portQN, ClientMetadataPortSEI.class); + EndpointDescription epDescArray1[] = serviceDesc1.getEndpointDescriptions(); + assertEquals(1, epDescArray1.length); + EndpointDescription epDesc1 = epDescArray1[0]; + AxisService axisService1 = epDesc1.getAxisService(); + + // Create the second service and port using the same QNames & WSDL + Service service2 = Service.create(wsdlUrl, serviceQName); + ServiceDelegate serviceDelegate2 = DescriptionTestUtils2.getServiceDelegate(service2); + ServiceDescription serviceDesc2 = serviceDelegate2.getServiceDescription(); + + ClientMetadataPortSEI port2 = service2.getPort(portQN, ClientMetadataPortSEI.class); + EndpointDescription epDescArray2[] = serviceDesc2.getEndpointDescriptions(); + assertEquals(1, epDescArray2.length); + EndpointDescription epDesc2 = epDescArray2[0]; + AxisService axisService2 = epDesc2.getAxisService(); + + // Validate that the description and AxisService objects are shared + assertNotSame("Service Delegate instances should be different", serviceDelegate1, serviceDelegate2); + assertSame("Service Descriptions should be same", serviceDesc1, serviceDesc2); + assertNotSame("Ports should be different", port1, port2); + assertSame("Endpoint Descriptions should be same", epDesc1, epDesc2); + assertSame("Axis Services should be same", axisService1, axisService2); + + // Validate that the service ref name property does not exist on the axis service + assertNull("Service Ref Name should not exist", axisService1.getParameter(MDQConstants.SERVICE_REF_NAME)); + } + + /** + * Validate that setting the service ref name property on the sparse composite when creating a service + * causes the related AxisService to have that property and the corresponding value. + */ + public void testServiceRefNameParameter() { + QName serviceQName = new QName(namespaceURI, svcLocalPart); + URL wsdlUrl = ClientMetadataTest.getWsdlURL(originalWsdl); + QName portQN = new QName(namespaceURI, originalWsdl_portLocalPart); + String myServiceRefName = "MyServiceRefName"; + + // Set the ServiceRefName as a parameter on the sparse composite that will be used to create the service + DescriptionBuilderComposite composite = new DescriptionBuilderComposite(); + composite.getProperties().put(MDQConstants.SERVICE_REF_NAME, myServiceRefName); + ServiceDelegate.setServiceMetadata(composite); + Service service = Service.create(wsdlUrl, serviceQName); + assertNotNull(service); + ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service); + ServiceDescription serviceDesc = serviceDelegate.getServiceDescription(); + + ClientMetadataPortSEI port = service.getPort(portQN, ClientMetadataPortSEI.class); + EndpointDescription epDescArray[] = serviceDesc.getEndpointDescriptions(); + assertEquals(1, epDescArray.length); + EndpointDescription epDesc = epDescArray[0]; + AxisService axisService = epDesc.getAxisService(); + + // Validate that the service ref name property is set on the Axis Service + Parameter serviceRefParam = axisService.getParameter(MDQConstants.SERVICE_REF_NAME); + assertNotNull("Service Ref Paramater does not exist", serviceRefParam); + assertEquals("Service Ref Parameter has wrong value", myServiceRefName, (String) serviceRefParam.getValue()); + + } + + /** + * Validate that setting different service ref names on the same WSDL Service (same service QName) results in + * different instances of the description hierarchy and different AxisServices each with the appropriate service + * ref name set on the AxisService. + */ + public void testServiceRefNameParameterDifferentNames() { + QName serviceQName = new QName(namespaceURI, svcLocalPart); + URL wsdlUrl = ClientMetadataTest.getWsdlURL(originalWsdl); + QName portQN = new QName(namespaceURI, originalWsdl_portLocalPart); + String myServiceRefName1 = "MyServiceRefName1"; + String myServiceRefName2 = "MyServiceRefName2"; + + // Create the first service and port + // Set the ServiceRefName as a parameter on the sparse composite that will be used to create the service + DescriptionBuilderComposite composite1 = new DescriptionBuilderComposite(); + composite1.getProperties().put(MDQConstants.SERVICE_REF_NAME, myServiceRefName1); + ServiceDelegate.setServiceMetadata(composite1); + Service service1 = Service.create(wsdlUrl, serviceQName); + ServiceDelegate serviceDelegate1 = DescriptionTestUtils2.getServiceDelegate(service1); + ServiceDescription serviceDesc1 = serviceDelegate1.getServiceDescription(); + + ClientMetadataPortSEI port1 = service1.getPort(portQN, ClientMetadataPortSEI.class); + EndpointDescription epDescArray1[] = serviceDesc1.getEndpointDescriptions(); + assertEquals(1, epDescArray1.length); + EndpointDescription epDesc1 = epDescArray1[0]; + AxisService axisService1 = epDesc1.getAxisService(); + + // Create the second service and port using the same QNames & WSDL + DescriptionBuilderComposite composite2 = new DescriptionBuilderComposite(); + composite2.getProperties().put(MDQConstants.SERVICE_REF_NAME, myServiceRefName2); + ServiceDelegate.setServiceMetadata(composite2); + Service service2 = Service.create(wsdlUrl, serviceQName); + ServiceDelegate serviceDelegate2 = DescriptionTestUtils2.getServiceDelegate(service2); + ServiceDescription serviceDesc2 = serviceDelegate2.getServiceDescription(); + + ClientMetadataPortSEI port2 = service2.getPort(portQN, ClientMetadataPortSEI.class); + EndpointDescription epDescArray2[] = serviceDesc2.getEndpointDescriptions(); + assertEquals(1, epDescArray2.length); + EndpointDescription epDesc2 = epDescArray2[0]; + AxisService axisService2 = epDesc2.getAxisService(); + + // Validate that the description and AxisService objects are not shared + assertNotSame("Service Delegate instances should be different", serviceDelegate1, serviceDelegate2); + assertNotSame("Service Descriptions should be different", serviceDesc1, serviceDesc2); + assertNotSame("Ports should be different", port1, port2); + assertNotSame("Endpoint Descriptions should be different", epDesc1, epDesc2); + assertNotSame("Axis Services should be different", axisService1, axisService2); + + // Validate that the correct service ref name property exists on each axis service + assertNotNull("Service Ref Name should exist", axisService1.getParameter(MDQConstants.SERVICE_REF_NAME)); + assertEquals("Wrong Service Ref Name value", myServiceRefName1, (String) axisService1.getParameter(MDQConstants.SERVICE_REF_NAME).getValue()); + + assertNotNull("Service Ref Name should exist", axisService2.getParameter(MDQConstants.SERVICE_REF_NAME)); + assertEquals("Wrong Service Ref Name value", myServiceRefName2, (String) axisService2.getParameter(MDQConstants.SERVICE_REF_NAME).getValue()); + + } + + /** + * Validate that if the same service ref name is specified on two different service creates, those services share + * the same description objects and AxisService. + */ + public void testMultipleServicesSameName() { + QName serviceQName = new QName(namespaceURI, svcLocalPart); + URL wsdlUrl = ClientMetadataTest.getWsdlURL(originalWsdl); + QName portQN = new QName(namespaceURI, originalWsdl_portLocalPart); + String myServiceRefName = "MyServiceRefName"; + + // Create the first service and port + // Set the ServiceRefName as a parameter on the sparse composite that will be used to create the service + DescriptionBuilderComposite composite1 = new DescriptionBuilderComposite(); + composite1.getProperties().put(MDQConstants.SERVICE_REF_NAME, myServiceRefName); + ServiceDelegate.setServiceMetadata(composite1); + Service service1 = Service.create(wsdlUrl, serviceQName); + ServiceDelegate serviceDelegate1 = DescriptionTestUtils2.getServiceDelegate(service1); + ServiceDescription serviceDesc1 = serviceDelegate1.getServiceDescription(); + + ClientMetadataPortSEI port1 = service1.getPort(portQN, ClientMetadataPortSEI.class); + EndpointDescription epDescArray1[] = serviceDesc1.getEndpointDescriptions(); + assertEquals(1, epDescArray1.length); + EndpointDescription epDesc1 = epDescArray1[0]; + AxisService axisService1 = epDesc1.getAxisService(); + + // Create the second service and port using the same service ref name, QNames & WSDL + DescriptionBuilderComposite composite2 = new DescriptionBuilderComposite(); + composite2.getProperties().put(MDQConstants.SERVICE_REF_NAME, myServiceRefName); + ServiceDelegate.setServiceMetadata(composite2); + Service service2 = Service.create(wsdlUrl, serviceQName); + ServiceDelegate serviceDelegate2 = DescriptionTestUtils2.getServiceDelegate(service2); + ServiceDescription serviceDesc2 = serviceDelegate2.getServiceDescription(); + + ClientMetadataPortSEI port2 = service2.getPort(portQN, ClientMetadataPortSEI.class); + EndpointDescription epDescArray2[] = serviceDesc2.getEndpointDescriptions(); + assertEquals(1, epDescArray2.length); + EndpointDescription epDesc2 = epDescArray2[0]; + AxisService axisService2 = epDesc2.getAxisService(); + + // Validate that the description and AxisService objects are shared + assertNotSame("Service Delegate instances should be different", serviceDelegate1, serviceDelegate2); + assertSame("Service Descriptions should be same", serviceDesc1, serviceDesc2); + assertNotSame("Ports should be different", port1, port2); + assertSame("Endpoint Descriptions should be same", epDesc1, epDesc2); + assertSame("Axis Services should be same", axisService1, axisService2); + + // Validate that the service ref name property does not exist on the axis service + assertNotNull("Service Ref Name should exist", axisService1.getParameter(MDQConstants.SERVICE_REF_NAME)); + assertEquals("Wrong Service Ref Name value", myServiceRefName, (String) axisService1.getParameter(MDQConstants.SERVICE_REF_NAME).getValue()); + + assertNotNull("Service Ref Name should exist", axisService2.getParameter(MDQConstants.SERVICE_REF_NAME)); + assertEquals("Wrong Service Ref Name value", myServiceRefName, (String) axisService2.getParameter(MDQConstants.SERVICE_REF_NAME).getValue()); + + } + /** + * Validate that if a service is created with a sparse composite that does not specific a service ref name, and + * another service is created without a sparse composite, they share metadata objects including an AxisService. + */ + public void testMultipleServicesPropAndNoProp() { + QName serviceQName = new QName(namespaceURI, svcLocalPart); + URL wsdlUrl = ClientMetadataTest.getWsdlURL(originalWsdl); + QName portQN = new QName(namespaceURI, originalWsdl_portLocalPart); + + // Create the first service and port + // Set a sparse composite, but do not specify the service ref name property + DescriptionBuilderComposite composite1 = new DescriptionBuilderComposite(); + ServiceDelegate.setServiceMetadata(composite1); + Service service1 = Service.create(wsdlUrl, serviceQName); + ServiceDelegate serviceDelegate1 = DescriptionTestUtils2.getServiceDelegate(service1); + ServiceDescription serviceDesc1 = serviceDelegate1.getServiceDescription(); + + ClientMetadataPortSEI port1 = service1.getPort(portQN, ClientMetadataPortSEI.class); + EndpointDescription epDescArray1[] = serviceDesc1.getEndpointDescriptions(); + assertEquals(1, epDescArray1.length); + EndpointDescription epDesc1 = epDescArray1[0]; + AxisService axisService1 = epDesc1.getAxisService(); + + // Create the second service and port using the same QNames & WSDL, but no sparse composite. + Service service2 = Service.create(wsdlUrl, serviceQName); + ServiceDelegate serviceDelegate2 = DescriptionTestUtils2.getServiceDelegate(service2); + ServiceDescription serviceDesc2 = serviceDelegate2.getServiceDescription(); + + ClientMetadataPortSEI port2 = service2.getPort(portQN, ClientMetadataPortSEI.class); + EndpointDescription epDescArray2[] = serviceDesc2.getEndpointDescriptions(); + assertEquals(1, epDescArray2.length); + EndpointDescription epDesc2 = epDescArray2[0]; + AxisService axisService2 = epDesc2.getAxisService(); + + // Validate that the description and AxisService objects are shared + assertNotSame("Service Delegate instances should be different", serviceDelegate1, serviceDelegate2); + assertSame("Service Descriptions should be same", serviceDesc1, serviceDesc2); + assertNotSame("Ports should be different", port1, port2); + assertSame("Endpoint Descriptions should be same", epDesc1, epDesc2); + assertSame("Axis Services should be same", axisService1, axisService2); + + // Validate that the service ref name property does not exist on the axis service + assertNull("Service Ref Name should not exist", axisService1.getParameter(MDQConstants.SERVICE_REF_NAME)); + assertNull("Service Ref Name should not exist", axisService2.getParameter(MDQConstants.SERVICE_REF_NAME)); + } + +} Modified: axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionKey.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionKey.java?rev=942898&r1=942897&r2=942898&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionKey.java (original) +++ axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/DescriptionKey.java Mon May 10 20:51:22 2010 @@ -34,14 +34,17 @@ public class DescriptionKey { private Class serviceClass = null; private ConfigurationContext configContext = null; + + private String serviceRefName = null; public DescriptionKey(QName serviceName, URL wsdlUrl, Class serviceClass, - ConfigurationContext configContext) { + ConfigurationContext configContext, String serviceRefName) { super(); this.serviceName = serviceName; this.wsdlUrl = wsdlUrl; this.serviceClass = serviceClass; this.configContext = configContext; + this.serviceRefName = serviceRefName; } @@ -64,10 +67,12 @@ public class DescriptionKey { } return description.serviceName.equals(this.serviceName) - && description.wsdlUrl != null ? description.wsdlUrl.equals(this.wsdlUrl) : - this.wsdlUrl == null - && description.serviceClass == this.serviceClass - && description.configContext == this.configContext; + && description.wsdlUrl != null ? + description.wsdlUrl.equals(this.wsdlUrl) : this.wsdlUrl == null + && description.serviceClass == this.serviceClass + && description.configContext == this.configContext + && description.serviceRefName != null ? + description.serviceRefName.equals(this.serviceRefName) : this.serviceRefName == null; } @Override @@ -78,6 +83,7 @@ public class DescriptionKey { hash = hash + ((wsdlUrl == null) ? 0 : wsdlUrl.hashCode()); hash = hash + ((serviceClass == null) ? 0 : serviceClass.hashCode()); hash = hash + ((configContext == null) ? 0 : configContext.hashCode()); + hash = hash + ((serviceRefName == null) ? 0 : serviceRefName.hashCode()); return hash; } @@ -119,9 +125,9 @@ public class DescriptionKey { String sName = (serviceName != null) ? serviceName.toString() : ""; String sWsdlURL = (wsdlUrl != null) ? wsdlUrl.toString() : ""; String sClass = (serviceClass != null) ? serviceClass.toString() : ""; - String sConfig = (configContext != null) ? configContext.toString() - : ""; - String key = sName + sWsdlURL + sClass + sConfig; + String sConfig = (configContext != null) ? configContext.toString() : ""; + String sServiceRefName = (serviceRefName != null) ? serviceRefName.toString() : ""; + String key = sName + sWsdlURL + sClass + sConfig + sServiceRefName; return key; } } Modified: axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/DescriptionBuilderComposite.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/DescriptionBuilderComposite.java?rev=942898&r1=942897&r2=942898&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/DescriptionBuilderComposite.java (original) +++ axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/DescriptionBuilderComposite.java Mon May 10 20:51:22 2010 @@ -1029,4 +1029,34 @@ public class DescriptionBuilderComposite return sQNameToPC.get(serviceQName); } + + /** + * Static utility method that, given a sparse composite, returns the SERVICE_REF_NAME value from the property + * on that sparse composite or null if the property was not specified. + * @param sparseComposite The sparse composite instance to get the SERVICE_REF_NAME parameter from + * @return A String containing the Service Ref Name or null if the parameter was not found. + */ + public static String getServiceRefName(DescriptionBuilderComposite sparseComposite) { + String serviceRefName = null; + if (sparseComposite != null) { + serviceRefName = (String) sparseComposite.getProperties().get(MDQConstants.SERVICE_REF_NAME); + } + return serviceRefName; + } + + /** + * For the current composite, return the serivce ref name from the sparse composite associted with the service + * delegate key. + * @param serviceDelegateKey The instance of the service delegate associated with the sparse composite from which + * the service ref name is to be retrieved. + * @return The service ref name associated with the service delegate key or null if one was not found. + */ + public String getServiceRefName(Object serviceDelegateKey) { + String serviceRefName = null; + if (serviceDelegateKey != null) { + serviceRefName = getServiceRefName(getSparseComposite(serviceDelegateKey)); + } + return serviceRefName; + } + } Modified: axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/MDQConstants.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/MDQConstants.java?rev=942898&r1=942897&r2=942898&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/MDQConstants.java (original) +++ axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/builder/MDQConstants.java Mon May 10 20:51:22 2010 @@ -71,8 +71,15 @@ public class MDQConstants { * Annotation: The list of WebServiceFeatures expressed as the corresponding Annotation related to that Port */ public static final String SEI_FEATURES_MAP = "org.apache.axis2.jaxws.description.builder.SEI_FEATURES_MAP"; + public static final String BINDING_PROPS_MAP = "org.apache.axis2.jaxws.description.builder.BINDING_PROPS_MAP"; + /** + * Property indicating a Service Reference name. This can be used to differentiate between two occurences + * of the same WSDL Service, for example to attach different policy configurations to each one.f + */ + public static final String SERVICE_REF_NAME = "org.apache.axis2.jaxws.description.builder.SERVICE_REF_NAME"; + //Represent SOAP/JMS Bindings //REVIEW: SOAP-JMS may be using the same NS for SOAP11 and SOAP12, // if so we could remove some duplicate values below Modified: axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImpl.java?rev=942898&r1=942897&r2=942898&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImpl.java (original) +++ axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImpl.java Mon May 10 20:51:22 2010 @@ -91,7 +91,8 @@ public class DescriptionFactoryImpl { Object sparseCompositeKey) { ConfigurationContext configContext = DescriptionFactory.createClientConfigurationFactory() .getClientConfigurationContext(); - DescriptionKey key = new DescriptionKey(serviceQName, wsdlURL, serviceClass, configContext); + DescriptionKey key = new DescriptionKey(serviceQName, wsdlURL, serviceClass, configContext, + DescriptionBuilderComposite.getServiceRefName(sparseComposite)); if (log.isDebugEnabled()) { log.debug("Cache Map = " + cache.toString()); if (key != null) Modified: axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java?rev=942898&r1=942897&r2=942898&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java (original) +++ axis/axis2/java/core/trunk/modules/metadata/src/org/apache/axis2/jaxws/description/impl/EndpointDescriptionImpl.java Mon May 10 20:51:22 2010 @@ -272,7 +272,7 @@ public class EndpointDescriptionImpl throw ExceptionFactory.makeWebServiceException(msg); } - setupAxisService(); + setupAxisService(sparseCompositeKey); addToAxisService(); setupReleaseResources(getServiceDescription().getAxisConfigContext()); @@ -767,7 +767,7 @@ public class EndpointDescriptionImpl return; } - private void setupAxisService() { + private void setupAxisService(Object sparseCompositeKey) { // Build up the AxisService. Note that if this is a dynamic port, then we don't use the // WSDL to build up the AxisService since the port added to the Service by the client is not // one that will be present in the WSDL. A null class passed in as the SEI indicates this @@ -816,17 +816,44 @@ public class EndpointDescriptionImpl " on AxisService: " + axisService + "@" + axisService.hashCode()); } seiClassNameParam.setValue(seiClassName); - + + // If a ServiceRef Name was set on the sparse composite for the service, then store that + Parameter serviceRefNameParam = getServiceRefNameParam(sparseCompositeKey); + try { axisService.addParameter(serviceNameParameter); axisService.addParameter(portParameter); axisService.addParameter(serviceClassNameParam); axisService.addParameter(seiClassNameParam); + if (serviceRefNameParam != null) { + axisService.addParameter(serviceRefNameParam); + } } catch (AxisFault e) { throw ExceptionFactory.makeWebServiceException(Messages.getMessage("setupAxisServiceErr2"),e); } } + /** + * Return a Parameter instance for ServiceRefName if that name was specified on the sparse composite when the Service was created. + * @param sparseCompositeKey identifies the instance of the service (i.e. Service Delegate) + * @return A Parameter containing the ServiceRefName or null if one was not specified. + */ + private Parameter getServiceRefNameParam(Object sparseCompositeKey) { + Parameter serviceRefNameParam = null; + + // The ServiceRefName, if specified, is set on the sparse composite associated with the service. + String serviceRefName = getServiceDescriptionImpl().getDescriptionBuilderComposite().getServiceRefName(sparseCompositeKey); + if (!DescriptionUtils.isEmpty(serviceRefName)) { + if (log.isDebugEnabled()) { + log.debug("Setting service ref name: " + serviceRefName + + " on AxisService: " + axisService + "@" + axisService.hashCode()); + } + serviceRefNameParam = new Parameter(); + serviceRefNameParam.setName(MDQConstants.SERVICE_REF_NAME); + serviceRefNameParam.setValue(serviceRefName); + } + return serviceRefNameParam; + } /* * This setups and builds the AxisService using only the DescriptionBuilderCompositeList