You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sc...@apache.org on 2011/02/15 15:51:36 UTC

svn commit: r1070926 - in /tuscany/sca-java-2.x/trunk/modules: assembly/src/main/java/org/apache/tuscany/sca/interfacedef/ assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/ binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding...

Author: scottkurz
Date: Tue Feb 15 14:51:35 2011
New Revision: 1070926

URL: http://svn.apache.org/viewvc?rev=1070926&view=rev
Log:
Fix for TUSCANY-3832.  Also tries to simplify wrapped vs. bare terminology by introducing "notSubjectToWrapping" as a term in place of "bare". 

Modified:
    tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/InterfaceContractMapper.java
    tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java
    tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractMapperImpl.java
    tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java
    tuscany/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java
    tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java
    tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
    tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java

Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/InterfaceContractMapper.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/InterfaceContractMapper.java?rev=1070926&r1=1070925&r2=1070926&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/InterfaceContractMapper.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/InterfaceContractMapper.java Tue Feb 15 14:51:35 2011
@@ -114,7 +114,20 @@ public interface InterfaceContractMapper
     
     boolean isCompatibleByReference(Operation source, Operation target, Compatibility compatibilityType);
     boolean isCompatibleByValue(Operation source, Operation target, Compatibility compatibilityType);
-
+    
+   /**
+    * Similar to isCompatibleByValue with the one difference that isCompatibleByValue will "unwrap" a wrapperStyle
+    * operation to compare it to a non-wrapperStyle operation.  One the other hand, isCompatibleWithoutUnwrapByValue
+    * will return false, i.e. not-compatible, if the source and target operation do not have the same wrapperStyle.
+    * 
+    * 
+    * @param source The source operation
+    * @param target The target operation
+    * @param compatibilityType The type of compatibility
+    * @return true if the source operation is compatible with the target
+    *         operation
+    */
+    boolean isCompatibleWithoutUnwrapByValue(Operation source, Operation target, Compatibility compatibilityType);
     /**
      * An interface A is a Compatible Subset of a second interface B if and only if all of points 1 through 6 
      * in the following list apply:

Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java?rev=1070926&r1=1070925&r2=1070926&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Operation.java Tue Feb 15 14:51:35 2011
@@ -207,12 +207,35 @@ public interface Operation extends Clone
     List<ParameterMode> getParameterModes();
     
     /**
-     * Returns true 
+     * Returns whether the operation's outputs will flow wrapped in an array
+     * or not.  (Needed to distinguish whether an array represents a single output 
+     * or if it wrappers multiple outputs).
+     * 
      * @return
      */
     public boolean hasArrayWrappedOutput();
-    
+
+    /**
+     * Sets whether the operation's outputs will flow wrapped in an array
+     * or not.  (Needed to distinguish whether an array represents a single output 
+     * or if it wrappers multiple outputs).
+     * @param value
+     */
     public void setHasArrayWrappedOutput(boolean value);
