blob: 7d989a6efb3ed54cc84025efa524b4a84b4ca289 [file] [log] [blame]
/*
* 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;
}
}