From 454e76086af9db96bd6d2bfef12a5e2bf36b2e38 Mon Sep 17 00:00:00 2001 From: antelder Date: Thu, 15 Sep 2011 15:10:35 +0000 Subject: Update the WrapperBeanGenerator to create the correct classes for async methods git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1171125 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/jaxws/WrapperBeanGenerator.java | 27 +++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) (limited to 'sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org') diff --git a/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGenerator.java b/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGenerator.java index 764c10ff00..6a664b366e 100644 --- a/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGenerator.java +++ b/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/WrapperBeanGenerator.java @@ -21,6 +21,7 @@ package org.apache.tuscany.sca.interfacedef.java.jaxws; import java.lang.annotation.Annotation; import java.lang.reflect.Method; +import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; @@ -29,6 +30,7 @@ import javax.jws.WebParam; import javax.jws.WebResult; import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil; +import org.oasisopen.sca.ResponseDispatch; public class WrapperBeanGenerator extends BaseBeanGenerator { @@ -71,7 +73,15 @@ public class WrapperBeanGenerator extends BaseBeanGenerator { Type[] genericParamTypes = m.getGenericParameterTypes(); Annotation[][] paramAnnotations = m.getParameterAnnotations(); List properties = new ArrayList(); - for (int i = 0; i < paramTypes.length; i++) { + + boolean asyncMethod = m.getName().endsWith("Async") && paramTypes.length > 0 && ResponseDispatch.class.equals(paramTypes[paramTypes.length-1]); + int length = paramTypes.length; + if (asyncMethod) { + length -= 1; + } + + for (int i = 0; i < length; i++) { + String propNS = ""; String propName = "arg" + i; @@ -87,6 +97,7 @@ public class WrapperBeanGenerator extends BaseBeanGenerator { } propNS = webParam.targetNamespace(); } + if (mode.equals(WebParam.Mode.IN) || mode.equals(WebParam.Mode.INOUT)) { java.lang.reflect.Type genericParamType = getHolderValueType(genericParamTypes[i]); Class paramType = CodeGenerationHelper.getErasure(genericParamType); @@ -133,7 +144,14 @@ public class WrapperBeanGenerator extends BaseBeanGenerator { Annotation[][] paramAnns = m.getParameterAnnotations(); Class[] paramTypes = m.getParameterTypes(); java.lang.reflect.Type[] genericParamTypes = m.getGenericParameterTypes(); - for (int i = 0; i < paramTypes.length; i++) { + + boolean asyncMethod = m.getName().endsWith("Async") && paramTypes.length > 0 && ResponseDispatch.class.equals(paramTypes[paramTypes.length-1]); + int length = paramTypes.length; + if (asyncMethod) { + length -= 1; + } + + for (int i = 0; i < length; i++) { WebParam webParam = findAnnotation(paramAnns[i], WebParam.class); if (webParam != null) { if (webParam.header() || webParam.mode() == WebParam.Mode.IN) { @@ -166,6 +184,9 @@ public class WrapperBeanGenerator extends BaseBeanGenerator { WebResult webResult = m.getAnnotation(WebResult.class); Class returnType = m.getReturnType(); + if (asyncMethod) { + returnType = (Class)((ParameterizedType)genericParamTypes[genericParamTypes.length-1]).getActualTypeArguments()[0]; + } if (!((webResult != null && webResult.header()) || returnType == Void.TYPE)) { String propName = "return"; String propNS = ""; @@ -181,7 +202,7 @@ public class WrapperBeanGenerator extends BaseBeanGenerator { List jaxb = findJAXBAnnotations(m.getAnnotations()); - Type genericReturnType = m.getGenericReturnType(); + Type genericReturnType = asyncMethod? returnType : m.getGenericReturnType(); BeanProperty prop = new BeanProperty(propNS, propName, returnType, genericReturnType, true); prop.getJaxbAnnotaions().addAll(jaxb); properties.add(prop); -- cgit v1.2.3