/* * 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.description.sample.addnumbers.AddNumbersPortType; import org.apache.axis2.jaxws.spi.ServiceDelegate; import javax.xml.namespace.QName; import javax.xml.ws.Dispatch; import javax.xml.ws.Service; import javax.xml.ws.WebServiceException; import java.net.URL; import java.util.Iterator; import java.util.List; public class ServiceTests extends TestCase { private static String VALID_SERVICE_NAMESPACE = "http://org/test/addnumbers"; private static String VALID_SERVICE_LOCALPART_1 = "AddNumbersService1"; private static String VALID_SERVICE_LOCALPART_2 = "AddNumbersService2"; private static String VALID_PORT_S1P1 = "AddNumbersPortS1P1"; private static String VALID_PORT_S1P2 = "AddNumbersPortS1P2"; private static String VALID_PORT_S1P3 = "AddNumbersPortS1P3"; private static String VALID_PORT_S2P1 = "AddNumbersPortS2P1"; private static String VALID_PORT_S2P2 = "AddNumbersPortS2P2"; private static String VALID_PORT_S2P3 = "AddNumbersPortS2P3"; private static String VALID_PORT_S2P4 = "AddNumbersPortS2P4"; public void testInvalidServiceNamespace() { URL wsdlURL = DescriptionTestUtils2.getWSDLURL("WSDLMultiTests.wsdl"); QName invalidServiceQN = new QName("invalidServiceNamespace", VALID_SERVICE_LOCALPART_1); try { Service invalidService = Service.create(wsdlURL, invalidServiceQN); fail("Created service with invalid namespace"); } catch (WebServiceException ex) { // Expected code path } catch (Exception ex) { fail("Caught unexpected exception " + ex.toString()); } } public void testInvalidServiceLocalPart() { URL wsdlURL = DescriptionTestUtils2.getWSDLURL("WSDLMultiTests.wsdl"); QName invalidServiceQN = new QName(VALID_SERVICE_NAMESPACE, "invalidServiceName"); try { Service invalidService = Service.create(wsdlURL, invalidServiceQN); fail("Created service with invalid namespace"); } catch (WebServiceException ex) { // Expected code path } catch (Exception ex) { fail("Caught unexpected exception " + ex.toString()); } } public void testValidSameService() { URL wsdlURL = DescriptionTestUtils2.getWSDLURL("WSDLMultiTests.wsdl"); QName validService1QN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_1); Service validService1 = Service.create(wsdlURL, validService1QN); assertNotNull(validService1); QName validService2QN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_1); Service validService2 = Service.create(wsdlURL, validService2QN); assertNotNull(validService2); } public void testValidMultiServices() { URL wsdlURL = DescriptionTestUtils2.getWSDLURL("WSDLMultiTests.wsdl"); QName validService1QN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_1); Service validService1 = Service.create(wsdlURL, validService1QN); assertNotNull(validService1); QName validService2QN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_2); Service validService2 = Service.create(wsdlURL, validService2QN); assertNotNull(validService2); assertNotSame(validService1, validService2); } public void testGetServiceDeclaredPorts() { URL wsdlURL = DescriptionTestUtils2.getWSDLURL("WSDLMultiTests.wsdl"); QName service1QN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_1); Service service1 = Service.create(wsdlURL, service1QN); assertNotNull(service1); ServiceDelegate service1Delegate = DescriptionTestUtils2.getServiceDelegate(service1); assertNotNull (service1Delegate); ServiceDescription service1Desc = service1Delegate.getServiceDescription(); assertNotNull(service1Desc); List<QName> service1PortsList = service1Desc.getPorts(service1Delegate); assertNotNull(service1PortsList); assertEquals(3, service1PortsList.size()); Iterator<QName> service1PortIterator = service1.getPorts(); assertQNameIteratorSameAsList(service1PortIterator, service1PortsList); QName service2QN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_2); Service service2 = Service.create(wsdlURL, service2QN); assertNotNull(service2); ServiceDelegate service2Delegate = DescriptionTestUtils2.getServiceDelegate(service2); assertNotNull (service2Delegate); ServiceDescription service2Desc = service2Delegate.getServiceDescription(); assertNotNull(service2Desc); List<QName> service2PortsList = service2Desc.getPorts(service2Delegate); assertNotNull(service2PortsList); assertEquals(4, service2PortsList.size()); Iterator<QName> service2PortIterator = service2.getPorts(); assertQNameIteratorSameAsList(service2PortIterator, service2PortsList); } public void testGetServiceAddedPorts() { URL wsdlURL = DescriptionTestUtils2.getWSDLURL("WSDLMultiTests.wsdl"); QName service1QN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_1); Service service1 = Service.create(wsdlURL, service1QN); assertNotNull(service1); ServiceDelegate service1Delegate = DescriptionTestUtils2.getServiceDelegate(service1); assertNotNull (service1Delegate); ServiceDescription service1Desc = service1Delegate.getServiceDescription(); assertNotNull(service1Desc); List<QName> service1PortsList = service1Desc.getPorts(service1Delegate); assertNotNull(service1PortsList); assertEquals(3, service1PortsList.size()); service1.addPort(new QName(VALID_SERVICE_NAMESPACE, "addedPortS1P1"), null, null); service1.addPort(new QName(VALID_SERVICE_NAMESPACE, "addedPortS1P2"), null, null); service1PortsList = service1Desc.getPorts(service1Delegate); assertEquals(5, service1PortsList.size()); Iterator<QName> service1PortIterator = service1.getPorts(); assertQNameIteratorSameAsList(service1PortIterator, service1PortsList); QName service2QN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_2); Service service2 = Service.create(wsdlURL, service2QN); assertNotNull(service2); ServiceDelegate service2Delegate = DescriptionTestUtils2.getServiceDelegate(service2); assertNotNull (service2Delegate); ServiceDescription service2Desc = service2Delegate.getServiceDescription(); assertNotNull(service2Desc); List<QName> service2PortsList = service2Desc.getPorts(service2Delegate); assertNotNull(service2PortsList); assertEquals(4, service2PortsList.size()); service2.addPort(new QName(VALID_SERVICE_NAMESPACE, "addedPortS2P1"), null, null); service2.addPort(new QName(VALID_SERVICE_NAMESPACE, "addedPortS2P2"), null, null); service2PortsList = service2Desc.getPorts(service2Delegate); assertEquals(6, service2PortsList.size()); Iterator<QName> service2PortIterator = service2.getPorts(); assertQNameIteratorSameAsList(service2PortIterator, service2PortsList); } public void testGetServiceDeclaredPortsAfterGetPort() { URL wsdlURL = DescriptionTestUtils2.getWSDLURL("WSDLMultiTests.wsdl"); QName service1QN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_1); Service service1 = Service.create(wsdlURL, service1QN); assertNotNull(service1); ServiceDelegate service1Delegate = DescriptionTestUtils2.getServiceDelegate(service1); assertNotNull (service1Delegate); ServiceDescription service1Desc = service1Delegate.getServiceDescription(); assertNotNull(service1Desc); List<QName> service1PortsList = service1Desc.getPorts(service1Delegate); assertNotNull(service1PortsList); assertEquals(3, service1PortsList.size()); AddNumbersPortType addNumbersPortS1P1 = service1.getPort(new QName(VALID_SERVICE_NAMESPACE, VALID_PORT_S1P1), AddNumbersPortType.class); service1PortsList = service1Desc.getPorts(service1Delegate); assertEquals(3, service1PortsList.size()); AddNumbersPortType addNumbersPortS1P3 = service1.getPort(new QName(VALID_SERVICE_NAMESPACE, VALID_PORT_S1P3), AddNumbersPortType.class); assertEquals(3, service1PortsList.size()); service1.addPort(new QName(VALID_SERVICE_NAMESPACE, "addedPortS1P1"), null, null); service1.addPort(new QName(VALID_SERVICE_NAMESPACE, "addedPortS1P2"), null, null); service1PortsList = service1Desc.getPorts(service1Delegate); assertEquals(5, service1PortsList.size()); Iterator<QName> service1PortIterator = service1.getPorts(); assertQNameIteratorSameAsList(service1PortIterator, service1PortsList); QName service2QN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_2); Service service2 = Service.create(wsdlURL, service2QN); assertNotNull(service2); ServiceDelegate service2Delegate = DescriptionTestUtils2.getServiceDelegate(service2); assertNotNull (service2Delegate); ServiceDescription service2Desc = service2Delegate.getServiceDescription(); assertNotNull(service2Desc); List<QName> service2PortsList = service2Desc.getPorts(service2Delegate); assertNotNull(service2PortsList); assertEquals(4, service2PortsList.size()); AddNumbersPortType addNumbersPortS2P1 = service2.getPort(new QName(VALID_SERVICE_NAMESPACE, VALID_PORT_S2P1), AddNumbersPortType.class); service2PortsList = service2Desc.getPorts(service2Delegate); assertEquals(4, service2PortsList.size()); AddNumbersPortType addNumbersPortS2P3 = service2.getPort(new QName(VALID_SERVICE_NAMESPACE, VALID_PORT_S2P3), AddNumbersPortType.class); assertEquals(4, service2PortsList.size()); AddNumbersPortType addNumbersPortS2P4 = service2.getPort(new QName(VALID_SERVICE_NAMESPACE, VALID_PORT_S2P4), AddNumbersPortType.class); assertEquals(4, service2PortsList.size()); service2.addPort(new QName(VALID_SERVICE_NAMESPACE, "addedPortS2P1"), null, null); service2.addPort(new QName(VALID_SERVICE_NAMESPACE, "addedPortS2P2"), null, null); service2PortsList = service2Desc.getPorts(service2Delegate); assertEquals(6, service2PortsList.size()); Iterator<QName> service2PortIterator = service2.getPorts(); assertQNameIteratorSameAsList(service2PortIterator, service2PortsList); } public void testDynamicService() { QName service1QN = new QName(VALID_SERVICE_NAMESPACE, "DynamicService1"); Service service1 = Service.create(null, service1QN); assertNotNull(service1); ServiceDelegate service1Delegate = DescriptionTestUtils2.getServiceDelegate(service1); assertNotNull (service1Delegate); ServiceDescription service1Desc = service1Delegate.getServiceDescription(); assertNotNull(service1Desc); List<QName> service1PortsList = service1Desc.getPorts(service1Delegate); assertNotNull(service1PortsList); assertTrue(service1PortsList.isEmpty()); assertEquals(0, service1PortsList.size()); AddNumbersPortType addNumbersPortS1P1 = service1.getPort(new QName(VALID_SERVICE_NAMESPACE, "dynamicPortS1P1"), AddNumbersPortType.class); service1PortsList = service1Desc.getPorts(service1Delegate); assertEquals(1, service1PortsList.size()); AddNumbersPortType addNumbersPortS1P3 = service1.getPort(new QName(VALID_SERVICE_NAMESPACE, "dynamicPortS1P2"), AddNumbersPortType.class); service1PortsList = service1Desc.getPorts(service1Delegate); assertEquals(2, service1PortsList.size()); service1.addPort(new QName(VALID_SERVICE_NAMESPACE, "addedPortS1P1"), null, null); service1.addPort(new QName(VALID_SERVICE_NAMESPACE, "addedPortS1P2"), null, null); service1PortsList = service1Desc.getPorts(service1Delegate); assertEquals(4, service1PortsList.size()); Iterator<QName> service1PortIterator = service1.getPorts(); assertQNameIteratorSameAsList(service1PortIterator, service1PortsList); } public void testCreateDispatchWSDL() { URL wsdlURL = DescriptionTestUtils2.getWSDLURL("WSDLMultiTests.wsdl"); QName service1QN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_1); Service service1 = Service.create(wsdlURL, service1QN); assertNotNull(service1); // Create Dispatch should work on a WSDL declared port prior to a getPort // and again after the call to getPort QName validPortQName = new QName(VALID_SERVICE_NAMESPACE, VALID_PORT_S1P1); Dispatch<String> dispatch = service1.createDispatch(validPortQName, String.class, null); assertNotNull(dispatch); AddNumbersPortType addNumbersPortS1P1 = service1.getPort(validPortQName, AddNumbersPortType.class); assertNotNull(addNumbersPortS1P1); // Create Dispatch should NOT work on a dynamic port that has not been added yet // but should work after it has been added QName addedPort = new QName(VALID_SERVICE_NAMESPACE, "addedPortS1P1"); try { Dispatch<String> dispatch2 = service1.createDispatch(addedPort, String.class, null); fail("Create Dispatch on non-existant port should have thrown an exception"); } catch (WebServiceException ex) { // Expected path } catch (Exception ex) { fail("Unexpected exception thrown " + ex.toString()); } service1.addPort(addedPort, null, null); Dispatch<String> dispatch2 = service1.createDispatch(addedPort, String.class, null); assertNotNull(dispatch2); } public void testCreateDispatchNoWSDL() { // Note that this test is intentionally using the same names as the WSDL test, even though no WSDL is // provided. This is to verify that using the same names in the abscense of WSDL doesn't cause any // issues. QName service1QN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_1); Service service1 = Service.create(service1QN); assertNotNull(service1); // Create Dispatch should NOT work on a dynamic port prior to a getPort // but should work after the getPort causes the port to be added. QName validPortQName = new QName(VALID_SERVICE_NAMESPACE, VALID_PORT_S1P1); try { Dispatch<String> dispatch = service1.createDispatch(validPortQName, String.class, null); fail("Create Dispatch on non-existant port should have thrown and exception"); } catch (WebServiceException ex) { // Expected path } catch (Exception ex) { fail("Unexpected exception thrown " + ex.toString()); } AddNumbersPortType addNumbersPortS1P1 = service1.getPort(validPortQName, AddNumbersPortType.class); Dispatch<String> dispatch = service1.createDispatch(validPortQName, String.class, null); assertNotNull(dispatch); // Create Dispatch should NOT work on a dynamic port that has not been added yet // but should work after it has been added QName addedPort = new QName(VALID_SERVICE_NAMESPACE, "addedPortS1P1"); try { Dispatch<String> dispatch2 = service1.createDispatch(addedPort, String.class, null); fail("Create Dispatch on non-existant port should have thrown an exception"); } catch (WebServiceException ex) { // Expected path } catch (Exception ex) { fail("Unexpected exception thrown " + ex.toString()); } service1.addPort(addedPort, null, null); Dispatch<String> dispatch2 = service1.createDispatch(addedPort, String.class, null); assertNotNull(dispatch2); } private void assertQNameIteratorSameAsList(Iterator<QName> iterator, List<QName> list) { int iteratorSize = 0; for (QName iteratorElement = null; iterator.hasNext(); ) { iteratorElement = iterator.next(); iteratorSize++; assertTrue(list.contains(iteratorElement)); } assertEquals(list.size(), iteratorSize); } }