diff options
author | slaws <slaws@13f79535-47bb-0310-9956-ffa450edef68> | 2011-08-25 17:09:21 +0000 |
---|---|---|
committer | slaws <slaws@13f79535-47bb-0310-9956-ffa450edef68> | 2011-08-25 17:09:21 +0000 |
commit | cf07a27562e816156582b1ac7d3a0e72611dbd8e (patch) | |
tree | 320164fc3f26371ce6657f91c5974d73e425cdbd /sca-java-2.x/trunk/modules/core/src/main | |
parent | 897243d3cc4e56d64c35715fc2cd807626546904 (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/trunk/modules/core/src/main')
-rw-r--r-- | sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java | 38 |
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); + } + } } |