You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2010/12/13 12:16:52 UTC

svn commit: r1045067 - in /tuscany/sca-java-2.x/trunk/modules/core-databinding: META-INF/MANIFEST.MF src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.java

Author: slaws
Date: Mon Dec 13 11:16:51 2010
New Revision: 1045067

URL: http://svn.apache.org/viewvc?rev=1045067&view=rev
Log:
TUSCANY-3801, update the databinding transformer so that it can be used with native async

Modified:
    tuscany/sca-java-2.x/trunk/modules/core-databinding/META-INF/MANIFEST.MF
    tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.java

Modified: tuscany/sca-java-2.x/trunk/modules/core-databinding/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core-databinding/META-INF/MANIFEST.MF?rev=1045067&r1=1045066&r2=1045067&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core-databinding/META-INF/MANIFEST.MF (original)
+++ tuscany/sca-java-2.x/trunk/modules/core-databinding/META-INF/MANIFEST.MF Mon Dec 13 11:16:51 2010
@@ -12,6 +12,7 @@ Bundle-License: http://www.apache.org/li
 Bundle-Description: Apache Tuscany SCA Core/DataBinding Integration
 Import-Package: javax.xml.namespace,
  org.apache.tuscany.sca.core;version="2.0.0",
+ org.apache.tuscany.sca.core.invocation;version="2.0.0",
  org.apache.tuscany.sca.databinding;version="2.0.0",
  org.apache.tuscany.sca.databinding.annotation;version="2.0.0",
  org.apache.tuscany.sca.databinding.impl;version="2.0.0",

Modified: tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.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/wire/DataTransformationInterceptor.java?rev=1045067&r1=1045066&r2=1045067&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/wire/DataTransformationInterceptor.java Mon Dec 13 11:16:51 2010
@@ -26,12 +26,11 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.tuscany.sca.core.invocation.InterceptorAsyncImpl;
 import org.apache.tuscany.sca.databinding.Mediator;
 import org.apache.tuscany.sca.interfacedef.DataType;
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
-import org.apache.tuscany.sca.invocation.Interceptor;
-import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
 import org.apache.tuscany.sca.runtime.Invocable;
 
@@ -40,8 +39,7 @@ import org.apache.tuscany.sca.runtime.In
  * 
  * @version $Rev$ $Date$
  */
-public class DataTransformationInterceptor implements Interceptor {
-    private Invoker next;
+public class DataTransformationInterceptor extends InterceptorAsyncImpl {
 
     private Operation sourceOperation;
 
@@ -64,11 +62,49 @@ public class DataTransformationIntercept
         this.mediator = mediator;
         this.invocable = invocable;
     }
-
-    public Invoker getNext() {
-        return next;
+    
+    public Message processRequest(Message msg) {
+        Map<String, Object> metadata = new HashMap<String, Object>();
+        metadata.put(Invocable.class.getName(), invocable);
+        Object input = mediator.mediateInput(msg.getBody(), sourceOperation, targetOperation, metadata);
+        msg.setBody(input);
+        return msg;
     }
 
+    public Message processResponse(Message msg) {
+        Message resultMsg = msg;
+        Map<String, Object> metadata = new HashMap<String, Object>();
+        metadata.put(Invocable.class.getName(), invocable);
+        
+        if (sourceOperation.isNonBlocking()) {
+            // Not to reset the message body
+            return resultMsg;
+        }
+
+        Object result = resultMsg.getBody();
+        
+        if (resultMsg.isFault()) {
+            Object transformedFault = null;
+            if ((result instanceof Exception) && !(result instanceof RuntimeException)) {
+                transformedFault = mediator.mediateFault(result, sourceOperation, targetOperation, metadata);
+                if (transformedFault != result) {
+                    resultMsg.setFaultBody(transformedFault);
+                }
+            }
+            //
+            // Leave it to another layer to actually throw the Exception which constitutes
+            // the message body.  We don't throw it here.
+            //
+        } else {
+            assert !(result instanceof Throwable) : "Expected messages that are not throwable " + result;
+            Object newResult = mediator.mediateOutput(result, sourceOperation, targetOperation, metadata);
+            resultMsg.setBody(newResult);
+        }
+
+        return resultMsg;
+    }
+    
+/*    
     public Message invoke(Message msg) {
         Map<String, Object> metadata = new HashMap<String, Object>();
         metadata.put(Invocable.class.getName(), invocable);
@@ -103,10 +139,8 @@ public class DataTransformationIntercept
 
         return resultMsg;
     }
+*/    
 
-    public void setNext(Invoker next) {
-        this.next = next;
-    }
 
     /**
      * Returns return type for first Holder in input list.