blob: a3c438e2d705a85dc173e0940984df18909d5665 [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.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);
}
}