You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by ba...@apache.org on 2008/01/11 04:56:17 UTC

svn commit: r611042 [4/4] - in /webservices/axis2/trunk/java/modules: jaxws/src/org/apache/axis2/jaxws/ jaxws/src/org/apache/axis2/jaxws/spi/ jaxws/test-resources/wsdl/ jaxws/test/org/apache/axis2/jaxws/description/ jaxws/test/org/apache/axis2/jaxws/sp...

Added: webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/impl/ClientDBCSupportEndpointTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/impl/ClientDBCSupportEndpointTests.java?rev=611042&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/impl/ClientDBCSupportEndpointTests.java (added)
+++ webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/impl/ClientDBCSupportEndpointTests.java Thu Jan 10 19:56:14 2008
@@ -0,0 +1,307 @@
+/*
+ * 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.description.impl;
+
+import org.apache.axis2.jaxws.description.DescriptionFactory;
+import org.apache.axis2.jaxws.description.EndpointDescription;
+import org.apache.axis2.jaxws.description.ServiceDescription;
+import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
+
+import javax.jws.WebService;
+import javax.xml.namespace.QName;
+import javax.xml.ws.Holder;
+import javax.xml.ws.Service;
+import javax.xml.ws.WebServiceClient;
+import javax.xml.ws.WebServiceException;
+
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import junit.framework.TestCase;
+
+/**
+ * Test client sparse composite support in the MDQ layer at the Endpoint creation level.
+ */
+/**
+ * 
+ */
+public class ClientDBCSupportEndpointTests extends TestCase {
+    private String namespaceURI = "http://org.apache.axis2.jaxws.description.impl.ClientDBCSupportEndpointTests";
+    private String svcLocalPart = "svcLocalPart";
+    private String portLocalPart = "portLocalPart";
+    
+    /**
+     * Verify that the code that doesn't use a composite continues to work correctly. 
+     */
+    public void testPreDBCFunctionality() {
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        
+        ServiceDescription svcDesc = DescriptionFactory.createServiceDescription(null, serviceQName, ClientDBCSupportEndpointServiceSubclass.class);
+        assertNotNull(svcDesc);
+        ServiceDescriptionImpl svcDescImpl = (ServiceDescriptionImpl) svcDesc;
+        DescriptionBuilderComposite svcDescComposite = svcDescImpl.getDescriptionBuilderComposite();
+        assertNotNull(svcDescComposite);
+        
+        Class testServiceClass = svcDescComposite.getCorrespondingClass();
+        assertNotNull(testServiceClass);
+        assertEquals(ClientDBCSupportEndpointServiceSubclass.class, testServiceClass);
+        
+        // Now update with an SEI
+        QName portQName = new QName(namespaceURI, portLocalPart);
+        EndpointDescription epDesc = 
+            DescriptionFactory.updateEndpoint(svcDesc, ClientDBCSupportEndpointSEI.class, portQName, DescriptionFactory.UpdateType.GET_PORT);
+        assertNotNull(epDesc);
+        EndpointDescriptionImpl epDescImpl = (EndpointDescriptionImpl) epDesc;
+        DescriptionBuilderComposite epDescComposite = epDescImpl.getDescriptionBuilderComposite();
+        Class seiClass = epDescComposite.getCorrespondingClass();
+        assertEquals(ClientDBCSupportEndpointSEI.class, seiClass);
+        // Make sure we didn't overwrite the class in the ServiceDesc composite
+        assertEquals(ClientDBCSupportEndpointServiceSubclass.class, 
+                     svcDescComposite.getCorrespondingClass());
+        
+    }
+
+    /**
+     * Verify that the code that uses a simple empty sparse composite to create an endpoint.
+     */
+    public void testSimpleComposite() {
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        
+        ServiceDescription svcDesc = DescriptionFactory.createServiceDescription(null, serviceQName, ClientDBCSupportEndpointServiceSubclass.class);
+        assertNotNull(svcDesc);
+        ServiceDescriptionImpl svcDescImpl = (ServiceDescriptionImpl) svcDesc;
+        DescriptionBuilderComposite svcDescComposite = svcDescImpl.getDescriptionBuilderComposite();
+        assertNotNull(svcDescComposite);
+        
+        Class testServiceClass = svcDescComposite.getCorrespondingClass();
+        assertNotNull(testServiceClass);
+        assertEquals(ClientDBCSupportEndpointServiceSubclass.class, testServiceClass);
+        
+        // Now update with an SEI
+        QName portQName = new QName(namespaceURI, portLocalPart);
+        DescriptionBuilderComposite setEpDescComposite = new DescriptionBuilderComposite();
+        Object compositeKey = "Key1";
+        EndpointDescription epDesc = 
+            DescriptionFactory.updateEndpoint(svcDesc, ClientDBCSupportEndpointSEI.class, portQName, DescriptionFactory.UpdateType.GET_PORT,
+                                              setEpDescComposite, compositeKey);
+        assertNotNull(epDesc);
+        EndpointDescriptionImpl epDescImpl = (EndpointDescriptionImpl) epDesc;
+        DescriptionBuilderComposite epDescComposite = epDescImpl.getDescriptionBuilderComposite();
+        // The sparse composite should NOT be equal to the composite in the EndpointDescription
+        // The sparse composite SHOULD be equal to the sparse composite contained in the EndpointDescription
+        assertNotSame(setEpDescComposite, epDescComposite);
+        assertEquals(setEpDescComposite, epDescComposite.getSparseComposite(compositeKey));
+        Class seiClass = epDescComposite.getCorrespondingClass();
+        assertEquals(ClientDBCSupportEndpointSEI.class, seiClass);
+        // Make sure we didn't overwrite the class in the ServiceDesc composite
+        assertEquals(ClientDBCSupportEndpointServiceSubclass.class, 
+                     svcDescComposite.getCorrespondingClass());
+        
+    }
+    
+    /**
+     * A composite can not be specified when doing an AddPort 
+     */
+    public void testAddPort() {
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        
+        ServiceDescription svcDesc = DescriptionFactory.createServiceDescription(null, serviceQName, ClientDBCSupportEndpointServiceSubclass.class);
+        assertNotNull(svcDesc);
+        ServiceDescriptionImpl svcDescImpl = (ServiceDescriptionImpl) svcDesc;
+        DescriptionBuilderComposite svcDescComposite = svcDescImpl.getDescriptionBuilderComposite();
+        assertNotNull(svcDescComposite);
+        
+        Class testServiceClass = svcDescComposite.getCorrespondingClass();
+        assertNotNull(testServiceClass);
+        assertEquals(ClientDBCSupportEndpointServiceSubclass.class, testServiceClass);
+        
+        // Now update with an SEI
+        QName portQName = new QName(namespaceURI, portLocalPart);
+        DescriptionBuilderComposite setEpDescComposite = new DescriptionBuilderComposite();
+        Object compositeKey = "Key1";
+        try {
+            EndpointDescription epDesc = 
+                DescriptionFactory.updateEndpoint(svcDesc, ClientDBCSupportEndpointSEI.class, portQName, DescriptionFactory.UpdateType.ADD_PORT,
+                                                  setEpDescComposite, compositeKey);
+            fail("Should have caught an exception");
+        }
+        catch (WebServiceException e) {
+            // Expected path
+        }
+        
+    }
+    
+    /**
+     * Composite can not be specified with a CREATE_DISPATCH
+     */
+    public void testCreateDispatch() {
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        
+        ServiceDescription svcDesc = DescriptionFactory.createServiceDescription(null, serviceQName, ClientDBCSupportEndpointServiceSubclass.class);
+        assertNotNull(svcDesc);
+        ServiceDescriptionImpl svcDescImpl = (ServiceDescriptionImpl) svcDesc;
+        DescriptionBuilderComposite svcDescComposite = svcDescImpl.getDescriptionBuilderComposite();
+        assertNotNull(svcDescComposite);
+        
+        Class testServiceClass = svcDescComposite.getCorrespondingClass();
+        assertNotNull(testServiceClass);
+        assertEquals(ClientDBCSupportEndpointServiceSubclass.class, testServiceClass);
+        
+        // Now update with an SEI
+        QName portQName = new QName(namespaceURI, portLocalPart);
+        DescriptionBuilderComposite setEpDescComposite = new DescriptionBuilderComposite();
+        Object compositeKey = "Key1";
+        try {
+            EndpointDescription epDesc = 
+                DescriptionFactory.updateEndpoint(svcDesc, null /* SEI can't be specified */, 
+                                                  portQName, 
+                                                  DescriptionFactory.UpdateType.CREATE_DISPATCH,
+                                                  setEpDescComposite, compositeKey);
+            fail("Should have caught an exception");
+        }
+        catch (WebServiceException e) {
+            // Expected path
+            assertTrue(e.toString().contains("CreateDispatch can not have a composite"));
+        }
+    }
+    
+    /**
+     * Update a port that was created from WSDL (i.e. a declared port) with a composite.  To get 
+     * into a state where a declared port would need to be updated:
+     * 1) Do a CREATE_DISPATCH on a declared wsdl port
+     * 2) Do a GET_PORT on that port, providing an SEI.
+     * In this case, the EndpointDescription is shared between the two, but the sparse composite
+     * specified on the GET_PORT should be unique to it.
+     */
+    public void testUpdateDeclaredPort() {
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        
+        ServiceDescription svcDesc = DescriptionFactory.createServiceDescription(getWsdlURL(), serviceQName, Service.class);
+
+        QName portQName = new QName(namespaceURI, portLocalPart);
+
+        // First we do a CREATE_DISPATCH to create the EndpointDescription for the WSDL port.
+        // Note that we don't specify a composite (because that isn't allowed for CREATE_DISPATCH)
+        // and one will be created by the runtime
+        EndpointDescription epDescForCreate = 
+            DescriptionFactory.updateEndpoint(svcDesc, null /* SEI can't be specified */, 
+                                              portQName, 
+                                              DescriptionFactory.UpdateType.CREATE_DISPATCH);
+        EndpointDescriptionImpl epDescImpl = (EndpointDescriptionImpl) epDescForCreate;
+        DescriptionBuilderComposite createDispatchComposite = epDescImpl.getDescriptionBuilderComposite();
+        assertNotNull(createDispatchComposite);
+        // There really shouldn't be any sparse composites at this point; make sure by checking a 
+        // couple obvious things that might be used as a key.
+        assertNull(epDescImpl.getDescriptionBuilderComposite().getSparseComposite(createDispatchComposite));
+        assertNull(epDescImpl.getDescriptionBuilderComposite().getSparseComposite(null));
+
+        DescriptionBuilderComposite updateEndpointComposite = new DescriptionBuilderComposite();
+        Object compositeKey = "KEY1";
+        EndpointDescription epDescForGetPort = 
+            DescriptionFactory.updateEndpoint(svcDesc, ClientDBCSupportEndpointSEI.class, portQName, DescriptionFactory.UpdateType.GET_PORT,
+                                              updateEndpointComposite, compositeKey);
+        assertEquals(epDescForCreate, epDescForGetPort);
+        
+        // The update needs to have set the sparse composite (like for a given ServiceDelegate
+        // instance) without having lost the different composite for the create.  The EndpointDescripton 
+        // can be shared, but the sparse composite overrides they contain need to be unique (like to the ServiceDelegates)
+        assertTrue(createDispatchComposite != updateEndpointComposite);
+        assertEquals(updateEndpointComposite, epDescImpl.getDescriptionBuilderComposite().getSparseComposite(compositeKey));
+        // Make sure this didn't change any of the sparse information (which is none) for the previous create
+        assertNull(epDescImpl.getDescriptionBuilderComposite().getSparseComposite(createDispatchComposite));
+        assertNull(epDescImpl.getDescriptionBuilderComposite().getSparseComposite(null));
+        
+    }
+    
+    /**
+     * Do multiple GET_PORT on the same service.  This should share the same EndpointDescription
+     * but the sparse composite specified on GET_PORT should be unique to each key.
+     */
+    public void testMultipleGetPort() {
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        ServiceDescription svcDesc = DescriptionFactory.createServiceDescription(getWsdlURL(), serviceQName, Service.class);
+        QName portQName = new QName(namespaceURI, portLocalPart);
+        
+        // Do the first GetPort using sd1 as a key for the sparse composite
+        DescriptionBuilderComposite sd1Composite = new DescriptionBuilderComposite();
+        Object sd1 = "SD1";
+        EndpointDescription epDescForGetPort1 = 
+            DescriptionFactory.updateEndpoint(svcDesc, ClientDBCSupportEndpointSEI.class, portQName, DescriptionFactory.UpdateType.GET_PORT,
+                                              sd1Composite, sd1);
+        assertNotNull(epDescForGetPort1);
+        EndpointDescriptionImpl epDescImpl1 = (EndpointDescriptionImpl) epDescForGetPort1;
+        assertEquals(sd1Composite, epDescImpl1.getDescriptionBuilderComposite().getSparseComposite(sd1));
+        
+        // Do the second GetPort using sd2 as a key for the sparse composite
+        DescriptionBuilderComposite sd2Composite = new DescriptionBuilderComposite();
+        Object sd2 = "SD2";
+        EndpointDescription epDescForGetPort2 = 
+            DescriptionFactory.updateEndpoint(svcDesc, ClientDBCSupportEndpointSEI.class, portQName, DescriptionFactory.UpdateType.GET_PORT,
+                                              sd2Composite, sd2);
+        assertNotNull(epDescForGetPort2);
+        assertEquals(epDescForGetPort1, epDescForGetPort2);
+        EndpointDescriptionImpl epDescImpl2 = (EndpointDescriptionImpl) epDescForGetPort2;
+        assertNotSame(sd1Composite, sd2Composite);
+        assertEquals(sd2Composite, epDescImpl2.getDescriptionBuilderComposite().getSparseComposite(sd2));
+        assertEquals(sd1Composite, epDescImpl1.getDescriptionBuilderComposite().getSparseComposite(sd1));
+    }
+    
+    static URL getWsdlURL() {
+        URL url = null;
+        String wsdlLocation = null;
+        try {
+            try{
+                String baseDir = new File(System.getProperty("basedir",".")).getCanonicalPath();
+                
+                wsdlLocation = new File(baseDir + "/test-resources/wsdl/ClientEndpointMetadata.wsdl").getAbsolutePath();
+            }catch(Exception e){
+                e.printStackTrace();
+                fail("Exception creating File(WSDL): " + e.toString());
+            }
+            File file = new File(wsdlLocation);
+            url = file.toURL();
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+            fail("Exception converting WSDL file to URL: " + e.toString());
+        }
+        return url;
+    }
+
+}
+
+@WebServiceClient(targetNamespace="originalTNS", wsdlLocation="originalWsdlLocation")
+class ClientDBCSupportEndpointServiceSubclass extends javax.xml.ws.Service {
+
+    protected ClientDBCSupportEndpointServiceSubclass(URL wsdlDocumentLocation, QName serviceName) {
+        super(wsdlDocumentLocation, serviceName);
+    }
+}
+
+@WebService
+interface ClientDBCSupportEndpointSEI {
+    public String echo (String string);
+}
+
+@WebService(serviceName = "EchoService", endpointInterface="org.apache.ws.axis2.tests.EchoPort")
+class ClientDBCSupportEndpointEchoServiceImplWithSEI {
+    public void echo(Holder<String> text) {
+        text.value = "Echo " + text.value;
+    }
+}

