| /* |
| * 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.builder.MDQConstants; |
| import org.apache.log4j.BasicConfigurator; |
| |
| import javax.jws.WebService; |
| import javax.xml.soap.SOAPMessage; |
| import javax.xml.transform.Source; |
| import javax.xml.ws.BindingType; |
| import javax.xml.ws.Provider; |
| import javax.xml.ws.Service; |
| import javax.xml.ws.ServiceMode; |
| import javax.xml.ws.WebServiceException; |
| import javax.xml.ws.WebServiceProvider; |
| |
| public class AnnotationProviderImplDescriptionTests extends TestCase { |
| static { |
| // Note you will probably need to increase the java heap size, for example |
| // -Xmx512m. This can be done by setting maven.junit.jvmargs in project.properties. |
| // To change the settings, edit the log4j.property file |
| // in the test-resources directory. |
| BasicConfigurator.configure(); |
| } |
| |
| |
| public void testBasicProvider() { |
| // Use the description factory directly; this will be done within the JAX-WS runtime |
| ServiceDescription serviceDesc = |
| DescriptionFactory.createServiceDescription(BasicProviderTestImpl.class); |
| assertNotNull(serviceDesc); |
| |
| EndpointDescription[] endpointDesc = serviceDesc.getEndpointDescriptions(); |
| assertNotNull(endpointDesc); |
| assertEquals(1, endpointDesc.length); |
| |
| // TODO: How will the JAX-WS dispatcher get the appropriate port (i.e. endpoint)? Currently assumes [0] |
| EndpointDescriptionJava testEndpointDesc = (EndpointDescriptionJava)endpointDesc[0]; |
| assertNotNull(testEndpointDesc); |
| assertEquals(Service.Mode.MESSAGE, testEndpointDesc.getAnnoServiceModeValue()); |
| assertEquals("http://www.w3.org/2003/05/soap/bindings/HTTP/", |
| testEndpointDesc.getAnnoBindingTypeValue()); |
| // The WebServiceProvider annotation specified no values on it. |
| // TODO: When the Description package changes to provide default values when no annotation present, this may need to change. |
| assertEquals("", testEndpointDesc.getAnnoWebServiceWSDLLocation()); |
| assertEquals("BasicProviderTestImplService", |
| testEndpointDesc.getAnnoWebServiceServiceName()); |
| assertEquals("BasicProviderTestImplPort", testEndpointDesc.getAnnoWebServicePortName()); |
| assertEquals("http://description.jaxws.axis2.apache.org/", |
| testEndpointDesc.getAnnoWebServiceTargetNamespace()); |
| |
| } |
| |
| public void testBasicProviderWithJMS() { |
| // Use the description factory directly; this will be done within the JAX-WS runtime |
| ServiceDescription serviceDesc = |
| DescriptionFactory.createServiceDescription(BasicProviderJMSTestImpl.class); |
| assertNotNull(serviceDesc); |
| |
| EndpointDescription[] endpointDesc = serviceDesc.getEndpointDescriptions(); |
| assertNotNull(endpointDesc); |
| assertEquals(1, endpointDesc.length); |
| |
| // TODO: How will the JAX-WS dispatcher get the appropriate port (i.e. endpoint)? Currently assumes [0] |
| EndpointDescriptionJava testEndpointDesc = (EndpointDescriptionJava)endpointDesc[0]; |
| assertNotNull(testEndpointDesc); |
| assertEquals(Service.Mode.MESSAGE, testEndpointDesc.getAnnoServiceModeValue()); |
| assertEquals(MDQConstants.SOAP12JMS_BINDING, |
| testEndpointDesc.getAnnoBindingTypeValue()); |
| |
| // The WebServiceProvider annotation specified no values on it. |
| // TODO: When the Description package changes to provide default values when no annotation present, this may need to change. |
| assertEquals("", testEndpointDesc.getAnnoWebServiceWSDLLocation()); |
| assertEquals("BasicProviderJMSTestImplService", |
| testEndpointDesc.getAnnoWebServiceServiceName()); |
| assertEquals("BasicProviderJMSTestImplPort", testEndpointDesc.getAnnoWebServicePortName()); |
| assertEquals("http://description.jaxws.axis2.apache.org/", |
| testEndpointDesc.getAnnoWebServiceTargetNamespace()); |
| } |
| |
| public void testWebServiceProvider() { |
| // Use the description factory directly; this will be done within the JAX-WS runtime |
| ServiceDescription serviceDesc = |
| DescriptionFactory.createServiceDescription(WebServiceProviderTestImpl.class); |
| assertNotNull(serviceDesc); |
| |
| EndpointDescription[] endpointDesc = serviceDesc.getEndpointDescriptions(); |
| assertNotNull(endpointDesc); |
| assertEquals(1, endpointDesc.length); |
| |
| // TODO: How will the JAX-WS dispatcher get the appropriate port (i.e. endpoint)? Currently assumes [0] |
| EndpointDescriptionJava testEndpointDesc = (EndpointDescriptionJava)endpointDesc[0]; |
| assertNotNull(testEndpointDesc); |
| assertEquals(Service.Mode.PAYLOAD, testEndpointDesc.getAnnoServiceModeValue()); |
| assertEquals("http://www.w3.org/2003/05/soap/bindings/HTTP/", |
| testEndpointDesc.getAnnoBindingTypeValue()); |
| |
| assertEquals("http://wsdl.test", testEndpointDesc.getAnnoWebServiceWSDLLocation()); |
| assertEquals("ProviderService", testEndpointDesc.getAnnoWebServiceServiceName()); |
| assertEquals("ProviderServicePort", testEndpointDesc.getAnnoWebServicePortName()); |
| assertEquals("http://namespace.test", testEndpointDesc.getAnnoWebServiceTargetNamespace()); |
| } |
| |
| public void testWebServiceProviderWithJMS() { |
| // Use the description factory directly; this will be done within the JAX-WS runtime |
| ServiceDescription serviceDesc = |
| DescriptionFactory.createServiceDescription(WebServiceProviderJMSTestImpl.class); |
| assertNotNull(serviceDesc); |
| |
| EndpointDescription[] endpointDesc = serviceDesc.getEndpointDescriptions(); |
| assertNotNull(endpointDesc); |
| assertEquals(1, endpointDesc.length); |
| |
| // TODO: How will the JAX-WS dispatcher get the appropriate port (i.e. endpoint)? Currently assumes [0] |
| EndpointDescriptionJava testEndpointDesc = (EndpointDescriptionJava)endpointDesc[0]; |
| assertNotNull(testEndpointDesc); |
| assertEquals(Service.Mode.PAYLOAD, testEndpointDesc.getAnnoServiceModeValue()); |
| assertEquals(MDQConstants.SOAP12JMS_BINDING, |
| testEndpointDesc.getAnnoBindingTypeValue()); |
| |
| assertEquals("http://wsdl.test", testEndpointDesc.getAnnoWebServiceWSDLLocation()); |
| assertEquals("ProviderService", testEndpointDesc.getAnnoWebServiceServiceName()); |
| assertEquals("ProviderServicePort", testEndpointDesc.getAnnoWebServicePortName()); |
| assertEquals("http://namespace.test", testEndpointDesc.getAnnoWebServiceTargetNamespace()); |
| } |
| |
| |
| public void testDefaultServiceModeProvider() { |
| // Use the description factory directly; this will be done within the JAX-WS runtime |
| ServiceDescription serviceDesc = |
| DescriptionFactory |
| .createServiceDescription(DefaultServiceModeProviderTestImpl.class); |
| assertNotNull(serviceDesc); |
| |
| EndpointDescription[] endpointDesc = serviceDesc.getEndpointDescriptions(); |
| assertNotNull(endpointDesc); |
| assertEquals(1, endpointDesc.length); |
| |
| // TODO: How will the JAX-WS dispatcher get the appropriate port (i.e. endpoint)? Currently assumes [0] |
| EndpointDescriptionJava testEndpointDesc = (EndpointDescriptionJava)endpointDesc[0]; |
| // Default ServiceMode is PAYLOAD per JAXWS p. 80 |
| assertEquals(Service.Mode.PAYLOAD, testEndpointDesc.getAnnoServiceModeValue()); |
| assertEquals("http://schemas.xmlsoap.org/wsdl/soap/http", |
| testEndpointDesc.getAnnoBindingTypeValue()); |
| } |
| |
| public void testNoServiceModeProvider() { |
| // Use the description factory directly; this will be done within the JAX-WS runtime |
| ServiceDescription serviceDesc = |
| DescriptionFactory.createServiceDescription(NoServiceModeProviderTestImpl.class); |
| assertNotNull(serviceDesc); |
| |
| EndpointDescription[] endpointDesc = serviceDesc.getEndpointDescriptions(); |
| assertNotNull(endpointDesc); |
| assertEquals(1, endpointDesc.length); |
| |
| // TODO: How will the JAX-WS dispatcher get the appropriate port (i.e. endpoint)? Currently assumes [0] |
| EndpointDescriptionJava testEndpointDesc = (EndpointDescriptionJava)endpointDesc[0]; |
| assertEquals(javax.xml.ws.Service.Mode.PAYLOAD, testEndpointDesc.getAnnoServiceModeValue()); |
| assertEquals(javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING, |
| testEndpointDesc.getAnnoBindingTypeValue()); |
| } |
| |
| public void testNoWebServiceProvider() { |
| // Use the description factory directly; this will be done within the JAX-WS runtime |
| try { |
| DescriptionFactory.createServiceDescription(NoWebServiceProviderTestImpl.class); |
| fail("Expected WebServiceException not caught"); |
| } |
| catch (WebServiceException e) { |
| // This is the expected successful test path |
| } |
| catch (Exception e) { |
| e.printStackTrace(); |
| fail("Wrong exception caught. Expected WebServiceException but caught " + e); |
| } |
| } |
| |
| public void testBothWebServiceAnnotations() { |
| // Use the description factory directly; this will be done within the JAX-WS runtime |
| try { |
| DescriptionFactory.createServiceDescription(BothWebServiceAnnotationTestImpl.class); |
| fail("Expected WebServiceException not caught"); |
| } |
| catch (WebServiceException e) { |
| // This is the expected successful test path |
| } |
| catch (Exception e) { |
| fail("Wrong exception caught. Expected WebServiceException but caught " + e); |
| } |
| } |
| |
| public void testServiceModeOnNonProvider() { |
| // Use the description factory directly; this will be done within the JAX-WS runtime |
| ServiceDescription serviceDesc = |
| DescriptionFactory.createServiceDescription(WebServiceSEITestImpl.class); |
| assertNotNull(serviceDesc); |
| |
| EndpointDescription[] endpointDesc = serviceDesc.getEndpointDescriptions(); |
| assertNotNull(endpointDesc); |
| assertEquals(1, endpointDesc.length); |
| |
| // TODO: How will the JAX-WS dispatcher get the appropriate port (i.e. endpoint)? Currently assumes [0] |
| EndpointDescriptionJava testEndpointDesc = (EndpointDescriptionJava)endpointDesc[0]; |
| assertNull(testEndpointDesc.getAnnoServiceModeValue()); |
| assertEquals(javax.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING, |
| testEndpointDesc.getAnnoBindingTypeValue()); |
| } |
| } |
| |
| //=============================================== |
| //Basic Provider service implementation class |
| //=============================================== |
| |
| @ServiceMode(value = Service.Mode.MESSAGE) |
| @WebServiceProvider() |
| @BindingType(value = "http://www.w3.org/2003/05/soap/bindings/HTTP/") |
| class BasicProviderTestImpl implements Provider<SOAPMessage> { |
| public BasicProviderTestImpl() { |
| } |
| |
| public SOAPMessage invoke(SOAPMessage obj) { |
| return null; |
| } |
| } |
| |
| //=============================================== |
| //Basic Provider service implementation class using SOAP/JMS |
| //=============================================== |
| |
| @ServiceMode(value = Service.Mode.MESSAGE) |
| @WebServiceProvider() |
| @BindingType(MDQConstants.SOAP12JMS_BINDING) |
| class BasicProviderJMSTestImpl implements Provider<SOAPMessage> { |
| public BasicProviderJMSTestImpl() { |
| } |
| |
| public SOAPMessage invoke(SOAPMessage obj) { |
| return null; |
| } |
| } |
| |
| //=============================================== |
| //WebServiceProvider service implementation class |
| //=============================================== |
| |
| @ServiceMode(value = Service.Mode.PAYLOAD) |
| @WebServiceProvider(serviceName = "ProviderService", portName = "ProviderServicePort", |
| targetNamespace = "http://namespace.test", wsdlLocation = "http://wsdl.test") |
| @BindingType(value = "http://www.w3.org/2003/05/soap/bindings/HTTP/") |
| class WebServiceProviderTestImpl implements Provider<String> { |
| public WebServiceProviderTestImpl() { |
| } |
| |
| public String invoke(String obj) { |
| return null; |
| } |
| } |
| |
| //=============================================== |
| //WebServiceProvider service implementation class |
| //=============================================== |
| |
| @ServiceMode(value = Service.Mode.PAYLOAD) |
| @WebServiceProvider(serviceName = "ProviderService", portName = "ProviderServicePort", |
| targetNamespace = "http://namespace.test", wsdlLocation = "http://wsdl.test") |
| @BindingType(MDQConstants.SOAP12JMS_BINDING) |
| class WebServiceProviderJMSTestImpl implements Provider<String> { |
| public WebServiceProviderJMSTestImpl() { |
| } |
| |
| public String invoke(String obj) { |
| return null; |
| } |
| } |
| |
| // =============================================== |
| // Default ServiceMode and BindingType Provider service implementation class |
| // Default is PAYLOAD per JAXWS p. 80 |
| // =============================================== |
| |
| @ServiceMode() |
| @WebServiceProvider() |
| @BindingType() |
| class DefaultServiceModeProviderTestImpl implements Provider<String> { |
| public DefaultServiceModeProviderTestImpl() { |
| } |
| |
| public String invoke(String obj) { |
| return null; |
| } |
| } |
| |
| // =============================================== |
| // No ServiceMode and no BindingType Provider service implementation class |
| // =============================================== |
| |
| @WebServiceProvider() |
| class NoServiceModeProviderTestImpl implements Provider<Source> { |
| public NoServiceModeProviderTestImpl() { |
| } |
| |
| public Source invoke(Source obj) { |
| return null; |
| } |
| } |
| |
| // =============================================== |
| // NO WebServiceProvider Provider service implementation class |
| // This is an INVALID service implementation |
| // =============================================== |
| |
| @ServiceMode(value = Service.Mode.MESSAGE) |
| @BindingType(value = "http://www.w3.org/2003/05/soap/bindings/HTTP/") |
| class NoWebServiceProviderTestImpl implements Provider<SOAPMessage> { |
| public NoWebServiceProviderTestImpl() { |
| } |
| |
| public SOAPMessage invoke(SOAPMessage obj) { |
| return null; |
| } |
| } |
| |
| // =============================================== |
| // BOTH WebService and WebServiceProvider Provider service implementation class |
| // This is an INVALID service implementation |
| //=============================================== |
| |
| @ServiceMode(value = Service.Mode.MESSAGE) |
| @WebService() |
| @WebServiceProvider() |
| @BindingType(value = "http://www.w3.org/2003/05/soap/bindings/HTTP/") |
| class BothWebServiceAnnotationTestImpl implements Provider<SOAPMessage> { |
| public BothWebServiceAnnotationTestImpl() { |
| } |
| |
| public SOAPMessage invoke(SOAPMessage obj) { |
| return null; |
| } |
| } |
| |
| // =============================================== |
| // WebService service implementation class; not |
| // Provider-based |
| // =============================================== |
| |
| @WebService() |
| class WebServiceSEITestImpl { |
| public String echo(String s) { |
| return "From WebServiceSEITestImpl " + "s"; |
| } |
| } |
| |