Author: antelder
Date: Fri Nov 18 15:12:18 2011
New Revision: 1203688

URL: http://svn.apache.org/viewvc?rev=1203688&view=rev
Log:
Fix a couple of NPE and index out of bound exceptions for async operations with 
void return types

Modified:
    
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSAsyncInterfaceProcessor.java

Modified: 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSAsyncInterfaceProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSAsyncInterfaceProcessor.java?rev=1203688&r1=1203687&r2=1203688&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSAsyncInterfaceProcessor.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSAsyncInterfaceProcessor.java
 Fri Nov 18 15:12:18 2011
@@ -101,7 +101,10 @@ public class JAXWSAsyncInterfaceProcesso
         }
 
         //a return type of Response<R> where R is the return type of M
-        DataType<?> operationOutputType = 
operation.getOutputType().getLogical().get(0);
+        DataType<?> operationOutputType = null;
+        if (operation.getOutputType()!= null && 
operation.getOutputType().getLogical() != null && 
operation.getOutputType().getLogical().size() > 0) {
+            operationOutputType = 
operation.getOutputType().getLogical().get(0);
+        }
         DataType<?> asyncOperationOutputType = 
asyncOperation.getOutputType().getLogical().get(0);
 
         if (operationOutputType != null && asyncOperationOutputType != null) {
@@ -173,7 +176,6 @@ public class JAXWSAsyncInterfaceProcesso
         Class<?> asyncLastParameterTypeClass = 
asyncOperationInputType.get(size).getPhysical();
         if (asyncLastParameterTypeClass == AsyncHandler.class) {
             //now check the actual type of the AsyncHandler<R> with R
-            Class<?> returnType = 
operation.getOutputType().getLogical().get(0).getPhysical();
             Class<?> asyncActualLastParameterTypeClass = Object.class;
             if (genericParamType instanceof ParameterizedType) {
                 ParameterizedType asyncLastParameterType = 
(ParameterizedType)genericParamType;
@@ -188,12 +190,17 @@ public class JAXWSAsyncInterfaceProcesso
                 }
             }
 
-            if (returnType == asyncActualLastParameterTypeClass || 
returnType.isPrimitive()
-                && primitiveAssignable(returnType, 
asyncActualLastParameterTypeClass)) {
-                return true;
-            } else {
-                return false;
+            Class<?> returnType = null;
+            if (operation.getOutputType() != null && 
operation.getOutputType().getLogical() != null && 
operation.getOutputType().getLogical().size() > 0) {
+                returnType = 
operation.getOutputType().getLogical().get(0).getPhysical();
+            }
+            if (returnType != null) {
+                if (returnType == asyncActualLastParameterTypeClass || 
returnType.isPrimitive()
+                    && primitiveAssignable(returnType, 
asyncActualLastParameterTypeClass)) {
+                    return true;
+                }
             }
+            return false;
         }
 
         return true;


Reply via email to