| /* |
| * 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.DescriptionBuilderComposite; |
| import org.apache.axis2.jaxws.description.builder.MethodDescriptionComposite; |
| import org.apache.axis2.jaxws.description.builder.ParameterDescriptionComposite; |
| import org.apache.axis2.jaxws.description.builder.WebMethodAnnot; |
| import org.apache.axis2.jaxws.description.builder.WebParamAnnot; |
| import org.apache.axis2.jaxws.description.builder.WebServiceAnnot; |
| import org.apache.axis2.jaxws.description.builder.converter.JavaClassToDBCConverter; |
| |
| import javax.jws.WebParam; |
| import javax.jws.WebService; |
| import javax.xml.ws.WebServiceException; |
| import java.io.File; |
| import java.io.IOException; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| |
| /** |
| * Tests the creation of the Description classes based on a service implementation bean and various |
| * combinations of annotations |
| */ |
| public class AnnotationServiceImplWithDBCTests extends TestCase { |
| /** |
| * Create the description classes with a service implementation that contains the @WebService |
| * JSR-181 annotation which references an SEI. |
| */ |
| |
| //Test creation of a Service Description from DBC, using a basic list. |
| //An implicit SEI that extends only java.lang.object |
| public void testServiceImplAsImplicitSEI() { |
| //org.apache.log4j.BasicConfigurator.configure(); |
| |
| //Build a Hashmap of DescriptionBuilderComposites that contains the serviceImpl and |
| //all necessary associated DBC's possibly including SEI and superclasses |
| HashMap<String, DescriptionBuilderComposite> dbcMap = |
| new HashMap<String, DescriptionBuilderComposite>(); |
| |
| DescriptionBuilderComposite dbc = buildDBCNoEndpointInterface(); |
| |
| dbcMap.put(dbc.getClassName(), dbc); |
| |
| // TODO: This test is invalid as is. It does not specify WSDL, and WSDL generator is not currently available in Open Source |
| // So, an exception is currently being thrown. It may be the correct fix is to NOT always try to generate WSDL; and only |
| // try to generate it if it is asked for. |
| try { |
| List<ServiceDescription> serviceDescList = |
| DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap); |
| assertNotNull(serviceDescList.get(0)); |
| |
| //We know this list contains only one SD, so no need to loop |
| EndpointDescription[] endpointDesc = serviceDescList.get(0).getEndpointDescriptions(); |
| assertNotNull(endpointDesc); |
| assertEquals(endpointDesc.length, 1); |
| |
| // TODO: How will the JAX-WS dispatcher get the appropriate port (i.e. endpoint)? Currently assumes [0] |
| EndpointInterfaceDescription endpointIntfDesc = |
| endpointDesc[0].getEndpointInterfaceDescription(); |
| assertNotNull(endpointIntfDesc); |
| |
| } catch (WebServiceException e) { |
| } |
| |
| /* |
| * Deprecated -- this used to be the test for |
| * EndpointInterfaceDescription.getOperationForJavaMethod |
| */ |
| /* |
| OperationDescription[] operations = endpointIntfDesc.getOperations(); |
| |
| String[] paramTypes = operations[0].getJavaParameters(); |
| assertNotNull(paramTypes); |
| assertEquals(paramTypes.length, 1); |
| assertEquals("javax.xml.ws.Holder", paramTypes[0]); |
| |
| // Test RequestWrapper annotations |
| assertEquals(operations[0].getRequestWrapperLocalName(), "Echo"); |
| assertEquals(operations[0].getRequestWrapperTargetNamespace(), "http://ws.apache.org/axis2/tests"); |
| assertEquals(operations[0].getRequestWrapperClassName(), "org.apache.ws.axis2.tests.Echo"); |
| |
| // Test ResponseWrapper annotations |
| assertEquals(operations[0].getResponseWrapperLocalName(), "EchoResponse"); |
| assertEquals(operations[0].getResponseWrapperTargetNamespace(), "http://ws.apache.org/axis2/tests"); |
| assertEquals(operations[0].getResponseWrapperClassName(), "org.apache.ws.axis2.tests.EchoResponse"); |
| |
| // Test SOAPBinding default; that annotation is not present in the SEI |
| // Note that annotation could occur on the operation or the type |
| // (although on this SEI it doesn't occur either place). |
| assertEquals(SOAPBinding.Style.DOCUMENT, operations[0].getSoapBindingStyle()); |
| assertEquals(SOAPBinding.Style.DOCUMENT, endpointIntfDesc.getSoapBindingStyle()); |
| */ |
| } |
| |
| //TODO: Basic Test with EndpointInterface set to something valid, so another DBC must |
| // exist in list |
| |
| //TODO: Basic Test for Provider |
| |
| //TODO: Validation Tests |
| // - Setting WS and WSP |
| // - Fail just one in List, But allow successful ones to pass |
| |
| /* |
| * Method to return the endpoint interface description for a given implementation class. |
| */ |
| |
| //private EndpointInterfaceDescription getEndpointInterfaceDesc(Class implementationClass) { |
| // // Use the description factory directly; this will be done within the JAX-WS runtime |
| // return (new EndpointInterfaceDescription()); |
| // //return testEndpointInterfaceDesc; |
| //} |
| |
| static public DescriptionBuilderComposite buildDBCNoEndpointInterface() { |
| |
| //Create a WebServiceAnnot |
| String WSName = "EchoServiceAnnotated"; |
| String WSTargetNamespace = "http://description.jaxws.axis2.apache.org/"; |
| String WSServiceName = "EchoServiceName"; |
| //String WSWsdlLocation = "http://EchoService/wsdl"; |
| String WSWsdlLocation = ""; |
| String WSEndpointInterface = ""; |
| String WSPortName = "EchoServiceAnnotatedPort"; |
| |
| WebServiceAnnot webServiceAnnot = |
| WebServiceAnnot.createWebServiceAnnotImpl( |
| WSName, |
| WSTargetNamespace, |
| WSServiceName, |
| WSWsdlLocation, |
| WSEndpointInterface, |
| WSPortName); |
| |
| //Create a WebMethodAnnot |
| String operationName = "echoStringMethod"; |
| String action = "urn:EchoStringMethod"; |
| boolean exclude = false; |
| |
| WebMethodAnnot webMethodAnnot = WebMethodAnnot.createWebMethodAnnotImpl(); |
| webMethodAnnot.setOperationName(operationName); |
| webMethodAnnot.setAction(action); |
| webMethodAnnot.setExclude(exclude); |
| |
| //Create the WebParamAnnot |
| String WPName = "arg0"; |
| String WPPartName = "sku"; |
| String WPTargetNamespace = "http://description.jaxws.axis2.apache.org/"; |
| WebParam.Mode WPMode = WebParam.Mode.IN; |
| boolean WPHeader = true; |
| |
| WebParamAnnot webParamAnnot = WebParamAnnot.createWebParamAnnotImpl(); |
| webParamAnnot.setName(WPName); |
| webParamAnnot.setPartName(WPPartName); |
| webParamAnnot.setMode(WPMode); |
| webParamAnnot.setTargetNamespace(WPTargetNamespace); |
| webParamAnnot.setHeader(WPHeader); |
| |
| //Build up the the DBC and all necessary composites |
| ParameterDescriptionComposite pdc = new ParameterDescriptionComposite(); |
| pdc.setParameterType("java.lang.String"); |
| pdc.setWebParamAnnot(webParamAnnot); |
| |
| MethodDescriptionComposite mdc = new MethodDescriptionComposite(); |
| mdc.setWebMethodAnnot(webMethodAnnot); |
| mdc.setMethodName(operationName); |
| mdc.addParameterDescriptionComposite(pdc, 0); |
| |
| DescriptionBuilderComposite dbc = new DescriptionBuilderComposite(); |
| dbc.setClassName("org.apache.axis2.samples.EchoServiceAnnotated"); |
| dbc.setWebServiceAnnot(webServiceAnnot); |
| dbc.addMethodDescriptionComposite(mdc); |
| |
| return dbc; |
| } |
| |
| public void testLoadWSDLImpl() { |
| String wsdlLocation = getEchoMessageServiceWSDLLocation(); |
| |
| // Build up a DBC, including the WSDL Definition and the annotation information for |
| // the impl class. |
| JavaClassToDBCConverter converter = new JavaClassToDBCConverter(EchoMessageService.class); |
| HashMap<String, DescriptionBuilderComposite> dbcMap = converter.produceDBC(); |
| assertNotNull(dbcMap); |
| DescriptionBuilderComposite dbc = dbcMap.get(EchoMessageService.class.getName()); |
| assertNotNull(dbc); |
| dbc.setClassLoader(this.getClass().getClassLoader()); |
| |
| WebServiceAnnot webServiceAnnot = dbc.getWebServiceAnnot(); |
| assertNotNull(webServiceAnnot); |
| webServiceAnnot.setWsdlLocation(wsdlLocation); |
| dbc.setWebServiceAnnot(webServiceAnnot); |
| dbcMap.put(EchoMessageService.class.getName(), dbc); |
| |
| List<ServiceDescription> serviceDescList = |
| DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap); |
| assertEquals(1, serviceDescList.size()); |
| ServiceDescription sd = serviceDescList.get(0); |
| assertNotNull(sd); |
| |
| // make sure the WSDL definition was read in from the appropriate location |
| assertNotNull(((ServiceDescriptionWSDL) sd).getWSDLDefinition()); |
| } |
| |
| public void testLoadWSDLSEI() { |
| String wsdlLocation = getEchoMessageServiceWSDLLocation(); |
| |
| // Build up a DBC, including the WSDL Definition and the annotation information for |
| // the impl class. |
| JavaClassToDBCConverter converter = new JavaClassToDBCConverter(EchoMessageServiceSEI.class); |
| HashMap<String, DescriptionBuilderComposite> dbcMap = converter.produceDBC(); |
| assertNotNull(dbcMap); |
| DescriptionBuilderComposite dbc = dbcMap.get(EchoMessageServiceSEI.class.getName()); |
| assertNotNull(dbc); |
| DescriptionBuilderComposite seiDBC = dbcMap.get(EchoMessageServiceInterface.class.getName()); |
| assertNotNull(seiDBC); |
| dbc.setClassLoader(this.getClass().getClassLoader()); |
| |
| WebServiceAnnot webServiceAnnot = seiDBC.getWebServiceAnnot(); |
| assertNotNull(webServiceAnnot); |
| webServiceAnnot.setWsdlLocation(wsdlLocation); |
| seiDBC.setWebServiceAnnot(webServiceAnnot); |
| dbcMap.put(EchoMessageServiceInterface.class.getName(), seiDBC); |
| |
| List<ServiceDescription> serviceDescList = |
| DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap); |
| assertEquals(1, serviceDescList.size()); |
| ServiceDescription sd = serviceDescList.get(0); |
| assertNotNull(sd); |
| |
| // make sure the WSDL definition was read in from the appropriate location |
| assertNotNull(((ServiceDescriptionWSDL) sd).getWSDLDefinition()); |
| } |
| |
| /** |
| * This is intended to verify that properties set on a DescriptionBuilderComposite |
| * instance are carried over to the EndpointDescription object that is created |
| * from the DBC. |
| */ |
| public void testSetProperties() { |
| |
| //Build a Hashmap of DescriptionBuilderComposites that contains the serviceImpl and |
| //all necessary associated DBC's possibly including SEI and superclasses |
| HashMap<String, DescriptionBuilderComposite> dbcMap = |
| new HashMap<String, DescriptionBuilderComposite>(); |
| |
| DescriptionBuilderComposite dbc = buildDBCNoEndpointInterface(); |
| Map<String, Object> props = new HashMap<String, Object>(); |
| props.put("prop1", "prop1"); |
| props.put("prop2", "prop2"); |
| dbc.setProperties(props); |
| |
| dbcMap.put(dbc.getClassName(), dbc); |
| try { |
| List<ServiceDescription> serviceDescList = |
| DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap); |
| assertNotNull(serviceDescList.get(0)); |
| |
| //We know this list contains only one SD, so no need to loop |
| EndpointDescription[] endpointDesc = serviceDescList.get(0).getEndpointDescriptions(); |
| assertNotNull(endpointDesc); |
| assertEquals(endpointDesc.length, 1); |
| |
| // get the EndpointDescription so we can make sure the properties were |
| // propogated to the underlying Axis runtime objects |
| EndpointDescription ed = endpointDesc[0]; |
| // make sure we find the two properties that were set on the DBC |
| assertNotNull(ed.getProperty("prop1")); |
| assertTrue(ed.getProperty("prop1").equals("prop1")); |
| assertNotNull(ed.getProperty("prop2")); |
| assertTrue(ed.getProperty("prop2").equals("prop2")); |
| |
| } |
| catch(Exception e) { |
| e.printStackTrace(); |
| fail(e.getMessage()); |
| } |
| |
| } |
| |
| private String getEchoMessageServiceWSDLLocation() { |
| String loc = null; |
| String sep = java.io.File.separator; |
| loc = sep + "test-resources" + sep + "wsdl" + sep + "EchoMessageService.wsdl"; |
| try { |
| String baseDir = new File(System.getProperty("basedir",".")).getCanonicalPath(); |
| loc = baseDir + loc; |
| } |
| catch(IOException ioe) { |
| ioe.printStackTrace(); |
| } |
| return loc; |
| } |
| |
| @WebService(serviceName = "EchoMessageService", portName = "EchoMessagePort", targetNamespace = "http://nonanonymous.complextype.test.org", wsdlLocation = "test-resources/wsdl/EchoMessageService.wsdl") |
| public class EchoMessageService { |
| public String echoMessage(String arg) { |
| return arg; |
| } |
| } |
| |
| @WebService(serviceName = "EchoMessageService", endpointInterface= |
| "org.apache.axis2.jaxws.description.AnnotationServiceImplWithDBCTests$EchoMessageServiceInterface") |
| public class EchoMessageServiceSEI { |
| public String echoMessage(String arg) { |
| return arg; |
| } |
| } |
| |
| @WebService(portName = "EchoMessagePort", targetNamespace = "http://nonanonymous.complextype.test.org", wsdlLocation = "test-resources/wsdl/EchoMessageService.wsdl") |
| public interface EchoMessageServiceInterface { |
| public String echoMessage(String arg); |
| } |
| } |
| |
| |
| |