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 2011/08/25 19:09:21 UTC

svn commit: r1161645 - /tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java

Author: slaws
Date: Thu Aug 25 17:09:21 2011
New Revision: 1161645

URL: http://svn.apache.org/viewvc?rev=1161645&view=rev
Log:
TUSCANY-3932 - changes to get callbacks working over the distributed domain. There's active discussion here http://www.mail-archive.com/dev%40tuscany.apache.org/msg17247.html so this will change will change as a result.

Modified:
    tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java

Modified: tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java?rev=1161645&r1=1161644&r2=1161645&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java Thu Aug 25 17:09:21 2011
@@ -18,10 +18,14 @@
  */
 package org.apache.tuscany.sca.core.context.impl;
 
+import java.net.URI;
 import java.util.List;
 
+import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.assembly.Endpoint;
 import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.assembly.builder.BindingBuilder;
+import org.apache.tuscany.sca.assembly.builder.BuilderContext;
 import org.apache.tuscany.sca.context.CompositeContext;
 import org.apache.tuscany.sca.context.ThreadMessageContext;
 import org.apache.tuscany.sca.core.invocation.Constants;
@@ -125,6 +129,29 @@ public class CallbackServiceReferenceImp
             try {
                 RuntimeEndpointReference epr = (RuntimeEndpointReference)endpointReference.clone();
                 epr.setTargetEndpoint(resolvedEndpoint);
+                
+                // TUSCANY-3932
+                // If the resolved endpoint has a binding with a absolute URI then assume
+                // that URL has been passed in in the forward message and really treat it
+                // as a resolved endpoint.
+                Binding callbackBinding = resolvedEndpoint.getBinding();
+                if ( callbackBinding != null){
+                    URI callbackBindingURI = null;
+                    try {
+                        callbackBindingURI = new URI(callbackBinding.getURI());
+                    } catch (Exception ex){
+                        // ignore it, we test for null next
+                    }
+                    if (callbackBindingURI != null &&
+                        callbackBindingURI.isAbsolute()){
+                        epr.setBinding(callbackBinding);
+                        // TODO - What else?
+                        build(epr);
+                        epr.setStatus(EndpointReference.Status.WIRED_TARGET_FOUND_AND_MATCHED);
+                        epr.setUnresolved(false);
+                    }
+                }
+
                 return epr;
             } catch (CloneNotSupportedException e) {
                 // will not happen
@@ -134,5 +161,16 @@ public class CallbackServiceReferenceImp
             return null;
         }
     }
+    
+    private void build(EndpointReference endpointReference) {
+        BindingBuilder builder = builders.getBindingBuilder(endpointReference.getBinding().getType());
+        if (builder != null) {
+            builder.build(endpointReference.getComponent(),
+                          endpointReference.getReference(),
+                          endpointReference.getBinding(),
+                          new BuilderContext(registry),
+                          false);
+        }
+    }    
 
 }