Added: webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/impl/ClientDBCSupportTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/impl/ClientDBCSupportTests.java?rev=611042&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/impl/ClientDBCSupportTests.java (added)
+++ webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/impl/ClientDBCSupportTests.java Thu Jan 10 19:56:14 2008
@@ -0,0 +1,226 @@
+/*
+ * 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.description.impl;
+
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.jaxws.description.DescriptionFactory;
+import org.apache.axis2.jaxws.description.DescriptionTestUtils;
+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.WebServiceClientAnnot;
+
+import javax.jws.WebService;
+import javax.xml.namespace.QName;
+import javax.xml.ws.Holder;
+import javax.xml.ws.WebServiceClient;
+
+import java.net.URL;
+
+import junit.framework.TestCase;
+
+/**
+ * Test client sparse composite support in the MDQ layer at the Service creation level.
+ */
+public class ClientDBCSupportTests extends TestCase {
+    private String namespaceURI = "http://org.apache.axis2.jaxws.description.impl.ClientDBCSupportTests";
+    private String svcLocalPart = "svcLocalPart";
+    private String portLocalPart = "portLocalPart";
+    
+    /**
+     * Test the previous way of constructing a ServiceDescription and then updating it with an 
+     * Endpoint.  This is verifying that the previous APIs work as expected.
+     */
+    public void testServiceAndSeiClass() {
+        
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        
+        ServiceDescription svcDesc = DescriptionFactory.createServiceDescription(null, serviceQName, ClientDBCSupportServiceSubclass.class);
+        assertNotNull(svcDesc);
+        ServiceDescriptionImpl svcDescImpl = (ServiceDescriptionImpl) svcDesc;
+        DescriptionBuilderComposite svcDescComposite = svcDescImpl.getDescriptionBuilderComposite();
+        assertNotNull(svcDescComposite);
+        
+        Class testServiceClass = svcDescComposite.getCorrespondingClass();
+        assertNotNull(testServiceClass);
+        assertEquals(ClientDBCSupportServiceSubclass.class, testServiceClass);
+        
+        // Now update with an SEI
+        QName portQName = new QName(namespaceURI, portLocalPart);
+        EndpointDescription epDesc = 
+            DescriptionFactory.updateEndpoint(svcDesc, ClientDBCSupportSEI.class, portQName, DescriptionFactory.UpdateType.GET_PORT);
+        assertNotNull(epDesc);
+        EndpointDescriptionImpl epDescImpl = (EndpointDescriptionImpl) epDesc;
+        DescriptionBuilderComposite epDescComposite = epDescImpl.getDescriptionBuilderComposite();
+        Class seiClass = epDescComposite.getCorrespondingClass();
+        assertEquals(ClientDBCSupportSEI.class, seiClass);
+        // Make sure we didn't overwrite the class in the ServiceDesc composite
+        assertEquals(ClientDBCSupportServiceSubclass.class, 
+                     svcDescComposite.getCorrespondingClass());
+    }
+    
+    /**
+     * Create a ServiceDescription with a composite.  Nothing in the composite is overriden; validate
+     * the values from the annotions in the Service class.
+     */
+    public void testClientServiceClassComposite() {
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+        Object compositeKey = "CompositeKey";
+        ServiceDescription svcDesc = 
+            new ServiceDescriptionImpl(null, serviceQName, 
+                                       ClientDBCSupportServiceSubclass.class, 
+                                       composite, compositeKey);
+        assertNotNull(svcDesc);
+        ServiceDescriptionImpl svcDescImpl = (ServiceDescriptionImpl) svcDesc;
+        DescriptionBuilderComposite svcDescComposite = svcDescImpl.getDescriptionBuilderComposite();
+        assertNotNull(svcDescComposite);
+        assertNotSame(composite, svcDescComposite);
+        assertSame(composite, svcDescComposite.getSparseComposite(compositeKey));
+        
+        WebServiceClient wsClient = svcDescComposite.getWebServiceClientAnnot();
+        assertNotNull(wsClient);
+        assertEquals("originalWsdlLocation", wsClient.wsdlLocation());
+        assertEquals("originalTNS", wsClient.targetNamespace());
+        // We're testing the composite, not the metadata layer, so none of the defaulting logic
+        // is exercised.
+        assertEquals("", wsClient.name());
+        
+    }
+    
+    /**
+     * Create a ServiceDescription using a sparse composite that overrides the wsdlLocation on the
+     * WebServiceClient annotation.  Validate the override only affects the wsdlLocation and not
+     * the other annotations members.
+     */
+    public void testServiceClientWSDLLocationOverride() {
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        // Create a composite with a WebServiceClient override of the WSDL location.
+        DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+        String overridenWsdlLocation = DescriptionTestUtils.getWSDLLocation("ClientEndpointMetadata.wsdl");
+        WebServiceClientAnnot wsClientAnno = WebServiceClientAnnot.createWebServiceClientAnnotImpl(null, null, overridenWsdlLocation);
+        composite.setWebServiceClientAnnot(wsClientAnno);
+        Object compositeKey = "CompositeKey";
+        ServiceDescription svcDesc = 
+            new ServiceDescriptionImpl(null, serviceQName, 
+                                       ClientDBCSupportServiceSubclass.class, 
+                                       composite, compositeKey);
+        assertNotNull(svcDesc);
+        ServiceDescriptionImpl svcDescImpl = (ServiceDescriptionImpl) svcDesc;
+        DescriptionBuilderComposite svcDescComposite = svcDescImpl.getDescriptionBuilderComposite();
+        assertNotNull(svcDescComposite);
+        assertNotSame(composite, svcDescComposite);
+        assertSame(composite, svcDescComposite.getSparseComposite(compositeKey));
+        // The client annot we set as a sparse composite should be the same.
+        assertSame(wsClientAnno, svcDescComposite.getSparseComposite(compositeKey).getWebServiceClientAnnot());
+        // The WebServiceClient annot on the service desc should represent the wsdl override from the
+        // sparse composite 
+        WebServiceClient wsClient = svcDescComposite.getWebServiceClientAnnot(compositeKey);
+        assertEquals(overridenWsdlLocation, wsClient.wsdlLocation());
+        // Make sure the non-overridden values still come from the service class annotation
+        assertEquals("originalTNS", wsClient.targetNamespace());
+        assertEquals("", wsClient.name());
+        
+    }
+    
+    /**
+     * The other path through MDQ that didn't use DBCs was creating the service impl hierachy 
+     * using reflection on the service impl class.  This is deprecated but it is used in the JAXWS
+     * open source tests (for now).  So, this validates we don't break those tests.
+     * 
+     * When the deprecated logic is removed, this test can also be removed.
+     */
+    public void testDeprecatedServiceImplConstruction() {
+        AxisService axisService = new AxisService();
+        ServiceDescription svcDesc = DescriptionFactory.
+            createServiceDescriptionFromServiceImpl(ClientDBCSupportEchoServiceImplWithSEI.class, axisService);
+        assertNotNull(svcDesc);
+        ServiceDescriptionImpl svcDescImpl = (ServiceDescriptionImpl) svcDesc;
+        DescriptionBuilderComposite svcDescComposite = svcDescImpl.getDescriptionBuilderComposite();
+        assertNotNull(svcDescComposite);
+        
+        // Since this is a server-side impl, there should be no class corresponding to the client-side
+        // Service class.
+        assertNull(svcDescComposite.getCorrespondingClass());
+    }
+    /**
+     * Test the ability to set a prefered port on a service description via  a sparse composite.
+     */
+    public void testPreferredPort() {
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+        QName preferredPort = new QName("preferredTNS", "preferredLP");
+        composite.setPreferredPort(preferredPort);
+        Object compositeKey = "CompositeKey";
+        ServiceDescription svcDesc = 
+            DescriptionFactory.createServiceDescription(null, serviceQName, 
+                                                        ClientDBCSupportServiceSubclass.class,
+                                                        composite, compositeKey);
+        DescriptionBuilderComposite svcDescComposite = DescriptionTestUtils.getServiceDescriptionComposite(svcDesc);
+        assertNotNull(svcDescComposite);
+        assertNull(svcDescComposite.getPreferredPort());
+        DescriptionBuilderComposite svcDescSparseComposite = svcDescComposite.getSparseComposite(compositeKey);
+        assertNotNull(svcDescSparseComposite);
+        assertSame(preferredPort, svcDescSparseComposite.getPreferredPort());
+        assertSame(preferredPort, svcDescComposite.getPreferredPort(compositeKey));
+    }
+
+    /**
+     * Test the ability to set MTOM enablement on a service description via a sparse composite.
+     */
+    public void testMTOMEnablement() {
+        QName serviceQName = new QName(namespaceURI, svcLocalPart);
+        DescriptionBuilderComposite composite = new DescriptionBuilderComposite();
+        composite.setIsMTOMEnabled(true);
+        Object compositeKey = "CompositeKey";
+        ServiceDescription svcDesc = 
+            DescriptionFactory.createServiceDescription(null, serviceQName, 
+                                                        ClientDBCSupportServiceSubclass.class,
+                                                        composite, compositeKey);
+        DescriptionBuilderComposite svcDescComposite = DescriptionTestUtils.getServiceDescriptionComposite(svcDesc);
+        assertNotNull(svcDescComposite);
+        assertFalse(svcDescComposite.isMTOMEnabled());
+        DescriptionBuilderComposite svcDescSparseComposite = svcDescComposite.getSparseComposite(compositeKey);
+        assertNotNull(svcDescSparseComposite);
+        assertTrue(svcDescSparseComposite.isMTOMEnabled());
+        assertTrue(svcDescComposite.isMTOMEnabled(compositeKey));
+    }
+
+}
+
+@WebServiceClient(targetNamespace="originalTNS", wsdlLocation="originalWsdlLocation")
+class ClientDBCSupportServiceSubclass extends javax.xml.ws.Service {
+
+    protected ClientDBCSupportServiceSubclass(URL wsdlDocumentLocation, QName serviceName) {
+        super(wsdlDocumentLocation, serviceName);
+    }
+}
+
+@WebService
+interface ClientDBCSupportSEI {
+    public String echo (String string);
+}
+
+@WebService(serviceName = "EchoService", endpointInterface="org.apache.ws.axis2.tests.EchoPort")
+class ClientDBCSupportEchoServiceImplWithSEI {
+    public void echo(Holder<String> text) {
+        text.value = "Echo " + text.value;
+    }
+
+}

