| /* |
| * 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.BindingProvider; |
| import org.apache.axis2.jaxws.spi.ServiceDelegate; |
| import org.apache.axis2.jaxws.unitTest.echo.EchoPort; |
| |
| import javax.wsdl.Port; |
| import javax.xml.namespace.QName; |
| import javax.xml.ws.Service; |
| import javax.xml.ws.WebServiceException; |
| import java.lang.reflect.Proxy; |
| import java.net.URL; |
| import java.util.List; |
| import java.util.Map; |
| |
| /** |
| * |
| */ |
| public class PortSelectionTests extends TestCase { |
| private static String VALID_SERVICE_NAMESPACE = "http://org/test/addnumbers"; |
| private static String VALID_SERVICE_LOCALPART_3 = "AddNumbersService3"; |
| |
| public void testServiceDescPortSelectionMethods() { |
| URL wsdlURL = DescriptionTestUtils2.getWSDLURL("WSDLMultiTests.wsdl"); |
| |
| QName serviceQN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_3); |
| Service service = Service.create(wsdlURL, serviceQN); |
| assertNotNull(service); |
| ServiceDelegate serviceDelegate = DescriptionTestUtils2.getServiceDelegate(service); |
| assertNotNull(serviceDelegate); |
| ServiceDescription serviceDesc = serviceDelegate.getServiceDescription(); |
| assertNotNull(serviceDesc); |
| |
| ServiceDescriptionWSDL serviceDescWSDL = (ServiceDescriptionWSDL) serviceDesc; |
| |
| Map allPorts = serviceDescWSDL.getWSDLPorts(); |
| assertEquals(4, allPorts.size()); |
| |
| QName portTypeQName = new QName(VALID_SERVICE_NAMESPACE, "AddNumbersPortType"); |
| List<Port> portsUsingPortType = serviceDescWSDL.getWSDLPortsUsingPortType(portTypeQName); |
| assertEquals(3, portsUsingPortType.size()); |
| |
| QName otherPortTypeQName = new QName(VALID_SERVICE_NAMESPACE, "AddNumbersPortTypeOtherPT"); |
| List<Port> portsUsingOtherPortType = serviceDescWSDL.getWSDLPortsUsingPortType(otherPortTypeQName); |
| assertEquals(1, portsUsingOtherPortType.size()); |
| |
| List<Port> portsUsingSOAPAddress = serviceDescWSDL.getWSDLPortsUsingSOAPAddress(portsUsingPortType); |
| assertEquals(2, portsUsingSOAPAddress.size()); |
| } |
| |
| public void testPortSelection() { |
| // Test the Service.getPort call |
| URL wsdlURL = DescriptionTestUtils2.getWSDLURL("WSDLMultiTests.wsdl"); |
| |
| QName serviceQN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_3); |
| Service service = Service.create(wsdlURL, serviceQN); |
| assertNotNull(service); |
| AddNumbersPortType selectPort = service.getPort(AddNumbersPortType.class); |
| BindingProvider bindingProvider = (BindingProvider)Proxy.getInvocationHandler(selectPort); |
| EndpointDescription endpointDesc = bindingProvider.getEndpointDescription(); |
| QName selectedPortQName = endpointDesc.getPortQName(); |
| assertNotNull(selectedPortQName); |
| // We expect the first port in the WSDL which uses the PortType for the SEI AddNumbersPortType to be selected |
| // UNFORTUNATELY! WSDL4J Service.getPorts(), which returns a Map of ports under the service DOES NOT return |
| // them in the order defined in the WSDL. Therefore, we can't necessarily predict which one we'll get back. |
| // So, the following two lines may cause the test to fail. |
| // QName expectedQName = new QName(VALID_SERVICE_NAMESPACE, "AddNumbersPortS3P2"); |
| // assertEquals(expectedQName, selectedPortQName); |
| // So, the best we can do is just test that ONE of the valid ports is the one that was selected. |
| boolean testSuccessful = false; |
| QName[] validPorts = new QName[3]; |
| validPorts[0] = new QName(VALID_SERVICE_NAMESPACE, "AddNumbersPortS3P2"); |
| validPorts[1] = new QName(VALID_SERVICE_NAMESPACE, "AddNumbersPortS3P3"); |
| validPorts[2] = new QName(VALID_SERVICE_NAMESPACE, "AddNumbersPortS3P4"); |
| for (QName checkPort : validPorts) { |
| if (selectedPortQName.equals(checkPort)) { |
| testSuccessful = true; |
| break; |
| } |
| } |
| assertTrue(testSuccessful); |
| } |
| |
| public void testInvalidPortSelection() { |
| URL wsdlURL = DescriptionTestUtils2.getWSDLURL("WSDLMultiTests.wsdl"); |
| |
| QName serviceQN = new QName(VALID_SERVICE_NAMESPACE, VALID_SERVICE_LOCALPART_3); |
| Service service = Service.create(wsdlURL, serviceQN); |
| assertNotNull(service); |
| // There should be no ports in the service that use this SEI! |
| try { |
| EchoPort selectPort = service.getPort(EchoPort.class); |
| fail("Shouldn't have found a port for the given SEI!"); |
| } |
| catch (WebServiceException ex) { |
| // Expected code path |
| } |
| catch (Exception ex) { |
| fail("Unexpected exception " + ex.toString()); |
| } |
| |
| |
| } |
| |
| } |