+
+    /**
+     * Sets whether operation data is not subject to wrapping along with
+     * a data transformation.
+     * @param notSubjectToWrapping
+     */  
+	public void setNotSubjectToWrapping(boolean notSubjectToWrapping);
+
+    /**
+     * Returns whether operation data is not subject to wrapping along with
+     * a data transformation.
+     * @return
+     */
+	public boolean isNotSubjectToWrapping();
     
     /**
      * A special databinding for input message of an operation

Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractMapperImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractMapperImpl.java?rev=1070926&r1=1070925&r2=1070926&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractMapperImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceContractMapperImpl.java Tue Feb 15 14:51:35 2011
@@ -347,6 +347,15 @@ public class InterfaceContractMapperImpl
         return isCompatible(source, target, compatibilityType, true);
     }
 
+    @Override
+    public boolean isCompatibleWithoutUnwrapByValue(Operation source, Operation target, Compatibility compatibilityType) {
+        if (!source.isWrapperStyle() == target.isWrapperStyle()) {
+            return false; 
+        } else {
+            return isCompatible(source, target, compatibilityType, true);
+        }
+    }
+    
     // FIXME: How to improve the performance for the lookup
     private Operation getOperation(List<Operation> operations, String name) {
         for (Operation op : operations) {

Modified: tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java?rev=1070926&r1=1070925&r2=1070926&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/OperationImpl.java Tue Feb 15 14:51:35 2011
@@ -54,6 +54,7 @@ public class OperationImpl implements Op
     private boolean wrapperStyle;
     private WrapperInfo wrapper;
     private boolean dynamic;
+    private boolean notSubjectToWrapping;
 
     private Map<Object, Object> attributes = new ConcurrentHashMap<Object, Object>();
 
@@ -308,4 +309,12 @@ public class OperationImpl implements Op
         this.hasArrayWrappedOutput = value;
     }
 
+	public void setNotSubjectToWrapping(boolean notSubjectToWrapping) {
+		this.notSubjectToWrapping = notSubjectToWrapping;
+	}
+
+	public boolean isNotSubjectToWrapping() {
+		return notSubjectToWrapping;
+	}
+
 }

Modified: tuscany/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java?rev=1070926&r1=1070925&r2=1070926&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-sca-runtime/src/main/java/org/apache/tuscany/sca/binding/sca/provider/RuntimeSCAReferenceBindingProvider.java Tue Feb 15 14:51:35 2011
@@ -153,7 +153,7 @@ public class RuntimeSCAReferenceBindingP
                                                                                      targetOp,
                                                                                      Compatibility.SUBSET)) {
                         passByValue = false;
-                    } else if (interfaceContractMapper.isCompatibleByValue(operation, targetOp, Compatibility.SUBSET)) {
+                    } else if (interfaceContractMapper.isCompatibleWithoutUnwrapByValue(operation, targetOp, Compatibility.SUBSET)) {
                         passByValue = true;
                     }
                 }

Modified: tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java?rev=1070926&r1=1070925&r2=1070926&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Input2InputTransformer.java Tue Feb 15 14:51:35 2011
@@ -126,7 +126,7 @@ public class Input2InputTransformer exte
         DataType<List<DataType>> sourceType = context.getSourceDataType();
         Operation sourceOp = context.getSourceOperation();
         boolean sourceWrapped = sourceOp != null && sourceOp.isWrapperStyle() && sourceOp.getWrapper() != null;
-        boolean sourceBare = sourceOp != null && !sourceOp.isWrapperStyle() && sourceOp.getWrapper() == null;
+        boolean sourceNotSubjectToWrapping = sourceOp != null && sourceOp.isNotSubjectToWrapping();
 
         // Find the wrapper handler for source data
         WrapperHandler sourceWrapperHandler = null;
@@ -137,14 +137,14 @@ public class Input2InputTransformer exte
         DataType<List<DataType>> targetType = context.getTargetDataType();
         Operation targetOp = (Operation)context.getTargetOperation();
         boolean targetWrapped = targetOp != null && targetOp.isWrapperStyle() && targetOp.getWrapper() != null;
-        boolean targetBare = targetOp != null && !targetOp.isWrapperStyle() && targetOp.getWrapper() == null;
+        boolean targetNotSubjectToWrapping = targetOp != null && targetOp.isNotSubjectToWrapping();
 
         // Find the wrapper handler for target data
         WrapperHandler targetWrapperHandler = null;
         String targetDataBinding = getDataBinding(targetOp);
         targetWrapperHandler = getWrapperHandler(targetDataBinding, targetWrapped);
 
-        if ((!sourceWrapped && !sourceBare) && targetWrapped) {
+        if ((!sourceWrapped && !sourceNotSubjectToWrapping) && targetWrapped) {
             // Unwrapped --> Wrapped
             WrapperInfo wrapper = targetOp.getWrapper();
             // ElementInfo wrapperElement = wrapper.getInputWrapperElement();
@@ -201,7 +201,7 @@ public class Input2InputTransformer exte
                                              true);
             return new Object[] {targetWrapper};
 
-        } else if (sourceWrapped && (!targetWrapped && !targetBare)) {
+        } else if (sourceWrapped && (!targetWrapped && !targetNotSubjectToWrapping)) {
             // Wrapped to Unwrapped
             Object sourceWrapper = source[0];
             Object[] target = null;

Modified: tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java?rev=1070926&r1=1070925&r2=1070926&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/transformers/Output2OutputTransformer.java Tue Feb 15 14:51:35 2011
@@ -152,7 +152,7 @@ public class Output2OutputTransformer ex
             DataType<List<DataType>> sourceType = context.getSourceDataType();
             Operation sourceOp = context.getSourceOperation();
             boolean sourceWrapped = sourceOp != null && sourceOp.isWrapperStyle() && sourceOp.getWrapper() != null;
-            boolean sourceBare = sourceOp != null && !sourceOp.isWrapperStyle() && sourceOp.getWrapper() == null;
+            boolean sourceNotSubjectToWrapping = sourceOp != null && sourceOp.isNotSubjectToWrapping();
 
             WrapperHandler sourceWrapperHandler = null;
             String sourceDataBinding = getDataBinding(sourceOp);
@@ -161,13 +161,13 @@ public class Output2OutputTransformer ex
             DataType<List<DataType>> targetType = context.getTargetDataType();
             Operation targetOp = (Operation)context.getTargetOperation();
             boolean targetWrapped = targetOp != null && targetOp.isWrapperStyle() && targetOp.getWrapper() != null;
-            boolean targetBare = targetOp != null && !targetOp.isWrapperStyle() && targetOp.getWrapper() == null;
+            boolean targetNotSubjectToWrapping = targetOp != null && targetOp.isNotSubjectToWrapping();
 
             WrapperHandler targetWrapperHandler = null;
             String targetDataBinding = getDataBinding(targetOp);
             targetWrapperHandler = getWrapperHandler(targetDataBinding, targetWrapped);      
 
-            if ((!sourceWrapped &&!sourceBare) && targetWrapped) {
+            if ((!sourceWrapped &&!sourceNotSubjectToWrapping) && targetWrapped) {
                 // Unwrapped --> Wrapped
                 WrapperInfo wrapper = targetOp.getWrapper();
                 ElementInfo wrapperElement = wrapper.getOutputWrapperElement();
@@ -228,7 +228,7 @@ public class Output2OutputTransformer ex
                                                  false);
                 return targetWrapper;                                
                 
-            } else if (sourceWrapped && (!targetWrapped && !targetBare)) {
+            } else if (sourceWrapped && (!targetWrapped && !targetNotSubjectToWrapping)) {
                 // Wrapped to Unwrapped
                 Object sourceWrapper = response;
                 List<ElementInfo> childElements = sourceOp.getWrapper().getOutputChildElements();

Modified: tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.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/JAXWSJavaInterfaceProcessor.java?rev=1070926&r1=1070925&r2=1070926&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java Tue Feb 15 14:51:35 2011
@@ -201,8 +201,8 @@ public class JAXWSJavaInterfaceProcessor
                         }
                     }
                 }
-                // FIXME: [rfeng] For the BARE mapping, do we need to create a Wrapper?
-                // it's null at this point
+                // Rather than relying on null wrapper, we use a flag with a clearer meaning.
+                operation.setNotSubjectToWrapping(true);
             } else {
 
                 RequestWrapper requestWrapper = method.getAnnotation(RequestWrapper.class);