Modified: webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImplTests.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImplTests.java?rev=611042&r1=611041&r2=611042&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImplTests.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/test/org/apache/axis2/jaxws/description/impl/DescriptionFactoryImplTests.java Thu Jan 10 19:56:14 2008
@@ -131,8 +131,10 @@
             DescriptionFactoryImpl.clearServiceDescriptionCache(null);
             
         } finally {
-            // restore old factory
+            // restore old factory by updating the registry THEN clearing the cached factory
+            // so it is retrieved from the table again.
             MetadataFactoryRegistry.setFactory(ClientConfigurationFactory.class, oldFactory);
+            resetClientConfigFactory();
         }                          
     }
     
@@ -147,7 +149,7 @@
         SampleAnnotationProcessor saProcessor = new SampleAnnotationProcessor();
         saProcessor.setAnnotationInstanceClassName(sampleAnnotation.getClass().getName());
         dbc.addCustomAnnotationProcessor(saProcessor);
-        WebServiceAnnot webService = dbc.getWebServiceAnnot();
+        WebService webService = dbc.getWebServiceAnnot();
         assertNotNull(webService);
         String pn = webService.portName();
         String tns = webService.targetNamespace();
@@ -238,7 +240,7 @@
             if (context == null) {
                 context = super.getClientConfigurationContext();
             }
-            System.out.println(context);
+            System.out.println("Test version of CachingClientContextFactory: " + context);
             return context;
         }
         



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org