diff options
Diffstat (limited to 'java/sca')
2 files changed, 45 insertions, 14 deletions
diff --git a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentBuilderImpl.java b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentBuilderImpl.java index b892676acd..18c704340f 100644 --- a/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentBuilderImpl.java +++ b/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ComponentBuilderImpl.java @@ -36,6 +36,7 @@ import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import org.apache.tuscany.sca.assembly.AssemblyFactory; +import org.apache.tuscany.sca.assembly.Binding; import org.apache.tuscany.sca.assembly.Component; import org.apache.tuscany.sca.assembly.ComponentProperty; import org.apache.tuscany.sca.assembly.ComponentReference; @@ -44,6 +45,7 @@ import org.apache.tuscany.sca.assembly.Composite; import org.apache.tuscany.sca.assembly.CompositeReference; import org.apache.tuscany.sca.assembly.CompositeService; import org.apache.tuscany.sca.assembly.Contract; +import org.apache.tuscany.sca.assembly.EndpointReference; import org.apache.tuscany.sca.assembly.Implementation; import org.apache.tuscany.sca.assembly.Multiplicity; import org.apache.tuscany.sca.assembly.Property; @@ -766,11 +768,10 @@ public class ComponentBuilderImpl { Implementation implementation = component.getImplementation(); if (implementation != null && implementation instanceof Composite) { ((Composite)implementation).getReferences().add(implCompReference); - } // end if + } } else { implReference = assemblyFactory.createReference(); - } // end if - // + } implReference.setName(implService.getName()); try { @@ -785,16 +786,24 @@ public class ComponentBuilderImpl { } component.getReferences().add(callbackReference); - // Set the bindings of the callback reference + // Set the bindings of the callback reference if (callbackReference.getBindings().isEmpty()) { - // If there are specific callback bindings set, use them - if (service.getCallback() != null) { + // If there are specific callback bindings set in the SCDL service + // callback element then use them + if (service.getCallback() != null && + service.getCallback().getBindings().size() > 0 ) { callbackReference.getBindings().addAll(service.getCallback().getBindings()); } else { - // otherwise use the bindings on the forward service - callbackReference.getBindings().addAll(service.getBindings()); - } // end if - } // end if + // otherwise create a default binding which + // will cause the EPR for this reference to be + // marked as EndpointReference.NOT_CONFIGURED + createSCABinding(callbackReference, null); + + // TODO - should really use the forward binding here but + // awaiting OASIS decision on what's going to + // happen with callbacks + } + } service.setCallbackReference(callbackReference); } } @@ -863,10 +872,30 @@ public class ComponentBuilderImpl { } component.getServices().add(componentService); - // set bindings of the callback service - if (reference.getCallback() != null) { - if (componentService.getBindings().isEmpty()) { + // configure bindings for the callback service + if (componentService.getBindings().isEmpty()) { + if (reference.getCallback() != null && + reference.getCallback().getBindings().size() > 0) { + // set bindings of the callback service based on the information provided in + // SCDL reference callback element componentService.getBindings().addAll(reference.getCallback().getBindings()); + } else if (reference.getBindings().size() > 0){ + // use any bindings explicitly declared on the forward reference + for (Binding binding : reference.getBindings()){ + try { + Binding clonedBinding = (Binding)binding.clone(); + // binding uri will be calculated during runtime build + clonedBinding.setURI(null); + componentService.getBindings().add(clonedBinding); + } catch (CloneNotSupportedException ex){ + + } + } + } else { + // TODO - should use the binding resolved from the service but + // waiting for OASIS to decide what to do about callbacks + // create a default binding + createSCABinding(componentService, null); } } diff --git a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java index 47dc99aac9..31db699063 100644 --- a/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java +++ b/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/context/impl/CallbackServiceReferenceImpl.java @@ -142,7 +142,9 @@ public class CallbackServiceReferenceImpl<B> extends ServiceReferenceImpl<B> { callbackEndpointReference.setReference(ref); callbackEndpointReference.setTargetEndpoint(callbackEndpoint); callbackEndpointReference.setUnresolved(true); - + + // TODO - should really use incoming callback info but awaiting + // decision from OASIS on what will happen with callbacks // The callback endpoint will be resolved with the registry // when the wire chains are created ref.getEndpointReferences().add(callbackEndpointReference); |