From 747aa47ae5b5f902829e60064aca8dcd773f462d Mon Sep 17 00:00:00 2001 From: slaws Date: Wed, 11 Aug 2010 07:35:04 +0000 Subject: TUSCANY-3641 - Support @WebServiceProvider/wsdlLocation annotation git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@984314 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/introspect/impl/JAXWSProcessor.java | 51 +++++++++++++++------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/sca-java-2.x/trunk/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/JAXWSProcessor.java b/sca-java-2.x/trunk/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/JAXWSProcessor.java index 306951764e..d2678bf93e 100644 --- a/sca-java-2.x/trunk/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/JAXWSProcessor.java +++ b/sca-java-2.x/trunk/modules/implementation-java/src/main/java/org/apache/tuscany/sca/implementation/java/introspect/impl/JAXWSProcessor.java @@ -80,17 +80,18 @@ public class JAXWSProcessor extends BaseJavaClassVisitor { // Process @WebService annotation - POJO_8029, POJO_8030 WebService webServiceAnnotation = clazz.getAnnotation(WebService.class); org.oasisopen.sca.annotation.Service serviceAnnotation = clazz.getAnnotation(org.oasisopen.sca.annotation.Service.class); - String localName = clazz.getSimpleName(); - Class interfaze = clazz; if (webServiceAnnotation != null && serviceAnnotation == null) { - localName = getValue(webServiceAnnotation.name(), localName); - String serviceInterfaceName = webServiceAnnotation.endpointInterface(); + String serviceName = clazz.getSimpleName(); + serviceName = getValue(webServiceAnnotation.name(), serviceName); + + String serviceInterfaceClassName = webServiceAnnotation.endpointInterface(); + String wsdlLocation = webServiceAnnotation.wsdlLocation(); try { - createService(type, clazz, localName, serviceInterfaceName, wsdlLocation); + createService(type, clazz, serviceName, serviceInterfaceClassName, wsdlLocation, false); } catch (InvalidInterfaceException e) { throw new IntrospectionException(e); } @@ -98,15 +99,26 @@ public class JAXWSProcessor extends BaseJavaClassVisitor { // Process @WebServiceProvider annotation - JCA_11015, POJO_8034 WebServiceProvider webServiceProviderAnnotation = clazz.getAnnotation(WebServiceProvider.class); - if (webServiceProviderAnnotation != null && - serviceAnnotation == null) { - localName = clazz.getSimpleName(); - localName = getValue(webServiceProviderAnnotation.serviceName(), localName); + if (webServiceProviderAnnotation != null) { + // if the implmentation already has a service set, use it's name + // and the new service, which uses the implementation as an interface, + // will be replaced + String serviceName = clazz.getSimpleName(); + + if (type.getServices().size() > 0){ + serviceName = ((Service)type.getServices().get(0)).getName(); + } + + // the annotation may specify a service name + serviceName = getValue(webServiceProviderAnnotation.serviceName(), serviceName); + + String wsdlLocation = webServiceProviderAnnotation.wsdlLocation(); // Make sure that there is a service with an interface - // based on the implementation class + // based on the implementation class and have it replace + // any service with the same name try { - createService(type, clazz, localName, null, null); + createService(type, clazz, serviceName, null, wsdlLocation, true); } catch (InvalidInterfaceException e) { throw new IntrospectionException(e); } @@ -118,6 +130,7 @@ public class JAXWSProcessor extends BaseJavaClassVisitor { } // Process @WebParam and @WebResult annotations - POJO_8031, POJO_8032 + Class interfaze = clazz; Method[] implMethods = interfaze.getDeclaredMethods(); for ( Service service : type.getServices() ) { JavaInterface javaInterface = (JavaInterface)service.getInterfaceContract().getInterface(); @@ -178,7 +191,7 @@ public class JAXWSProcessor extends BaseJavaClassVisitor { return "".equals(value) ? defaultValue : value; } - public Service createService(JavaImplementation type, Class clazz, String serviceName, String javaInterfaceName, String wsdlFileName) throws InvalidInterfaceException, IntrospectionException { + public Service createService(JavaImplementation type, Class clazz, String serviceName, String javaInterfaceName, String wsdlFileName, boolean replace) throws InvalidInterfaceException, IntrospectionException { Service service = assemblyFactory.createService(); if (serviceName != null) { @@ -221,15 +234,21 @@ public class JAXWSProcessor extends BaseJavaClassVisitor { } // add the service model into the implementation type - boolean serviceAlreadyPresent = false; + Service serviceAlreadyPresent = null; for (Service typeService : type.getServices()){ if (typeService.getName().equals(service.getName())){ - serviceAlreadyPresent = true; + serviceAlreadyPresent = typeService; break; } } - if (!serviceAlreadyPresent){ - type.getServices().add(service); + + if (replace == true){ + type.getServices().remove(serviceAlreadyPresent); + type.getServices().add(service); + } else { + if (serviceAlreadyPresent == null){ + type.getServices().add(service); + } } return service; -- cgit v1.2.3