/* * 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.converter.JavaClassToDBCConverter; import javax.jws.WebService; import java.util.HashMap; import java.util.List; /** * */ public class ValidateServiceImplTests extends TestCase { public void testValidServiceImpl() { try { Class serviceImplClass = ServiceImpl.class; JavaClassToDBCConverter converter = new JavaClassToDBCConverter(serviceImplClass); HashMap<String, DescriptionBuilderComposite> dbcMap = converter.produceDBC(); List<ServiceDescription> serviceDescList = DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap); assertNotNull(serviceDescList); assertEquals(1, serviceDescList.size()); } catch (Exception e) { e.printStackTrace(); fail("Caught unexpected exception" + e); } } public void testMissingMethods() { try { Class serviceImplClass = MissingMethodsImpl.class; JavaClassToDBCConverter converter = new JavaClassToDBCConverter(serviceImplClass); HashMap<String, DescriptionBuilderComposite> dbcMap = converter.produceDBC(); List<ServiceDescription> serviceDescList = DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap); fail("Should have caused exception"); } catch (Exception e) { // Expected path } } public void testInvalidThrows() { try { Class serviceImplClass = InvalidThrowsImpl.class; JavaClassToDBCConverter converter = new JavaClassToDBCConverter(serviceImplClass); HashMap<String, DescriptionBuilderComposite> dbcMap = converter.produceDBC(); List<ServiceDescription> serviceDescList = DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap); fail("Should have caused exception"); } catch (Exception e) { // Expected path } } public void testMismatchedReturnTypesDBC() { try { Class serviceImplClass = ServiceImpl.class; JavaClassToDBCConverter converter = new JavaClassToDBCConverter(serviceImplClass); HashMap<String, DescriptionBuilderComposite> dbcMap = converter.produceDBC(); // Set the return types for one of the methods on the impl class to mismatch the SEI DescriptionBuilderComposite implDBC = dbcMap.get("org.apache.axis2.jaxws.description.ServiceImpl"); assertNotNull(implDBC); List<MethodDescriptionComposite> m1MDCList = implDBC.getMethodDescriptionComposite("method1"); assertNotNull(m1MDCList); assertEquals(1, m1MDCList.size()); MethodDescriptionComposite m1MDC = m1MDCList.get(0); assertEquals("java.lang.String", m1MDC.getReturnType()); m1MDC.setReturnType("lava.lang.Integer"); List<ServiceDescription> serviceDescList = DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap); fail("Should have caused exception"); } catch (Exception e) { // Expected path } } public void testMismatchedReturnTypes() { try { Class serviceImplClass = MismatchedReturnTypesImpl.class; JavaClassToDBCConverter converter = new JavaClassToDBCConverter(serviceImplClass); HashMap<String, DescriptionBuilderComposite> dbcMap = converter.produceDBC(); List<ServiceDescription> serviceDescList = DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap); fail("Should have caused exception"); } catch (Exception e) { // Expected path } } public void testMismatchedParameterNumber() { try { Class serviceImplClass = MismatchedParameterNumberImpl.class; JavaClassToDBCConverter converter = new JavaClassToDBCConverter(serviceImplClass); HashMap<String, DescriptionBuilderComposite> dbcMap = converter.produceDBC(); List<ServiceDescription> serviceDescList = DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap); fail("Should have caused exception"); } catch (Exception e) { // Expected path } } public void testMismatchedParameterTypes() { try { Class serviceImplClass = MismatchedParameterTypesImpl.class; JavaClassToDBCConverter converter = new JavaClassToDBCConverter(serviceImplClass); HashMap<String, DescriptionBuilderComposite> dbcMap = converter.produceDBC(); List<ServiceDescription> serviceDescList = DescriptionFactory.createServiceDescriptionFromDBCMap(dbcMap); fail("Should have caused exception"); } catch (Exception e) { // Expected path } } } @WebService interface EndpointInterface { public String method1(int param1, int param2) throws MyException; public void method2(String param1) throws MyException; public int method3(); } class MyException extends Exception { } @WebService (endpointInterface = "org.apache.axis2.jaxws.description.EndpointInterface") class ServiceImpl { public String method1(int param1, int param2) throws MyException { return null; } // Intentionally doesn't throw MyException. It is valid for a service impl to throw // fewer exceptions than the endpoint interface public void method2(String param1) { } public int method3() { return 0; } } @WebService (endpointInterface = "org.apache.axis2.jaxws.description.EndpointInterface") class MissingMethodsImpl { public String method1(int param1, int param2) { return null; } // public void method2(String param1) { // // } public int method3() { return 0; } } @WebService (endpointInterface = "org.apache.axis2.jaxws.description.EndpointInterface") class InvalidThrowsImpl { public String method1(int param1, int param2) throws MyException { return null; } // Intentionally doesn't throw MyException. It is valid for a service impl to throw // fewer exceptions than the endpoint interface public void method2(String param1) { } // It is invalid to throw more exceptions than the endpoint interface public int method3() throws MyException { return 0; } } @WebService (endpointInterface = "org.apache.axis2.jaxws.description.EndpointInterface") class MismatchedReturnTypesImpl { // Return type doesn't match SEI public Integer method1(int param1, int param2) throws MyException { return null; } public void method2(String param1) { } public int method3() { return 0; } } @WebService (endpointInterface = "org.apache.axis2.jaxws.description.EndpointInterface") class MismatchedParameterNumberImpl { public String method1(int param1) throws MyException { return null; } public void method2(String param1) { } public int method3() { return 0; } } @WebService (endpointInterface = "org.apache.axis2.jaxws.description.EndpointInterface") class MismatchedParameterTypesImpl { public String method1(int param1, String param2) throws MyException { return null; } // Intentionally doesn't throw MyException. It is valid for a service impl to throw // fewer exceptions than the endpoint interface public void method2(String param1) { } public int method3() { return 0; } }