summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x
diff options
context:
space:
mode:
authorslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2011-08-25 17:09:21 +0000
committerslaws <slaws@13f79535-47bb-0310-9956-ffa450edef68>2011-08-25 17:09:21 +0000
commitcf07a27562e816156582b1ac7d3a0e72611dbd8e (patch)
tree320164fc3f26371ce6657f91c5974d73e425cdbd /sca-java-2.x
parent897243d3cc4e56d64c35715fc2cd807626546904 (diff)
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.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1161645 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x')
-rw-r--r--sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java38
1 files changed, 38 insertions, 0 deletions
diff --git a/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java b/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java
index 6f5b0be0e7..e10ecf178b 100644
--- a/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java
+++ b/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java
@@ -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 CallbackServiceReferenceImpl<B> extends ServiceReferenceImpl<B> {
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 CallbackServiceReferenceImpl<B> extends ServiceReferenceImpl<B> {
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);
+ }
+ }
}