You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2008/02/25 20:09:05 UTC
svn commit: r630959 [2/4] - in /webservices/axis2/trunk/java/modules: jaxws/
jaxws/test-resources/catalog/ jaxws/test-resources/catalog/dir1/
jaxws/test-resources/catalog/dir2/ jaxws/test-resources/catalog/dir3/
jaxws/test-resources/catalog/fail/ jaxws...
Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataTest.java?rev=630959&r1=630958&r2=630959&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataTest.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/spi/ClientMetadataTest.java Mon Feb 25 11:09:01 2008
@@ -1,980 +1,1111 @@
-/*
- * 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.context.ConfigurationContext;
-import org.apache.axis2.jaxws.ClientConfigurationFactory;
-import org.apache.axis2.jaxws.description.DescriptionTestUtils2;
-import org.apache.axis2.jaxws.description.ServiceDescription;
-import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
-import org.apache.axis2.jaxws.description.builder.WebServiceClientAnnot;
-import org.apache.axis2.jaxws.description.impl.DescriptionFactoryImpl;
-import org.apache.axis2.jaxws.spi.ServiceDelegate;
-import org.apache.axis2.metadata.registry.MetadataFactoryRegistry;
-
-import javax.xml.namespace.QName;
-import javax.xml.ws.Service;
-import javax.xml.ws.WebServiceClient;
-import javax.xml.ws.WebServiceException;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Iterator;
-
-import junit.framework.TestCase;
-
-/**
- * Test creation of a generic Service and generated Service with and without additional
- * metadata specified during the creation of the service. Additional metadata could be supplied
- * by a runtime in order to support JSR-109 deployment descriptors or injection of WebServiceRef
- * annotations.
- */
-public class ClientMetadataTest extends TestCase {
- static final String namespaceURI = "http://description.jaxws.axis2.apache.org";
- static final String svcLocalPart = "svcLocalPart";
-
- static final String originalWsdl = "ClientMetadata.wsdl";
- static final String overridenWsdl = "ClientMetadataOverriden.wsdl";
- static final String otherWsdl = "ClientMetadataOther.wsdl";
-
- static final String originalWsdl_portLocalPart = "portLocalPart";
- static final String overridenWsdl_portLocalPart = "portLocalPartOverriden";
- static final String otherWsdl_portLocalPart = "portLocalPartOther";
-
- /**
- * Test Service.create(QName) with no composite specified
- */
- public void test1ArgServiceWithoutComposite() {
- QName serviceQName = new QName(namespaceURI, svcLocalPart);
- Service service = Service.create(serviceQName);
- assertNotNull(service);
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertNotNull(dbcInServiceDesc);
- assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
- // Since this is a generic Service with no overrides, there will be no WebServiceClient annotation
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNull(wsClient);
-
- // No WSDL should have been used, so no Ports should be found
- assertTrue("Wrong WSDL used", validatePort(service, null));
- }
-
- /**
- * Service.create(URL, QName) with no composite specified
- */
- public void test2ArgServiceWithoutComposite() {
- QName serviceQName = new QName(namespaceURI, svcLocalPart);
- URL wsdlUrl = getWsdlURL(otherWsdl);
- Service service = Service.create(wsdlUrl, serviceQName);
- assertNotNull(service);
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertNotNull(dbcInServiceDesc);
- assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
- // Since this is a generic Service with no overrides, there will be no WebServiceClient annotation
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNull(wsClient);
-
- // WSDL was specified on the create, so make sure the right one was used by checking the ports
- assertTrue("Wrong WSDL used", validatePort(service, otherWsdl_portLocalPart));
- }
-
- /**
- * Service.create(QName) with a composite specified but no override in the composite
- */
- public void test1ArgServiceWithComposite() {
- QName serviceQName = new QName(namespaceURI, svcLocalPart);
- DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
- assertNull(ServiceDelegate.getServiceMetadata());
- // Use the proprietary SPI to create a service with additional metadata specified
- ServiceDelegate.setServiceMetadata(composite);
-
- Service service = Service.create(serviceQName);
- assertNotNull(service);
-
- // Verify that the composite has been reset so that it would not affect the next Service
- assertNull(ServiceDelegate.getServiceMetadata());
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
- assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
- // Since this is a generic Service with no overrides, there will be no WebServiceClient annotation
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNull(wsClient);
-
- // No WSDL should have been used, so no Ports should be found
- assertTrue("Wrong WSDL used", validatePort(service, null));
-
- }
-
- /**
- * Service.create(URL, QName) with a composite specified but no override in the composite
- */
- public void test2ArgServiceWithComposite() {
- QName serviceQName = new QName(namespaceURI, svcLocalPart);
-
- DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
- URL wsdlUrl = getWsdlURL(otherWsdl);
- // Use the proprietary SPI to create a service with additional metadata specified
- ServiceDelegate.setServiceMetadata(composite);
- Service service = Service.create(wsdlUrl, serviceQName);
- assertNotNull(service);
- // Verify that the composite has been reset so that it would not affect the next Service
- assertNull(ServiceDelegate.getServiceMetadata());
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
- assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
- // Since this is a generic Service with no overrides, there will be no WebServiceClient annotation
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNull(wsClient);
-
- // WSDL was specified on the create, so make sure the right one was used by checking the ports
- assertTrue("Wrong WSDL used", validatePort(service, otherWsdl_portLocalPart));
- }
-
- /**
- * Generated service constructor() with no composite specified
- */
- public void testNoArgGeneratedService() {
- Service service = new ClientMetadataGeneratedService();
- assertNotNull(service);
-
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
- // There is WebServiceClient on the generated Service
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNotNull(wsClient);
- assertEquals(originalWsdl, wsClient.wsdlLocation());
- assertEquals("originalTNS", wsClient.targetNamespace());
- assertEquals("", wsClient.name());
-
- // WSDL not specified, so generated Service should use the annotation value
- assertTrue("Wrong WSDL Used", validatePort(service, originalWsdl_portLocalPart));
- }
-
- /**
- * Generated service constructor(URL, QName) with no composite specified
- */
- public void test2ArgGeneratedService() {
-
- Service service = new ClientMetadataGeneratedService(getWsdlURL(otherWsdl),
- new QName(namespaceURI, svcLocalPart));
- assertNotNull(service);
-
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
- // There is WebServiceClient on the generated Service
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNotNull(wsClient);
-
- assertEquals(originalWsdl, wsClient.wsdlLocation());
- assertEquals("originalTNS", wsClient.targetNamespace());
- assertEquals("", wsClient.name());
-
- // WSDL was specified on the generated Service constructor,
- // so make sure the right one was used by checking the ports
- assertTrue("Wrong WSDL used", validatePort(service, otherWsdl_portLocalPart));
- }
-
- /**
- * Generated service constructor() with composite specified but no override in composite
- */
- public void testNoArgGeneratedServiceWithComposite() {
- DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
- ServiceDelegate.setServiceMetadata(composite);
-
- Service service = new ClientMetadataGeneratedService();
- assertNotNull(service);
- assertNull(ServiceDelegate.getServiceMetadata());
-
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
- assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
- // There is WebServiceClient on the generated Service and it wasn't overriden in the composite
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNotNull(wsClient);
- assertEquals(originalWsdl, wsClient.wsdlLocation());
- assertEquals("originalTNS", wsClient.targetNamespace());
- assertEquals("", wsClient.name());
-
- // No WSDL override specified in the composite, so generated Service should use the annotation value
- assertTrue("Wrong WSDL Used", validatePort(service, originalWsdl_portLocalPart));
-
- }
-
- /**
- * Generated service constructor(URL, QName) with composite specified but no override in composite
- */
- public void test2ArgGeneratedServiceWithComposite() {
- DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
- ServiceDelegate.setServiceMetadata(composite);
-
- Service service = new ClientMetadataGeneratedService(getWsdlURL(otherWsdl),
- new QName(namespaceURI, svcLocalPart));
- assertNotNull(service);
- assertNull(ServiceDelegate.getServiceMetadata());
-
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
- assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
- // There is WebServiceClient on the generated Service and it wasn't overriden in the composite
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNotNull(wsClient);
- assertEquals(originalWsdl, wsClient.wsdlLocation());
- assertEquals("originalTNS", wsClient.targetNamespace());
- assertEquals("", wsClient.name());
-
- // WSDL was specified on the generated Service constructor, and none in the composite
- // so should get the WSDL specified on the constructor
- assertTrue("Wrong WSDL used", validatePort(service, otherWsdl_portLocalPart));
- }
-
- /**
- * Service.create(QName) with a composite that specifies a wsdlLocation override
- */
- public void test1ArgServiceOverrideWsdlLocation() {
- QName serviceQName = new QName(namespaceURI, svcLocalPart);
- DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
- WebServiceClientAnnot wsClientAnno =
- WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, null, getWsdlLocation(overridenWsdl));
- composite.setWebServiceClientAnnot(wsClientAnno);
- // Use the proprietary SPI to create a service with additional metadata specified
- ServiceDelegate.setServiceMetadata(composite);
-
- Service service = Service.create(serviceQName);
-
- assertNotNull(service);
- // Verify that the composite has been reset so that it would not affect the next Service
- assertNull(ServiceDelegate.getServiceMetadata());
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
- assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
- // This is a generic Service with overrides, there will be WebServiceClient annotation
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNull(wsClient);
- wsClient = dbcInServiceDesc.getWebServiceClientAnnot(serviceDelegate);
- assertNotNull(wsClient);
- assertEquals(getWsdlLocation(overridenWsdl), wsClient.wsdlLocation());
- assertNull(wsClient.targetNamespace());
- assertNull(wsClient.name());
-
- // WSDL override specified in the composite
- assertTrue("Wrong WSDL used", validatePort(service, overridenWsdl_portLocalPart));
- }
-
- /**
- * Service.create(QName) with a composite that overrides the TargetNamespace. Most of the
- * other tests override the WSDL Location since that is what a JSR-109 DD can specify. This
- * test makes sure other values can be overridden as well
- */
- public void test1ArgServiceOverrideTNS() {
- QName serviceQName = new QName(namespaceURI, svcLocalPart);
- DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
- WebServiceClientAnnot wsClientAnno =
- WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, "overrideTNS", null);
- composite.setWebServiceClientAnnot(wsClientAnno);
- // Use the proprietary SPI to create a service with additional metadata specified
- ServiceDelegate.setServiceMetadata(composite);
-
- Service service = Service.create(serviceQName);
-
- assertNotNull(service);
- // Verify that the composite has been reset so that it would not affect the next Service
- assertNull(ServiceDelegate.getServiceMetadata());
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
- assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
- // The target namespace for the key should be overriden; it should not be overriden for
- // no key.
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNull(wsClient);
-
- WebServiceClient wsClientKeyed = dbcInServiceDesc.getWebServiceClientAnnot(serviceDelegate);
- assertNotNull(wsClientKeyed);
- assertNull(wsClientKeyed.wsdlLocation());
- assertEquals("overrideTNS", wsClientKeyed.targetNamespace());
- assertNull(wsClientKeyed.name());
-
- }
-
- /**
- * Service.create(URL, QName) with a composite that specifies a wsdlLocation override
- */
- public void test2ArgServiceOverrideWsdlLocation() {
- QName serviceQName = new QName(namespaceURI, svcLocalPart);
- URL wsdlUrl = getWsdlURL(otherWsdl);
- DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
- WebServiceClientAnnot wsClientAnno = WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, null, getWsdlLocation(overridenWsdl));
- composite.setWebServiceClientAnnot(wsClientAnno);
- // Use the proprietary SPI to create a service with additional metadata specified
- ServiceDelegate.setServiceMetadata(composite);
- Service service = Service.create(wsdlUrl, serviceQName);
-
- assertNotNull(service);
- // Verify that the composite has been reset so that it would not affect the next Service
- assertNull(ServiceDelegate.getServiceMetadata());
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
- assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
- // Since this is a generic Service with overrides, there will be a WebServiceClient annotation
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNull(wsClient);
- wsClient = dbcInServiceDesc.getWebServiceClientAnnot(serviceDelegate);
- assertNotNull(wsClient);
- assertEquals(getWsdlLocation(overridenWsdl), wsClient.wsdlLocation());
- assertNull(wsClient.targetNamespace());
- assertNull(wsClient.name());
-
- // WSDL override specified in the composite
- assertTrue("Wrong WSDL used", validatePort(service, overridenWsdl_portLocalPart));
-
- }
-
- /**
- * Generated service constructor() with a composite that specifies a wsdlLocation override
- */
- public void testNoArgGeneratedServiceOverrideWsdlLocation() {
- DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
- WebServiceClientAnnot wsClientAnno = WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, null, getWsdlLocation(overridenWsdl));
- composite.setWebServiceClientAnnot(wsClientAnno);
- ServiceDelegate.setServiceMetadata(composite);
-
- Service service = new ClientMetadataGeneratedService();
-
- assertNotNull(service);
- assertNull(ServiceDelegate.getServiceMetadata());
-
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
- assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
- // There is WebServiceClient on the generated Service and it was overriden in the composite
- // for this key, however the keyless composite should not have any overrides.
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNotNull(wsClient);
- assertEquals(originalWsdl, wsClient.wsdlLocation());
- assertEquals("originalTNS", wsClient.targetNamespace());
- assertEquals("", wsClient.name());
-
- WebServiceClient wsClientKeyed = dbcInServiceDesc.getWebServiceClientAnnot(serviceDelegate);
- assertNotSame(wsClient, wsClientKeyed);
- assertEquals(getWsdlLocation(overridenWsdl), wsClientKeyed.wsdlLocation());
- assertEquals("originalTNS", wsClientKeyed.targetNamespace());
- assertEquals("", wsClientKeyed.name());
-
- // WSDL override specified in the composite
- assertTrue("Wrong WSDL used", validatePort(service, overridenWsdl_portLocalPart));
- }
-
- /**
- * Generated service constructor(URL, QName) with a composite that specifies a wsdlLocation override
- */
- public void test2ArgGeneratedServiceOverrideWsdlLocation() {
- DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
- WebServiceClientAnnot wsClientAnno = WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, null, getWsdlLocation(overridenWsdl));
- composite.setWebServiceClientAnnot(wsClientAnno);
- ServiceDelegate.setServiceMetadata(composite);
-
- Service service = new ClientMetadataGeneratedService(getWsdlURL(otherWsdl),
- new QName(namespaceURI, svcLocalPart));
-
- assertNotNull(service);
- assertNull(ServiceDelegate.getServiceMetadata());
-
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
- assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
- // There is WebServiceClient on the generated Service and it was overriden in the composite
- // for this key, however the keyless composite should not have any overrides.
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNotNull(wsClient);
- assertEquals(originalWsdl, wsClient.wsdlLocation());
- assertEquals("originalTNS", wsClient.targetNamespace());
- assertEquals("", wsClient.name());
-
- WebServiceClient wsClientKeyed = dbcInServiceDesc.getWebServiceClientAnnot(serviceDelegate);
- assertNotSame(wsClient, wsClientKeyed);
-
- assertEquals(getWsdlLocation(overridenWsdl), wsClientKeyed.wsdlLocation());
- assertEquals("originalTNS", wsClientKeyed.targetNamespace());
- assertEquals("", wsClientKeyed.name());
-
- // WSDL override specified in the composite
- assertTrue("Wrong WSDL used", validatePort(service, overridenWsdl_portLocalPart));
- }
-
- /**
- * Generated service constructor(URL, QName) with a composite that specifies a
- * target Namespace override. Most of the other tests are based on wsdlLocation since
- * that is what JSR-109 DDs override. This test verifies that other members can also
- * be override.
- */
- public void test2ArgGeneratedServiceOverrideTNS() {
- DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
- WebServiceClientAnnot wsClientAnno = WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, "overrideTNS", getWsdlLocation(overridenWsdl));
- composite.setWebServiceClientAnnot(wsClientAnno);
- ServiceDelegate.setServiceMetadata(composite);
-
- Service service = new ClientMetadataGeneratedService(getWsdlURL(otherWsdl),
- new QName(namespaceURI, svcLocalPart));
-
- assertNotNull(service);
- assertNull(ServiceDelegate.getServiceMetadata());
-
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
- assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
- // There is WebServiceClient on the generated Service and it was overriden in the composite
- // for this key, however the keyless composite should not have any overrides.
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNotNull(wsClient);
- assertEquals(originalWsdl, wsClient.wsdlLocation());
- assertEquals("originalTNS", wsClient.targetNamespace());
- assertEquals("", wsClient.name());
-
- WebServiceClient wsClientKeyed = dbcInServiceDesc.getWebServiceClientAnnot(serviceDelegate);
- assertNotSame(wsClient, wsClientKeyed);
-
- assertEquals(getWsdlLocation(overridenWsdl), wsClientKeyed.wsdlLocation());
- assertEquals("overrideTNS", wsClientKeyed.targetNamespace());
- assertEquals("", wsClientKeyed.name());
-
- // WSDL override specified in the composite
- assertTrue("Wrong WSDL used", validatePort(service, overridenWsdl_portLocalPart));
- }
-
- /**
- * Generated service constructor(URL, QName) with a composite that specifies a wsdlLocation override
- * where the override is a fully specifed URL to a file.
- */
- public void test2ArgGeneratedServiceOverrideWsdlLocationWithProtocol() {
- DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
- // If the wsdlLocation in the composite specifies a protocol (like file: or http:) then
- // it should be used as-is. Otherwise (as shown by the other tests), it is treated as
- // a path on the local filesystem.
- String wsdlLocation = getWsdlLocation(overridenWsdl);
- // This check is necessary because Unix/Linux file paths begin
- // with a '/'. When adding the prefix 'jar:file:/' we may end
- // up with '//' after the 'file:' part. This causes the URL
- // object to treat this like a remote resource
- if(wsdlLocation.indexOf("/") == 0) {
- wsdlLocation = wsdlLocation.substring(1, wsdlLocation.length());
- }
-
- String fullWsdlLocation = "file:/" + wsdlLocation;
- WebServiceClientAnnot wsClientAnno = WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, null, fullWsdlLocation);
- composite.setWebServiceClientAnnot(wsClientAnno);
- ServiceDelegate.setServiceMetadata(composite);
-
- Service service = new ClientMetadataGeneratedService(getWsdlURL(otherWsdl),
- new QName(namespaceURI, svcLocalPart));
-
- assertNotNull(service);
- assertNull(ServiceDelegate.getServiceMetadata());
-
- ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
- assertNotNull(serviceDelegate);
- ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
- assertNotNull(serviceDesc);
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
- assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
- assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
- // There is WebServiceClient on the generated Service and it was overriden in the composite
- // for the key. The annotation with no key should be unchanged.
- WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
- assertNotNull(wsClient);
- assertEquals(originalWsdl, wsClient.wsdlLocation());
- assertEquals("originalTNS", wsClient.targetNamespace());
- assertEquals("", wsClient.name());
-
- WebServiceClient wsClientKeyed = dbcInServiceDesc.getWebServiceClientAnnot(serviceDelegate);
- assertNotSame(wsClient, wsClientKeyed);
- assertEquals(fullWsdlLocation, wsClientKeyed.wsdlLocation());
- assertEquals("originalTNS", wsClientKeyed.targetNamespace());
- assertEquals("", wsClientKeyed.name());
-
- // WSDL override specified in the composite
- assertTrue("Wrong WSDL used", validatePort(service, overridenWsdl_portLocalPart));
- }
-
- /**
- * Test override WSDL file that is full specified
- */
- public void testInvalidWsdlLocationOverrideWithProtocol() {
- DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
- String wsdlLocation = getWsdlLocation("InvalidFileName.wsdl");
- // This check is necessary because Unix/Linux file paths begin
- // with a '/'. When adding the prefix 'jar:file:/' we may end
- // up with '//' after the 'file:' part. This causes the URL
- // object to treat this like a remote resource
- if(wsdlLocation.indexOf("/") == 0) {
- wsdlLocation = wsdlLocation.substring(1, wsdlLocation.length());
- }
-
- String fullWsdlLocation = "http:/" + wsdlLocation;
-
- WebServiceClientAnnot wsClientAnno = WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, null, fullWsdlLocation);
- composite.setWebServiceClientAnnot(wsClientAnno);
- ServiceDelegate.setServiceMetadata(composite);
-
- try {
- Service service = new ClientMetadataGeneratedService();
- fail("Should have caught exception for invalid WSDL file name in override");
- } catch (WebServiceException ex) {
- // Expected path
- }
- }
-
- /**
- * The overide WSDL file doesn't exist; should catch an error
- */
- public void testInvalidWsdlLocationOverride() {
- DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
- WebServiceClientAnnot wsClientAnno = WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, null, getWsdlLocation("InvalidFileName.wsdl"));
- composite.setWebServiceClientAnnot(wsClientAnno);
- ServiceDelegate.setServiceMetadata(composite);
-
- try {
- Service service = new ClientMetadataGeneratedService();
- fail("Should have caught exception for invalid WSDL file name in override");
- } catch (WebServiceException ex) {
- // Expected path
- }
- }
-
- /**
- * Create multiple instances of the same service. Validate that the service delegates are
- * unique and the ServiceDescription is shared. Note we have to install a special factory
- * so that the ServiceDescriptions are cached; the default factory will not cause them to be
- * cached.
- */
- public void testMultipleServices() {
- try {
- installCachingFactory();
- QName serviceQName = new QName(namespaceURI, svcLocalPart);
- QName portQN = new QName(namespaceURI, otherWsdl_portLocalPart);
- URL wsdlUrl = ClientMetadataTest.getWsdlURL(otherWsdl);
-
- // Create the first service
- Service service1 = Service.create(wsdlUrl, serviceQName);
- ServiceDelegate serviceDelegate1 = DescriptionTestUtils2.getServiceDelegate(service1);
- assertNull(ServiceDelegate.getServiceMetadata());
- ServiceDescription serviceDesc1 = serviceDelegate1.getServiceDescription();
- validatePort(service1, otherWsdl_portLocalPart);
-
- // Create the second service
- Service service2 = Service.create(wsdlUrl, serviceQName);
- ServiceDelegate serviceDelegate2 = DescriptionTestUtils2.getServiceDelegate(service2);
- assertNull(ServiceDelegate.getServiceMetadata());
- ServiceDescription serviceDesc2 = serviceDelegate2.getServiceDescription();
- validatePort(service2, otherWsdl_portLocalPart);
-
- assertNotSame(serviceDelegate1, serviceDelegate2);
- // Since we installed a caching factory, the service descriptions WILL be cached.
- // Without that factory, they would not have been cached. The reason is that the
- // AxisConfiguration instance is part of the key. The default factory in this
- // environment always returns a new instance. The test factory does not.
- assertSame(serviceDesc1, serviceDesc2);
- } finally {
- restoreOriginalFactory();
- }
-
- // Sanity check that the factory WAS restored. Do the same thing as above, but this time
- // the service descs should NOT be the same since they weren't cached.
- QName serviceQName = new QName(namespaceURI, svcLocalPart);
- QName portQN = new QName(namespaceURI, otherWsdl_portLocalPart);
- URL wsdlUrl = ClientMetadataTest.getWsdlURL(otherWsdl);
-
- // Create the first service
- Service service1 = Service.create(wsdlUrl, serviceQName);
- ServiceDelegate serviceDelegate1 = DescriptionTestUtils2.getServiceDelegate(service1);
- assertNull(ServiceDelegate.getServiceMetadata());
- ServiceDescription serviceDesc1 = serviceDelegate1.getServiceDescription();
- validatePort(service1, otherWsdl_portLocalPart);
-
- // Create the second service
- Service service2 = Service.create(wsdlUrl, serviceQName);
- ServiceDelegate serviceDelegate2 = DescriptionTestUtils2.getServiceDelegate(service2);
- assertNull(ServiceDelegate.getServiceMetadata());
- ServiceDescription serviceDesc2 = serviceDelegate2.getServiceDescription();
- validatePort(service2, otherWsdl_portLocalPart);
-
- assertNotSame(serviceDelegate1, serviceDelegate2);
- assertNotSame("Client Configuration factory NOT restored; subsequent tests may be affected!", serviceDesc1, serviceDesc2);
- }
-
- /**
- * Create two services such that the ServiceDescriptions should be cached and shared.
- * Create the first without a composite, the second with a composite, then validate the second
- * service's composite. Note that we have to use a special factory so that the service
- * descriptions are cached.
- */
- public void testMultipleServicesMixedComposite() {
- try {
- installCachingFactory();
- QName serviceQName = new QName(namespaceURI, svcLocalPart);
- URL wsdlUrl = ClientMetadataTest.getWsdlURL(otherWsdl);
-
- // Create the first service
- Service service1 = Service.create(wsdlUrl, serviceQName);
- ServiceDelegate serviceDelegate1 = DescriptionTestUtils2.getServiceDelegate(service1);
- assertNull(ServiceDelegate.getServiceMetadata());
- ServiceDescription serviceDesc1 = serviceDelegate1.getServiceDescription();
- validatePort(service1, otherWsdl_portLocalPart);
-
- // Create the second service specifiying a sparse composite
- DescriptionBuilderComposite sparseComposite = new DescriptionBuilderComposite();
- ServiceDelegate.setServiceMetadata(sparseComposite);
- Service service2 = Service.create(wsdlUrl, serviceQName);
- ServiceDelegate serviceDelegate2 = DescriptionTestUtils2.getServiceDelegate(service2);
- assertNull(ServiceDelegate.getServiceMetadata());
- ServiceDescription serviceDesc2 = serviceDelegate2.getServiceDescription();
- validatePort(service2, otherWsdl_portLocalPart);
-
- assertNotSame(serviceDelegate1, serviceDelegate2);
- // Since we installed a caching factory, the service descriptions WILL be cached.
- // Without that factory, they would not have been cached. The reason is that the
- // AxisConfiguration instance is part of the key. The default factory in this
- // environment always returns a new instance. The test factory does not.
- assertSame(serviceDesc1, serviceDesc2);
-
- // There should not be a sparse composite for the first service delegate and there
- // should be one for the second service delegate
- assertNull(DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc2).getSparseComposite(serviceDelegate1));
- assertSame(sparseComposite, DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc2).getSparseComposite(serviceDelegate2));
- } finally {
- restoreOriginalFactory();
- }
-
- }
-
- /**
- * Create two services such that the ServiceDescriptions should be cached and shared.
- * Create the first with a composite, the second with a composite, then validate both
- * composites. Note that we have to use a special factory so that the service
- * descriptions are cached.
- */
- public void testMultipleServicesMultipleComposites() {
- try {
- installCachingFactory();
- QName serviceQName = new QName(namespaceURI, svcLocalPart);
- URL wsdlUrl = ClientMetadataTest.getWsdlURL(otherWsdl);
-
- // Create the first service
- DescriptionBuilderComposite sparseComposite1 = new DescriptionBuilderComposite();
- ServiceDelegate.setServiceMetadata(sparseComposite1);
- Service service1 = Service.create(wsdlUrl, serviceQName);
- ServiceDelegate serviceDelegate1 = DescriptionTestUtils2.getServiceDelegate(service1);
- assertNull(ServiceDelegate.getServiceMetadata());
- ServiceDescription serviceDesc1 = serviceDelegate1.getServiceDescription();
- validatePort(service1, otherWsdl_portLocalPart);
-
- // Create the second service specifiying a sparse composite
- DescriptionBuilderComposite sparseComposite2 = new DescriptionBuilderComposite();
- ServiceDelegate.setServiceMetadata(sparseComposite2);
- Service service2 = Service.create(wsdlUrl, serviceQName);
- ServiceDelegate serviceDelegate2 = DescriptionTestUtils2.getServiceDelegate(service2);
- assertNull(ServiceDelegate.getServiceMetadata());
- ServiceDescription serviceDesc2 = serviceDelegate2.getServiceDescription();
- validatePort(service2, otherWsdl_portLocalPart);
-
- assertNotSame(serviceDelegate1, serviceDelegate2);
- // Since we installed a caching factory, the service descriptions WILL be cached.
- // Without that factory, they would not have been cached. The reason is that the
- // AxisConfiguration instance is part of the key. The default factory in this
- // environment always returns a new instance. The test factory does not.
- assertSame(serviceDesc1, serviceDesc2);
-
- // There should not be a sparse composite for the first service delegate and there
- // should be one for the second service delegate
- assertSame(sparseComposite1, DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc2).getSparseComposite(serviceDelegate1));
- assertSame(sparseComposite2, DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc2).getSparseComposite(serviceDelegate2));
- } finally {
- restoreOriginalFactory();
- }
- }
-
- /**
- * Create two generated services such that the ServiceDescriptions should be cached and shared.
- * Create the first with a composite, the second with a composite, then validate both
- * composites. Note that we have to use a special factory so that the service
- * descriptions are cached.
- */
- public void testMultipleGeneratedServiceWithMultipleComposite() {
- try {
- installCachingFactory();
-
- // Create the first service with a sparse composite
- DescriptionBuilderComposite sparseComposite1 = new DescriptionBuilderComposite();
- ServiceDelegate.setServiceMetadata(sparseComposite1);
- Service service1 = new ClientMetadataGeneratedService(getWsdlURL(otherWsdl),
- new QName(namespaceURI, svcLocalPart));
- assertNotNull(service1);
- assertNull(ServiceDelegate.getServiceMetadata());
-
- // Create the second service with a sparse composite
- DescriptionBuilderComposite sparseComposite2 = new DescriptionBuilderComposite();
- ServiceDelegate.setServiceMetadata(sparseComposite2);
- Service service2 = new ClientMetadataGeneratedService(getWsdlURL(otherWsdl),
- new QName(namespaceURI, svcLocalPart));
- assertNotNull(service2);
- assertNull(ServiceDelegate.getServiceMetadata());
-
- // Verifiy the service delegates are different and the service descriptions are the same
- // since we installed a caching factory above.
- ServiceDelegate serviceDelegate1 = DescriptionTestUtils2.getServiceDelegate(service1);
- assertNotNull(serviceDelegate1);
- ServiceDescription serviceDesc1 = serviceDelegate1.getServiceDescription();
- assertNotNull(serviceDesc1);
-
- ServiceDelegate serviceDelegate2 = DescriptionTestUtils2.getServiceDelegate(service2);
- assertNotNull(serviceDelegate2);
- ServiceDescription serviceDesc2 = serviceDelegate2.getServiceDescription();
- assertNotNull(serviceDesc2);
-
- assertNotSame(serviceDelegate1, serviceDelegate2);
- assertSame(serviceDesc1, serviceDesc2);
-
- // There should be a sparse composite for the first service delegate and
- // one for the second service delegate
- assertSame(sparseComposite1,
- DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc2).getSparseComposite(serviceDelegate1));
- assertSame(sparseComposite2, DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc2).getSparseComposite(serviceDelegate2));
-
-
- DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc1);
- assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
-
- // WSDL was specified on the generated Service constructor, and none in the composite
- // so should get the WSDL specified on the constructor
- assertTrue("Wrong WSDL used", validatePort(service1, otherWsdl_portLocalPart));
- assertTrue("Wrong WSDL used", validatePort(service2, otherWsdl_portLocalPart));
-
-
-
-
- } finally {
- restoreOriginalFactory();
- }
-
- }
-
- // =============================================================================================
- // Utility methods
- // =============================================================================================
-
- /**
- * Prepends the base directory and the path where the test WSDL lives to a filename.
- * @param wsdlFileName
- * @return
- */
- static String getWsdlLocation(String wsdlFileName) {
- String wsdlLocation = null;
- String baseDir = System.getProperty("basedir",".");
- wsdlLocation = baseDir + "/test-resources/wsdl/" + wsdlFileName;
- return wsdlLocation;
- }
-
- /**
- * Given a simple file name (with no base dictory or path), returns a URL to the WSDL file
- * with the base directory and path prepended.
- *
- * @param wsdlFileName
- * @return
- */
- static URL getWsdlURL(String wsdlFileName) {
- URL url = null;
- String wsdlLocation = getWsdlLocation(wsdlFileName);
- try {
- File file = new File(wsdlLocation);
- url = file.toURL();
- } catch (MalformedURLException e) {
- e.printStackTrace();
- fail("Exception converting WSDL file to URL: " + e.toString());
- }
- return url;
- }
-
- /**
- * Validate that the Service contains the expected port. If the portLocalPart is null then
- * no ports are expected to exist under the service.
- * @param service The service to check for the specified port
- * @param portLocalPart If null means no ports are expected; otherwise the localname of the
- * single port expected under the service
- * @return
- */
- static boolean validatePort(Service service, String portLocalPart) {
- boolean isValid = false;
-
- if (service == null) {
- return false;
- }
-
- // Each service in the WSDLs for this test have a single port
- boolean portNameValid = false;
- int expectedNumberOfPorts = 1;
- int numberOfPorts = 0;
-
- Iterator<QName> portIterator = service.getPorts();
- while (portIterator.hasNext()) {
- numberOfPorts++;
- QName checkPort = portIterator.next();
- // If we haven't found a match for the port yet, see if this one matches
- if (!portNameValid) {
- portNameValid = portLocalPart.equals(checkPort.getLocalPart());
- }
- }
- if (portLocalPart == null && numberOfPorts == 0) {
- // No ports expected (i.e. no WSDL should have been used)
- isValid = true;
- }
- else if ((expectedNumberOfPorts == numberOfPorts) && portNameValid) {
- isValid = true;
- }
- else {
- isValid = false;
- }
- return isValid;
- }
-
- /**
- * Methods to install a client configuration factory that will return the same AxisConfiguration
- * each time. This is used so that the ServiceDescriptions will be cached in the DescriptionFactory.
- *
- * IMPORTANT!!!
- * If you install a caching factory, you MUST restore the original factory before your test
- * exits, otherwise it will remain installed when subsequent tests run and cause REALLY STRANGE
- * failures. Use restoreOriginalFactory() INSIDE A finally() block to restore the factory.
- */
- static private ClientConfigurationFactory originalFactory = null;
- static void installCachingFactory() {
- // install caching factory
- if (originalFactory != null) {
- throw new UnsupportedOperationException("Attempt to install the caching factory when the original factory has already been overwritten");
- }
- originalFactory =
- (ClientConfigurationFactory)MetadataFactoryRegistry.getFactory(ClientConfigurationFactory.class);
- MetadataTestCachingClientContextFactory newFactory = new MetadataTestCachingClientContextFactory();
- MetadataFactoryRegistry.setFactory(ClientConfigurationFactory.class, newFactory);
- resetClientConfigFactory();
- }
- static void restoreOriginalFactory() {
- if (originalFactory == null) {
- throw new UnsupportedOperationException("Attempt to restore original factory to a null value");
- }
- MetadataFactoryRegistry.setFactory(ClientConfigurationFactory.class, originalFactory);
- resetClientConfigFactory();
- originalFactory = null;
- }
- static void resetClientConfigFactory() {
- Field field;
- try {
- field = DescriptionFactoryImpl.class.getDeclaredField("clientConfigFactory");
- field.setAccessible(true);
- field.set(null, null);
- } catch (Exception e) {
- throw new UnsupportedOperationException("Unable to reset client config factory; caught " + e);
- }
- }
-
-}
-
-@WebServiceClient(targetNamespace="originalTNS", wsdlLocation=ClientMetadataTest.originalWsdl)
-class ClientMetadataGeneratedService extends javax.xml.ws.Service {
- public ClientMetadataGeneratedService() {
- super(ClientMetadataTest.getWsdlURL(ClientMetadataTest.originalWsdl),
- new QName(ClientMetadataTest.namespaceURI, ClientMetadataTest.svcLocalPart));
- }
- public ClientMetadataGeneratedService(URL wsdlLocation, QName serviceName) {
- super(wsdlLocation, serviceName);
- }
-}
-
-
-class MetadataTestCachingClientContextFactory extends ClientConfigurationFactory {
- ConfigurationContext context;
-
- public ConfigurationContext getClientConfigurationContext() {
- if (context == null) {
- context = super.getClientConfigurationContext();
- }
- System.out.println("Test version of MetadataTestCachingClientContextFactory: " + context);
- return context;
- }
-
- public void reset() {
- context = null;
- }
-}
+/*
+ * 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.context.ConfigurationContext;
+import org.apache.axis2.jaxws.ClientConfigurationFactory;
+import org.apache.axis2.jaxws.catalog.impl.OASISCatalogManager;
+import org.apache.axis2.jaxws.description.DescriptionTestUtils2;
+import org.apache.axis2.jaxws.description.ServiceDescription;
+import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
+import org.apache.axis2.jaxws.description.builder.WebServiceClientAnnot;
+import org.apache.axis2.jaxws.description.impl.DescriptionFactoryImpl;
+import org.apache.axis2.jaxws.spi.ServiceDelegate;
+import org.apache.axis2.metadata.registry.MetadataFactoryRegistry;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebServiceClient;
+import javax.xml.ws.WebServiceException;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Iterator;
+
+import junit.framework.TestCase;
+
+/**
+ * Test creation of a generic Service and generated Service with and without additional
+ * metadata specified during the creation of the service. Additional metadata could be supplied
+ * by a runtime in order to support JSR-109 deployment descriptors or injection of WebServiceRef
+ * annotations.
+ */
+public class ClientMetadataTest extends TestCase {
+ static final String namespaceURI = "http://description.jaxws.axis2.apache.org";
+ static final String svcLocalPart = "svcLocalPart";
+
+ static final String originalWsdl = "ClientMetadata.wsdl";
+ static final String overridenWsdl = "ClientMetadataOverriden.wsdl";
+ static final String otherWsdl = "ClientMetadataOther.wsdl";
+
+ static final String originalWsdl_portLocalPart = "portLocalPart";
+ static final String overridenWsdl_portLocalPart = "portLocalPartOverriden";
+ static final String otherWsdl_portLocalPart = "portLocalPartOther";
+
+ static final String uniqueCatalog = "test-resources/unique-catalog.xml";
+
+ /**
+ * Test Service.create(QName) with no composite specified
+ */
+ public void test1ArgServiceWithoutComposite() {
+ QName serviceQName = new QName(namespaceURI, svcLocalPart);
+ Service service = Service.create(serviceQName);
+ assertNotNull(service);
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertNotNull(dbcInServiceDesc);
+ assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
+ // Since this is a generic Service with no overrides, there will be no WebServiceClient annotation
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNull(wsClient);
+
+ // No WSDL should have been used, so no Ports should be found
+ assertTrue("Wrong WSDL used", validatePort(service, null));
+ }
+
+ /**
+ * Service.create(URL, QName) with no composite specified
+ */
+ public void test2ArgServiceWithoutComposite() {
+ QName serviceQName = new QName(namespaceURI, svcLocalPart);
+ URL wsdlUrl = getWsdlURL(otherWsdl);
+ Service service = Service.create(wsdlUrl, serviceQName);
+ assertNotNull(service);
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertNotNull(dbcInServiceDesc);
+ assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
+ // Since this is a generic Service with no overrides, there will be no WebServiceClient annotation
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNull(wsClient);
+
+ // WSDL was specified on the create, so make sure the right one was used by checking the ports
+ assertTrue("Wrong WSDL used", validatePort(service, otherWsdl_portLocalPart));
+ }
+
+ /**
+ * Service.create(QName) with a composite specified but no override in the composite
+ */
+ public void test1ArgServiceWithComposite() {
+ QName serviceQName = new QName(namespaceURI, svcLocalPart);
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ assertNull(ServiceDelegate.getServiceMetadata());
+ // Use the proprietary SPI to create a service with additional metadata specified
+ ServiceDelegate.setServiceMetadata(composite);
+
+ Service service = Service.create(serviceQName);
+ assertNotNull(service);
+
+ // Verify that the composite has been reset so that it would not affect the next Service
+ assertNull(ServiceDelegate.getServiceMetadata());
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
+ // Since this is a generic Service with no overrides, there will be no WebServiceClient annotation
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNull(wsClient);
+
+ // No WSDL should have been used, so no Ports should be found
+ assertTrue("Wrong WSDL used", validatePort(service, null));
+
+ }
+
+ /**
+ * Service.create(URL, QName) with a composite specified but no override in the composite
+ */
+ public void test2ArgServiceWithComposite() {
+ QName serviceQName = new QName(namespaceURI, svcLocalPart);
+
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ URL wsdlUrl = getWsdlURL(otherWsdl);
+ // Use the proprietary SPI to create a service with additional metadata specified
+ ServiceDelegate.setServiceMetadata(composite);
+ Service service = Service.create(wsdlUrl, serviceQName);
+ assertNotNull(service);
+ // Verify that the composite has been reset so that it would not affect the next Service
+ assertNull(ServiceDelegate.getServiceMetadata());
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
+ // Since this is a generic Service with no overrides, there will be no WebServiceClient annotation
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNull(wsClient);
+
+ // WSDL was specified on the create, so make sure the right one was used by checking the ports
+ assertTrue("Wrong WSDL used", validatePort(service, otherWsdl_portLocalPart));
+ }
+
+ /**
+ * Generated service constructor() with no composite specified
+ */
+ public void testNoArgGeneratedService() {
+ Service service = new ClientMetadataGeneratedService();
+ assertNotNull(service);
+
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
+ // There is WebServiceClient on the generated Service
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNotNull(wsClient);
+ assertEquals(originalWsdl, wsClient.wsdlLocation());
+ assertEquals("originalTNS", wsClient.targetNamespace());
+ assertEquals("", wsClient.name());
+
+ // WSDL not specified, so generated Service should use the annotation value
+ assertTrue("Wrong WSDL Used", validatePort(service, originalWsdl_portLocalPart));
+ }
+
+ /**
+ * Generated service constructor(URL, QName) with no composite specified
+ */
+ public void test2ArgGeneratedService() {
+
+ Service service = new ClientMetadataGeneratedService(getWsdlURL(otherWsdl),
+ new QName(namespaceURI, svcLocalPart));
+ assertNotNull(service);
+
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
+ // There is WebServiceClient on the generated Service
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNotNull(wsClient);
+
+ assertEquals(originalWsdl, wsClient.wsdlLocation());
+ assertEquals("originalTNS", wsClient.targetNamespace());
+ assertEquals("", wsClient.name());
+
+ // WSDL was specified on the generated Service constructor,
+ // so make sure the right one was used by checking the ports
+ assertTrue("Wrong WSDL used", validatePort(service, otherWsdl_portLocalPart));
+ }
+
+ /**
+ * Generated service constructor() with composite specified but no override in composite
+ */
+ public void testNoArgGeneratedServiceWithComposite() {
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ ServiceDelegate.setServiceMetadata(composite);
+
+ Service service = new ClientMetadataGeneratedService();
+ assertNotNull(service);
+ assertNull(ServiceDelegate.getServiceMetadata());
+
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
+ // There is WebServiceClient on the generated Service and it wasn't overriden in the composite
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNotNull(wsClient);
+ assertEquals(originalWsdl, wsClient.wsdlLocation());
+ assertEquals("originalTNS", wsClient.targetNamespace());
+ assertEquals("", wsClient.name());
+
+ // No WSDL override specified in the composite, so generated Service should use the annotation value
+ assertTrue("Wrong WSDL Used", validatePort(service, originalWsdl_portLocalPart));
+
+ }
+
+ /**
+ * Generated service constructor(URL, QName) with composite specified but no override in composite
+ */
+ public void test2ArgGeneratedServiceWithComposite() {
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ ServiceDelegate.setServiceMetadata(composite);
+
+ Service service = new ClientMetadataGeneratedService(getWsdlURL(otherWsdl),
+ new QName(namespaceURI, svcLocalPart));
+ assertNotNull(service);
+ assertNull(ServiceDelegate.getServiceMetadata());
+
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
+ // There is WebServiceClient on the generated Service and it wasn't overriden in the composite
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNotNull(wsClient);
+ assertEquals(originalWsdl, wsClient.wsdlLocation());
+ assertEquals("originalTNS", wsClient.targetNamespace());
+ assertEquals("", wsClient.name());
+
+ // WSDL was specified on the generated Service constructor, and none in the composite
+ // so should get the WSDL specified on the constructor
+ assertTrue("Wrong WSDL used", validatePort(service, otherWsdl_portLocalPart));
+ }
+
+ /**
+ * Service.create(QName) with a composite that specifies a wsdlLocation override
+ */
+ public void test1ArgServiceOverrideWsdlLocation() {
+ QName serviceQName = new QName(namespaceURI, svcLocalPart);
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ WebServiceClientAnnot wsClientAnno =
+ WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, null, getWsdlLocation(overridenWsdl));
+ composite.setWebServiceClientAnnot(wsClientAnno);
+ // Use the proprietary SPI to create a service with additional metadata specified
+ ServiceDelegate.setServiceMetadata(composite);
+
+ Service service = Service.create(serviceQName);
+
+ assertNotNull(service);
+ // Verify that the composite has been reset so that it would not affect the next Service
+ assertNull(ServiceDelegate.getServiceMetadata());
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
+ // This is a generic Service with overrides, there will be WebServiceClient annotation
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNull(wsClient);
+ wsClient = dbcInServiceDesc.getWebServiceClientAnnot(serviceDelegate);
+ assertNotNull(wsClient);
+ assertEquals(getWsdlLocation(overridenWsdl), wsClient.wsdlLocation());
+ assertNull(wsClient.targetNamespace());
+ assertNull(wsClient.name());
+
+ // WSDL override specified in the composite
+ assertTrue("Wrong WSDL used", validatePort(service, overridenWsdl_portLocalPart));
+ }
+
+ /**
+ * Service.create(QName) with a composite that overrides the TargetNamespace. Most of the
+ * other tests override the WSDL Location since that is what a JSR-109 DD can specify. This
+ * test makes sure other values can be overridden as well
+ */
+ public void test1ArgServiceOverrideTNS() {
+ QName serviceQName = new QName(namespaceURI, svcLocalPart);
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ WebServiceClientAnnot wsClientAnno =
+ WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, "overrideTNS", null);
+ composite.setWebServiceClientAnnot(wsClientAnno);
+ // Use the proprietary SPI to create a service with additional metadata specified
+ ServiceDelegate.setServiceMetadata(composite);
+
+ Service service = Service.create(serviceQName);
+
+ assertNotNull(service);
+ // Verify that the composite has been reset so that it would not affect the next Service
+ assertNull(ServiceDelegate.getServiceMetadata());
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
+ // The target namespace for the key should be overriden; it should not be overriden for
+ // no key.
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNull(wsClient);
+
+ WebServiceClient wsClientKeyed = dbcInServiceDesc.getWebServiceClientAnnot(serviceDelegate);
+ assertNotNull(wsClientKeyed);
+ assertNull(wsClientKeyed.wsdlLocation());
+ assertEquals("overrideTNS", wsClientKeyed.targetNamespace());
+ assertNull(wsClientKeyed.name());
+
+ }
+
+ /**
+ * Service.create(QName) with a composite that specifies a CatalogManager override
+ */
+ public void test1ArgServiceOverrideCatalogManager() {
+ QName serviceQName = new QName(namespaceURI, svcLocalPart);
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ OASISCatalogManager catalogManager = new OASISCatalogManager();
+ catalogManager.setCatalogFiles(getCatalogLocation(uniqueCatalog));
+ composite.setCatalogManager(catalogManager);
+ // Use the proprietary SPI to create a service with additional metadata specified
+ ServiceDelegate.setServiceMetadata(composite);
+ Service service = Service.create(serviceQName);
+
+ assertNotNull(service);
+ // Verify that the composite has been reset so that it would not affect the next Service
+ assertNull(ServiceDelegate.getServiceMetadata());
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
+ // Verify that the CatalogManager for the Service uses the unique catalog file.
+ String serviceCatalogFile = (String) dbcInServiceDesc.getSparseComposite(serviceDelegate).getCatalogManager().getCatalogFiles().get(0);
+ assertEquals(serviceCatalogFile, getCatalogLocation(uniqueCatalog));
+ }
+
+ /**
+ * Service.create(URL, QName) with a composite that specifies a wsdlLocation override
+ */
+ public void test2ArgServiceOverrideWsdlLocation() {
+ QName serviceQName = new QName(namespaceURI, svcLocalPart);
+ URL wsdlUrl = getWsdlURL(otherWsdl);
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ WebServiceClientAnnot wsClientAnno = WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, null, getWsdlLocation(overridenWsdl));
+ composite.setWebServiceClientAnnot(wsClientAnno);
+ // Use the proprietary SPI to create a service with additional metadata specified
+ ServiceDelegate.setServiceMetadata(composite);
+ Service service = Service.create(wsdlUrl, serviceQName);
+
+ assertNotNull(service);
+ // Verify that the composite has been reset so that it would not affect the next Service
+ assertNull(ServiceDelegate.getServiceMetadata());
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
+ // Since this is a generic Service with overrides, there will be a WebServiceClient annotation
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNull(wsClient);
+ wsClient = dbcInServiceDesc.getWebServiceClientAnnot(serviceDelegate);
+ assertNotNull(wsClient);
+ assertEquals(getWsdlLocation(overridenWsdl), wsClient.wsdlLocation());
+ assertNull(wsClient.targetNamespace());
+ assertNull(wsClient.name());
+
+ // WSDL override specified in the composite
+ assertTrue("Wrong WSDL used", validatePort(service, overridenWsdl_portLocalPart));
+
+ }
+
+ /**
+ * Service.create(URL, QName) with a composite that specifies a CatalogManager override
+ */
+ public void test2ArgServiceOverrideCatalogManager() {
+ QName serviceQName = new QName(namespaceURI, svcLocalPart);
+ URL wsdlUrl = getWsdlURL(otherWsdl);
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ OASISCatalogManager catalogManager = new OASISCatalogManager();
+ catalogManager.setCatalogFiles(getCatalogLocation(uniqueCatalog));
+ composite.setCatalogManager(catalogManager);
+ // Use the proprietary SPI to create a service with additional metadata specified
+ ServiceDelegate.setServiceMetadata(composite);
+ Service service = Service.create(wsdlUrl, serviceQName);
+
+ assertNotNull(service);
+ // Verify that the composite has been reset so that it would not affect the next Service
+ assertNull(ServiceDelegate.getServiceMetadata());
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(Service.class, dbcInServiceDesc.getCorrespondingClass());
+
+ // Verify that the CatalogManager for the Service uses the unique catalog file.
+ String serviceCatalogFile = (String) dbcInServiceDesc.getSparseComposite(serviceDelegate).getCatalogManager().getCatalogFiles().get(0);
+ assertEquals(serviceCatalogFile, getCatalogLocation(uniqueCatalog));
+ }
+
+ /**
+ * Generated service constructor() with a composite that specifies a wsdlLocation override
+ */
+ public void testNoArgGeneratedServiceOverrideWsdlLocation() {
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ WebServiceClientAnnot wsClientAnno = WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, null, getWsdlLocation(overridenWsdl));
+ composite.setWebServiceClientAnnot(wsClientAnno);
+ ServiceDelegate.setServiceMetadata(composite);
+
+ Service service = new ClientMetadataGeneratedService();
+
+ assertNotNull(service);
+ assertNull(ServiceDelegate.getServiceMetadata());
+
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
+ // There is WebServiceClient on the generated Service and it was overriden in the composite
+ // for this key, however the keyless composite should not have any overrides.
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNotNull(wsClient);
+ assertEquals(originalWsdl, wsClient.wsdlLocation());
+ assertEquals("originalTNS", wsClient.targetNamespace());
+ assertEquals("", wsClient.name());
+
+ WebServiceClient wsClientKeyed = dbcInServiceDesc.getWebServiceClientAnnot(serviceDelegate);
+ assertNotSame(wsClient, wsClientKeyed);
+ assertEquals(getWsdlLocation(overridenWsdl), wsClientKeyed.wsdlLocation());
+ assertEquals("originalTNS", wsClientKeyed.targetNamespace());
+ assertEquals("", wsClientKeyed.name());
+
+ // WSDL override specified in the composite
+ assertTrue("Wrong WSDL used", validatePort(service, overridenWsdl_portLocalPart));
+ }
+
+ /**
+ * Generated service constructor() with a composite that specifies a CatalogManager override
+ */
+ public void testNoArgGeneratedServiceOverrideCatalogManager() {
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ OASISCatalogManager catalogManager = new OASISCatalogManager();
+ catalogManager.setCatalogFiles(getCatalogLocation(uniqueCatalog));
+ composite.setCatalogManager(catalogManager);
+ ServiceDelegate.setServiceMetadata(composite);
+
+ Service service = new ClientMetadataGeneratedService();
+
+ assertNotNull(service);
+ assertNull(ServiceDelegate.getServiceMetadata());
+
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
+
+ // Verify that the CatalogManager for the Service uses the unique catalog file.
+ String serviceCatalogFile = (String) dbcInServiceDesc.getSparseComposite(serviceDelegate).getCatalogManager().getCatalogFiles().get(0);
+ assertEquals(serviceCatalogFile, getCatalogLocation(uniqueCatalog));
+ }
+
+ /**
+ * Generated service constructor(URL, QName) with a composite that specifies a wsdlLocation override
+ */
+ public void test2ArgGeneratedServiceOverrideWsdlLocation() {
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ WebServiceClientAnnot wsClientAnno = WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, null, getWsdlLocation(overridenWsdl));
+ composite.setWebServiceClientAnnot(wsClientAnno);
+ ServiceDelegate.setServiceMetadata(composite);
+
+ Service service = new ClientMetadataGeneratedService(getWsdlURL(otherWsdl),
+ new QName(namespaceURI, svcLocalPart));
+
+ assertNotNull(service);
+ assertNull(ServiceDelegate.getServiceMetadata());
+
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
+ // There is WebServiceClient on the generated Service and it was overriden in the composite
+ // for this key, however the keyless composite should not have any overrides.
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNotNull(wsClient);
+ assertEquals(originalWsdl, wsClient.wsdlLocation());
+ assertEquals("originalTNS", wsClient.targetNamespace());
+ assertEquals("", wsClient.name());
+
+ WebServiceClient wsClientKeyed = dbcInServiceDesc.getWebServiceClientAnnot(serviceDelegate);
+ assertNotSame(wsClient, wsClientKeyed);
+
+ assertEquals(getWsdlLocation(overridenWsdl), wsClientKeyed.wsdlLocation());
+ assertEquals("originalTNS", wsClientKeyed.targetNamespace());
+ assertEquals("", wsClientKeyed.name());
+
+ // WSDL override specified in the composite
+ assertTrue("Wrong WSDL used", validatePort(service, overridenWsdl_portLocalPart));
+ }
+
+ /**
+ * Generated service constructor(URL, QName) with a composite that specifies a
+ * target Namespace override. Most of the other tests are based on wsdlLocation since
+ * that is what JSR-109 DDs override. This test verifies that other members can also
+ * be override.
+ */
+ public void test2ArgGeneratedServiceOverrideTNS() {
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ WebServiceClientAnnot wsClientAnno = WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, "overrideTNS", getWsdlLocation(overridenWsdl));
+ composite.setWebServiceClientAnnot(wsClientAnno);
+ ServiceDelegate.setServiceMetadata(composite);
+
+ Service service = new ClientMetadataGeneratedService(getWsdlURL(otherWsdl),
+ new QName(namespaceURI, svcLocalPart));
+
+ assertNotNull(service);
+ assertNull(ServiceDelegate.getServiceMetadata());
+
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
+ // There is WebServiceClient on the generated Service and it was overriden in the composite
+ // for this key, however the keyless composite should not have any overrides.
+ WebServiceClient wsClient = dbcInServiceDesc.getWebServiceClientAnnot();
+ assertNotNull(wsClient);
+ assertEquals(originalWsdl, wsClient.wsdlLocation());
+ assertEquals("originalTNS", wsClient.targetNamespace());
+ assertEquals("", wsClient.name());
+
+ WebServiceClient wsClientKeyed = dbcInServiceDesc.getWebServiceClientAnnot(serviceDelegate);
+ assertNotSame(wsClient, wsClientKeyed);
+
+ assertEquals(getWsdlLocation(overridenWsdl), wsClientKeyed.wsdlLocation());
+ assertEquals("overrideTNS", wsClientKeyed.targetNamespace());
+ assertEquals("", wsClientKeyed.name());
+
+ // WSDL override specified in the composite
+ assertTrue("Wrong WSDL used", validatePort(service, overridenWsdl_portLocalPart));
+ }
+
+ /**
+ * Generated service constructor(URL, QName) with a composite that specifies a
+ * Catalog Manager override.
+ */
+ public void test2ArgGeneratedServiceOverrideCatalogManager() {
+ DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+ OASISCatalogManager catalogManager = new OASISCatalogManager();
+ catalogManager.setCatalogFiles(getCatalogLocation(uniqueCatalog));
+ composite.setCatalogManager(catalogManager);
+ ServiceDelegate.setServiceMetadata(composite);
+
+ Service service = new ClientMetadataGeneratedService(getWsdlURL(otherWsdl),
+ new QName(namespaceURI, svcLocalPart));
+
+ assertNotNull(service);
+ assertNull(ServiceDelegate.getServiceMetadata());
+
+ ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
+ assertNotNull(serviceDelegate);
+ ServiceDescription serviceDesc = serviceDelegate.getServiceDescription();
+ assertNotNull(serviceDesc);
+ DescriptionBuilderComposite dbcInServiceDesc = DescriptionTestUtils2.getServiceDescriptionComposite(serviceDesc);
+ assertSame(composite, dbcInServiceDesc.getSparseComposite(serviceDelegate));
+ assertEquals(ClientMetadataGeneratedService.class, dbcInServiceDesc.getCorrespondingClass());
+
+ // Verify that the CatalogManager for the Service uses the unique catalog file.
+ String serviceCatalogFile = (String) dbcInServiceDesc.getSparseComposite(serviceDelegate).getCatalogManager().getCatalogFiles().get(0);
[... 479 lines stripped ...]
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org