blob: ea7b5bb8f5095eef72a496c25f0e01e7d6e64321 [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;
import junit.framework.TestCase;
import org.apache.axis2.jaxws.spi.ServiceDelegate;
import org.apache.axis2.jaxws.unitTest.echo.EchoPort;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebParam.Mode;
import javax.jws.WebService;
import javax.xml.namespace.QName;
import javax.xml.transform.Source;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Holder;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
import javax.xml.ws.Service;
import javax.xml.ws.WebServiceException;
import java.net.URL;
/**
* Directly test the Description classes built with a WSDL file.
*/
public class WSDLDescriptionTests extends TestCase {
private Service service;
private ServiceDelegate serviceDelegate;
private ServiceDescription serviceDescription;
private static final String VALID_PORT = "EchoPort";
private static final String VALID_NAMESPACE = "http://ws.apache.org/axis2/tests";
private QName validPortQName = new QName(VALID_NAMESPACE, VALID_PORT);
protected void setUp() {
// Create a new service for each test to test various valid and invalid
// flows
String namespaceURI = VALID_NAMESPACE;
String localPart = "EchoService";
URL wsdlURL = DescriptionTestUtils2.getWSDLURL();
assertNotNull(wsdlURL);
service = Service.create(wsdlURL, new QName(namespaceURI, localPart));
serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service);
serviceDescription = serviceDelegate.getServiceDescription();
}
/*
* ========================================================================
* ServiceDescription Tests
* ========================================================================
*/
public void testInvalidLocalpartServiceGetEndpoint() {
QName invalidPortQname = new QName(VALID_NAMESPACE, "InvalidEchoPort");
EndpointDescription endpointDescription = serviceDescription.getEndpointDescription(invalidPortQname);
assertNull("EndpointDescription should not be found", endpointDescription);
}
public void testInvalidNamespaceServiceGetEndpoint() {
QName invalidPortQname = new QName("http://ws.apache.org/axis2/tests/INVALID", VALID_PORT);
EndpointDescription endpointDescription = serviceDescription.getEndpointDescription(invalidPortQname);
assertNull("EndpointDescription should not be found", endpointDescription);
}
// ========================================================================
// EndpointDescription Tests
// ========================================================================
public void testValidGetPortWithClass() {
try {
EchoPort echoPort = service.getPort(EchoPort.class);
}
catch (Exception e) {
fail("Caught unexpected exception");
}
}
public void testValidGetPortWithClassAndQName() {
EchoPort echoPort = service.getPort(validPortQName, EchoPort.class);
assertNotNull(echoPort);
EndpointDescription endpointDesc = serviceDescription.getEndpointDescription(validPortQName);
assertNotNull(endpointDesc);
EndpointDescription endpointDescViaSEI = serviceDescription.getEndpointDescription(EchoPort.class)[0];
assertNotNull(endpointDescViaSEI);
assertEquals(endpointDesc, endpointDescViaSEI);
EndpointInterfaceDescription endpointInterfaceDesc = endpointDesc.getEndpointInterfaceDescription();
assertNotNull(endpointInterfaceDesc);
Class sei = endpointInterfaceDesc.getSEIClass();
assertEquals(EchoPort.class, sei);
}
public void testValidMultipleGetPort() {
EchoPort echoPort = service.getPort(validPortQName, EchoPort.class);
assertNotNull(echoPort);
EchoPort echoPort2 = service.getPort(validPortQName, EchoPort.class);
assertNotNull(echoPort2);
}
public void testInvalidMultipleGetPort() {
EchoPort echoPort = service.getPort(validPortQName, EchoPort.class);
assertNotNull(echoPort);
try {
EchoPort2 echoPort2 = service.getPort(validPortQName, EchoPort2.class);
fail("Should have caught exception");
}
catch (WebServiceException e) {
// Expected flow
}
catch (Exception e) {
fail("Caught unexpected exception" + e);
}
}
public void testValidAddPort() {
QName dispatchPortQN = new QName(VALID_NAMESPACE, "dispatchPort");
service.addPort(dispatchPortQN, null, null);
EndpointDescription endpointDesc = serviceDescription.getEndpointDescription(dispatchPortQN, serviceDelegate);
assertNotNull(endpointDesc);
EndpointInterfaceDescription endpointInterfaceDesc = endpointDesc.getEndpointInterfaceDescription();
assertNull(endpointInterfaceDesc);
}
public void testInvalidAddPortExists() {
try {
service.addPort(validPortQName, null, null);
fail("Shouldn't be able to add a port that exists in the WSDL");
}
catch (WebServiceException e) {
// Expected path
}
}
public void testInvalidAddPort() {
// Null portQname
try {
service.addPort(null, null, null);
fail("Shouldn't be able to add a port with a null QName");
}
catch (WebServiceException e) {
// Expected path
}
catch (Exception e) {
fail("Unexpected exception caught " + e);
}
// Empty Port QName
try {
service.addPort(new QName("", ""), null, null);
fail("Shouldn't be able to add an empty port QName");
}
catch (WebServiceException e) {
// Expected path
}
catch (Exception e) {
fail("Unexpected exception caught " + e);
}
// Empty binding ID
try {
service.addPort(new QName(VALID_NAMESPACE, "dispatchPort2"), "", null);
fail("Shouldn't be able to add a port with an empty binding type");
}
catch (WebServiceException e) {
// Expected path
}
catch (Exception e) {
fail("Unexpected exception caught " + e);
}
// Invalid binding ID
try {
service.addPort(new QName(VALID_NAMESPACE, "dispatchPort3"), "InvalidBindingType", null);
fail("Shouldn't be able to add a port with an invalid binding type");
}
catch (WebServiceException e) {
// Expected path
}
catch (Exception e) {
fail("Unexpected exception caught " + e);
}
}
public void testValidAddAndGetPort() {
QName dispatchPortQN = new QName(VALID_NAMESPACE, "dispatchPort");
service.addPort(dispatchPortQN, null, null);
EchoPort echoPort = service.getPort(validPortQName, EchoPort.class);
assertNotNull(echoPort);
EndpointDescription endpointDesc = serviceDescription.getEndpointDescription(validPortQName);
assertNotNull(endpointDesc);
EndpointDescription endpointDescViaSEI = serviceDescription.getEndpointDescription(EchoPort.class)[0];
assertNotNull(endpointDescViaSEI);
assertEquals(endpointDesc, endpointDescViaSEI);
EndpointInterfaceDescription endpointInterfaceDesc = endpointDesc.getEndpointInterfaceDescription();
assertNotNull(endpointInterfaceDesc);
Class sei = endpointInterfaceDesc.getSEIClass();
assertEquals(EchoPort.class, sei);
EndpointDescription endpointDescDispatch = serviceDescription.getEndpointDescription(dispatchPortQN, serviceDelegate);
assertNotNull(endpointDescDispatch);
EndpointInterfaceDescription endpointInterfaceDescDispatch = endpointDescDispatch.getEndpointInterfaceDescription();
assertNull(endpointInterfaceDescDispatch);
}
public void testValidCreateDispatch() {
Dispatch<Source> dispatch = service.createDispatch(validPortQName, Source.class, Service.Mode.PAYLOAD);
assertNotNull(dispatch);
EndpointDescription endpointDesc = serviceDescription.getEndpointDescription(validPortQName);
assertNotNull(endpointDesc);
// Since ther is no SEI, can not get the endpointDescription based on the sei class
EndpointDescription[] endpointDescViaSEI = serviceDescription.getEndpointDescription(EchoPort.class);
assertNull(endpointDescViaSEI);
// There will be an EndpointInterfaceDescription because the service was created with
// WSDL, however there will be no SEI created because a getPort has not been done
EndpointInterfaceDescription endpointInterfaceDesc = endpointDesc.getEndpointInterfaceDescription();
assertNotNull(endpointInterfaceDesc);
assertNull(endpointInterfaceDesc.getSEIClass());
}
public void testValidCreateAndGet() {
Dispatch<Source> dispatch = service.createDispatch(validPortQName, Source.class, Service.Mode.PAYLOAD);
assertNotNull(dispatch);
EndpointDescription endpointDesc = serviceDescription.getEndpointDescription(validPortQName);
assertNotNull(endpointDesc);
// Since ther is no SEI, can not get the endpointDescription based on the sei class
EndpointDescription[] endpointDescViaSEI = serviceDescription.getEndpointDescription(EchoPort.class);
assertNull(endpointDescViaSEI);
EndpointInterfaceDescription endpointInterfaceDesc = endpointDesc.getEndpointInterfaceDescription();
assertNotNull(endpointInterfaceDesc);
assertNull(endpointInterfaceDesc.getSEIClass());
EchoPort echoPort = service.getPort(validPortQName, EchoPort.class);
assertNotNull(echoPort);
// Since a getPort has been done, should now be able to get things based on the SEI
endpointDesc = serviceDescription.getEndpointDescription(validPortQName);
assertNotNull(endpointDesc);
// Since ther is no SEI, can not get the endpointDescription based on the sei class
endpointDescViaSEI = serviceDescription.getEndpointDescription(EchoPort.class);
assertNotNull(endpointDescViaSEI);
assertEquals(endpointDesc, endpointDescViaSEI[0]);
endpointInterfaceDesc = endpointDesc.getEndpointInterfaceDescription();
assertNotNull(endpointInterfaceDesc);
assertEquals(EchoPort.class, endpointInterfaceDesc.getSEIClass());
}
public void testValidGetAndCreate() {
EchoPort echoPort = service.getPort(validPortQName, EchoPort.class);
assertNotNull(echoPort);
Dispatch<Source> dispatch = service.createDispatch(validPortQName, Source.class, Service.Mode.PAYLOAD);
assertNotNull(dispatch);
// Since a getPort has been done, should now be able to get things based on the SEI
EndpointDescription endpointDesc = serviceDescription.getEndpointDescription(validPortQName);
assertNotNull(endpointDesc);
// Since ther is no SEI, can not get the endpointDescription based on the sei class
EndpointDescription[] endpointDescViaSEI = serviceDescription.getEndpointDescription(EchoPort.class);
assertNotNull(endpointDescViaSEI);
assertEquals(endpointDesc, endpointDescViaSEI[0]);
EndpointInterfaceDescription endpointInterfaceDesc = endpointDesc.getEndpointInterfaceDescription();
assertNotNull(endpointInterfaceDesc);
assertEquals(EchoPort.class, endpointInterfaceDesc.getSEIClass());
}
// TODO: Need to add a similar test with no WSDL present; note that it currently would not pass
public void testInvalidAddAndGetPort() {
// Should not be able to do a getPort on one that was added with addPort
QName dispatchPortQN = new QName(VALID_NAMESPACE, "dispatchPort");
service.addPort(dispatchPortQN, null, null);
try {
EchoPort echoPort = service.getPort(dispatchPortQN, EchoPort.class);
fail("Should have thrown a WebServiceException");
}
catch (WebServiceException e) {
// Expected path
}
}
}
// EchoPort2 is identical to EchoPort, but it should still cause an exception
// if it is used on a subsequent getPort after getPort(EchoPort.class) is done.
@WebService(name = "EchoPort", targetNamespace = "http://ws.apache.org/axis2/tests", wsdlLocation = "\\work\\apps\\eclipse\\workspace\\axis2-live\\modules\\jaxws\\test-resources\\wsdl\\WSDLTests.wsdl")
interface EchoPort2 {
/**
*
* @param text
*/
@WebMethod(operationName = "Echo", action = "http://ws.apache.org/axis2/tests/echo")
@RequestWrapper(localName = "Echo", targetNamespace = "http://ws.apache.org/axis2/tests", className = "org.apache.ws.axis2.tests.Echo")
@ResponseWrapper(localName = "EchoResponse", targetNamespace = "http://ws.apache.org/axis2/tests", className = "org.apache.ws.axis2.tests.EchoResponse")
public void echo(
@WebParam(name = "text", targetNamespace = "", mode = Mode.INOUT)
Holder<String> text);
}