| /* |
| * 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); |
| |
| } |