/* | |
* 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 junit.framework.TestCase; | |
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; | |
/** | |
* 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()); | |
} | |
/** | |
* 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; | |
} | |
} |