You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2007/07/17 09:54:49 UTC

svn commit: r556840 - in /incubator/tuscany/java/sca: itest/contribution-import-export/contrib-composite/src/test/java/hello/ modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/ modules/assembly/src/main/java/org/apache/tuscany/sca/...

Author: rfeng
Date: Tue Jul 17 00:54:40 2007
New Revision: 556840

URL: http://svn.apache.org/viewvc?view=rev&rev=556840
Log:
Apply the patch from Simon Nash for TUSCANY-1441. Thank you, Simon.

Added:
    incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java   (with props)
    incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java   (with props)
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java   (with props)
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java   (with props)
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java   (with props)
Modified:
    incubator/tuscany/java/sca/itest/contribution-import-export/contrib-composite/src/test/java/hello/HelloTestCase.java
    incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java
    incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceUtil.java
    incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/SCABindingImpl.java
    incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/axis2/Axis2ServiceBindingProvider.java
    incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/InvocationChain.java
    incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java
    incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointReference.java
    incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java
    incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentService.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/AbstractInvocationHandler.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/InvocationChainImpl.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/MessageImpl.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/NonBlockingInterceptor.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/EndpointReferenceImpl.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentReferenceImpl.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentServiceImpl.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingProviderFactory.java
    incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
    incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptInvoker.java

Modified: incubator/tuscany/java/sca/itest/contribution-import-export/contrib-composite/src/test/java/hello/HelloTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/itest/contribution-import-export/contrib-composite/src/test/java/hello/HelloTestCase.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/itest/contribution-import-export/contrib-composite/src/test/java/hello/HelloTestCase.java (original)
+++ incubator/tuscany/java/sca/itest/contribution-import-export/contrib-composite/src/test/java/hello/HelloTestCase.java Tue Jul 17 00:54:40 2007
@@ -62,6 +62,8 @@
         
         //activate SCA Domain
         domain.getDomainCompositeHelper().activateDomain();
+        //Start Components from my composite
+        domain.getDomainCompositeHelper().startComponent(domain.getDomainCompositeHelper().getComponent("HelloServiceComponent"));
     }
     
 	public void testHello() throws IOException {

Added: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java?view=auto&rev=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java (added)
+++ incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java Tue Jul 17 00:54:40 2007
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.assembly.xml;
+
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.assembly.SCABinding;
+import org.apache.tuscany.sca.assembly.SCABindingFactory;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.service.ContributionReadException;
+import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
+import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
+import org.apache.tuscany.sca.policy.PolicyFactory;
+
+/**
+ * A processor to read the XML that describes the SCA binding.
+ */
+
+public class SCABindingProcessor extends BaseArtifactProcessor implements StAXArtifactProcessor<SCABinding>{
+    
+    private SCABindingFactory scaBindingFactory;
+
+    public SCABindingProcessor(AssemblyFactory assemblyFactory,
+                               PolicyFactory policyFactory,
+                               SCABindingFactory scaBindingFactory) {
+        super(assemblyFactory, policyFactory, null);
+        this.scaBindingFactory = scaBindingFactory;
+    }
+
+    public QName getArtifactType() {
+        return BINDING_SCA_QNAME;
+    }
+
+    public Class<SCABinding> getModelType() {
+        return SCABinding.class;
+    }
+
+    public SCABinding read(XMLStreamReader reader) throws ContributionReadException {
+        try {
+            SCABinding scaBinding = scaBindingFactory.createSCABinding();
+            
+            // Read policies
+            readPolicies(scaBinding, reader);
+
+            // Read binding URI
+            String uri = reader.getAttributeValue(null, URI);
+            if (uri != null && uri.length() > 0) {
+                scaBinding.setURI(uri);
+            }
+
+            // Skip to end element
+            while (reader.hasNext()) {
+                if (reader.next() == END_ELEMENT && BINDING_SCA_QNAME.equals(reader.getName())) {
+                    break;
+                }
+            }
+            return scaBinding;
+
+        } catch (XMLStreamException e) {
+            throw new ContributionReadException(e);
+        }
+    }
+    
+    public void resolve(SCABinding model, ModelResolver resolver) throws ContributionResolveException {
+    }    
+
+    public void write(SCABinding scaBinding, XMLStreamWriter writer) throws ContributionWriteException {
+        try {
+            // Write a <binding.sca>
+            writer.writeStartElement(SCA10_NS, BINDING_SCA);
+
+            // Write binding URI
+            if (scaBinding.getURI() != null) {
+                writer.writeAttribute(URI, scaBinding.getURI());
+            }
+            
+            writer.writeEndElement();
+
+        } catch (XMLStreamException e) {
+            throw new ContributionWriteException(e);
+        }
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/SCABindingProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java?view=auto&rev=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java (added)
+++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java Tue Jul 17 00:54:40 2007
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.tuscany.sca.assembly;
+
+/**
+ * Enables a binding to indicate whether or not it has an endpoint.
+ * If the uri attribute is specified, the binding has an endpoint.
+ * In other cases, an endpoint may be specified in a binding-specific way.
+ * This information is needed to make wiring decisions.
+ * 
+ * @version $Rev$ $Date$
+ */
+public interface BindingEndpoint {
+ 
+    /**
+     * Indicate whether or not the binding has an endpoint.
+     *
+     * @return true if the binding has an endpoint, false otherwise
+     */ 
+    boolean hasEndpoint();
+ 
+}

Propchange: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/BindingEndpoint.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java (original)
+++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/CompositeBuilderImpl.java Tue Jul 17 00:54:40 2007
@@ -27,6 +27,7 @@
 
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
 import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.BindingEndpoint;
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.ComponentProperty;
 import org.apache.tuscany.sca.assembly.ComponentReference;
@@ -663,7 +664,6 @@
                     scaBinding.setName(componentService.getName());
                     componentService.getBindings().add(scaBinding);
                 }
-                scaBinding.setURI(uri);
                 scaBinding.setComponent(component);
 
                 // if service has a callback, create and configure an SCA binding for the callback
@@ -678,7 +678,6 @@
                         }
                         componentService.getCallback().getBindings().add(scaCallbackBinding);
                     }
-                    scaCallbackBinding.setURI(uri);
                     scaCallbackBinding.setComponent(component);
                 }
             }
@@ -694,7 +693,6 @@
                     scaBinding.setName(componentReference.getName());
                     componentReference.getBindings().add(scaBinding);
                 }
-                scaBinding.setURI(uri);
                 scaBinding.setComponent(component);
 
                 // if reference has a callback, create and configure an SCA binding for the callback
@@ -709,7 +707,6 @@
                         }
                         componentReference.getCallback().getBindings().add(scaCallbackBinding);
                     }
-                    scaCallbackBinding.setURI(uri);
                     scaCallbackBinding.setComponent(component);
                 }
             }
@@ -1195,12 +1192,15 @@
     protected void wireCompositeReferences(Composite composite) {
 
         // Process nested composites recursively
+        // [rfeng] I comment out the following loop as there's no need to do the recursive wiring.
+        /*
         for (Component component : composite.getComponents()) {
             Implementation implementation = component.getImplementation();
             if (implementation instanceof Composite) {
                 wireCompositeReferences((Composite)implementation);
             }
         }
+        */
 
         // Process composite references declared in this composite
         for (Reference reference : composite.getReferences()) {
@@ -1529,6 +1529,35 @@
      */
     private void warning(String message, Object model) {
         monitor.problem(new ProblemImpl(Severity.WARNING, message, model));
+    }
+
+    /**
+     * This method encapsulates the logic needed to determine whether a binding
+     * is configured with an endpoint.  In most cases, this is determined by
+     * whether the binding's uri attribute was specified.  However, some bindings
+     * provide a binding-specific way of setting the target URI, so it's not
+     * sufficient to simply call getURI() on the binding.  The hasEndpoint()
+     * method of the BindingEndpoint interface allows the binding to provide
+     * a definite answer.
+     * 
+     * @param binding
+     * @return true if the binding has an endpoint, false otherwise
+     */
+    public static boolean bindingHasEndpoint(Binding binding) {
+        // for now, determine this based on knowledge of the various binding types
+        // all bindings should be changed to extend BindingEndpoint and implement hasEndpoint()
+        // evetually, BindingEndpoint should be merged with Binding
+        if (binding instanceof BindingEndpoint) {
+            // call hasEndpoint() to get the definitive answer
+            return ((BindingEndpoint)binding).hasEndpoint();
+        } else {
+            //FIXME: nasty hack to preserve compatibility with old bindings 
+            if (binding instanceof SCABinding) {
+                return false;
+            } else {
+                return true;
+            }
+        }
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceUtil.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceUtil.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceUtil.java (original)
+++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/ReferenceUtil.java Tue Jul 17 00:54:40 2007
@@ -22,7 +22,6 @@
 
 import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.assembly.Multiplicity;
-import org.apache.tuscany.sca.assembly.SCABinding;
 
 /**
  * This class encapsulates utility methods to deal with reference definitions
@@ -68,7 +67,7 @@
                 if (count != 1) {
                     if (count == 0) {
                         for (Binding binding: bindings) {
-                            if (!(binding instanceof SCABinding)) {
+                            if (CompositeBuilderImpl.bindingHasEndpoint(binding)) {
                                 return true;
                             }
                         }
@@ -80,7 +79,7 @@
                 if (count < 1) {
                     if (count == 0) {
                         for (Binding binding: bindings) {
-                            if (!(binding instanceof SCABinding)) {
+                            if (CompositeBuilderImpl.bindingHasEndpoint(binding)) {
                                 return true;
                             }
                         }

Modified: incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/SCABindingImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/SCABindingImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/SCABindingImpl.java (original)
+++ incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/impl/SCABindingImpl.java Tue Jul 17 00:54:40 2007
@@ -21,6 +21,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.tuscany.sca.assembly.BindingEndpoint;
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.SCABinding;
 import org.apache.tuscany.sca.policy.Intent;
@@ -31,7 +32,7 @@
  * 
  * @version $Rev$ $Date$
  */
-public class SCABindingImpl implements SCABinding {
+public class SCABindingImpl implements SCABinding, BindingEndpoint {
     private String name;
     private String uri;
     private List<PolicySet> policySets = new ArrayList<PolicySet>();
@@ -87,5 +88,9 @@
     }
     
     public void setUnresolved(boolean unresolved) {
+    }
+
+    public boolean hasEndpoint() {
+        return uri != null;
     }
 }

Modified: incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/axis2/Axis2ServiceBindingProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/axis2/Axis2ServiceBindingProvider.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/axis2/Axis2ServiceBindingProvider.java (original)
+++ incubator/tuscany/java/sca/modules/binding-ws-axis2/src/main/java/org/apache/tuscany/sca/binding/axis2/Axis2ServiceBindingProvider.java Tue Jul 17 00:54:40 2007
@@ -417,6 +417,9 @@
         }
         requestMsg.setBody(args);
 
+        //FIXME: need somewhere to store the callback URI 
+        requestMsg.setFrom(service.getRuntimeWire(wsBinding).getSource());
+
         Message workContext = ThreadMessageContext.getMessageContext();
 
         ThreadMessageContext.setMessageContext(requestMsg);

Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/InvocationChain.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/InvocationChain.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/InvocationChain.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/InvocationChain.java Tue Jul 17 00:54:40 2007
@@ -36,6 +36,13 @@
      * @return The target operation for this invocation chain
      */
     Operation getTargetOperation();
+
+    /**
+     * Updates the target operation for this invocation chain.
+     *
+     * @param operation The new target operation for this invocation chain
+     */
+    void setTargetOperation(Operation operation);
     
     /**
      * Returns the source operation for this invocation chain.

Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/invocation/Message.java Tue Jul 17 00:54:40 2007
@@ -19,6 +19,7 @@
 package org.apache.tuscany.sca.invocation;
 
 import org.apache.tuscany.sca.interfacedef.ConversationSequence;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.runtime.EndpointReference;
 
 /**
@@ -123,10 +124,24 @@
     ConversationSequence getConversationSequence();
 
     /**
-     * Returns the conversational sequence the message is associated with, NONE, START, CONTINUE, or END
+     * Sets the conversational sequence the message is associated with, NONE, START, CONTINUE, or END
      *
      * @param sequence The conversational sequence
      */
     void setConversationSequence(ConversationSequence sequence);
+
+    /**
+     * Returns the operation that created the message.
+     *
+     * @return The operation that created the message
+     */
+    Operation getOperation();
+
+    /**
+     * Sets the operation that created the message.
+     *
+     * @param op The operation that created the message
+     */
+    void setOperation(Operation op);
 
 }

Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointReference.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointReference.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/EndpointReference.java Tue Jul 17 00:54:40 2007
@@ -56,9 +56,21 @@
     InterfaceContract getInterfaceContract();
     
     /**
+     * Update the interface contract for the endpoint
+     * @param interfaceContract The updated interface contract
+     */
+    void setInterfaceContract(InterfaceContract interfaceContract);
+
+    /**
      * Get the URI for this endpoint
      * @return The URI of the endpoint
      */
     String getURI();
+
+    /**
+     * Set the URI for this endpoint
+     * @param uri The new URI of the endpoint
+     */
+    void setURI(String uri);
     
 }

Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentReference.java Tue Jul 17 00:54:40 2007
@@ -24,6 +24,7 @@
 import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.assembly.ComponentReference;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.InvocationChain;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
 
@@ -76,5 +77,13 @@
      * @return The runtime Invoker
      */
     Invoker getInvoker(Binding binding, Operation operation);
+    
+    /**
+     * Get the callback invocation chain for the given binding and operation
+     * @param binding The assembly model binding 
+     * @param operation The assembly model operation
+     * @return The runtime callback invocation chain
+     */
+    InvocationChain getCallbackInvocationChain(Binding binding, Operation operation);    
     
 }

Modified: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentService.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentService.java (original)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/runtime/RuntimeComponentService.java Tue Jul 17 00:54:40 2007
@@ -24,6 +24,7 @@
 import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.assembly.ComponentService;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.InvocationChain;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.provider.ServiceBindingProvider;
 
@@ -81,6 +82,14 @@
      * @return The runtime invoker
      */
     Invoker getInvoker(Binding binding, Operation operation);    
+    
+    /**
+     * Get the invocation chain for the given binding and operation
+     * @param binding The assembly model binding 
+     * @param operation The assembly model operation
+     * @return The runtime invocation chain
+     */
+    InvocationChain getInvocationChain(Binding binding, Operation operation);    
     
     /**
      * Get the callback invoker for the given binding and operation

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/AbstractInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/AbstractInvocationHandler.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/AbstractInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/AbstractInvocationHandler.java Tue Jul 17 00:54:40 2007
@@ -60,9 +60,10 @@
         Invoker headInvoker = chain.getHeadInvoker();
         msg.setCorrelationID(msgContext.getCorrelationID());
         Operation operation = chain.getTargetOperation();
+        msg.setOperation(operation);
         Interface contract = operation.getInterface();
         if (contract != null && contract.isConversational()) {
-            ConversationSequence sequence = chain.getTargetOperation().getConversationSequence();
+            ConversationSequence sequence = operation.getConversationSequence();
             if (sequence == ConversationSequence.CONVERSATION_END) {
                 msg.setConversationSequence(ConversationSequence.CONVERSATION_END);
                 conversationStarted = false;

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/InvocationChainImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/InvocationChainImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/InvocationChainImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/InvocationChainImpl.java Tue Jul 17 00:54:40 2007
@@ -51,6 +51,10 @@
         return targetOperation;
     }
 
+    public void setTargetOperation(Operation operation) {
+        this.targetOperation = operation;
+    }
+
     public void addInterceptor(Interceptor interceptor) {
         if (invokerChainHead == null) {
             invokerChainHead = interceptor;

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/JDKCallbackInvocationHandler.java Tue Jul 17 00:54:40 2007
@@ -75,10 +75,11 @@
         RuntimeWire wire = null;
         if (from != null) {
             wire = wires.get(from.getURI());
-        } else { // service with binding
-            wire = wires.get(null);
         }
-        assert wire != null;
+        if (wire == null) {
+            //FIXME: need better exception
+            throw new RuntimeException("Wire for callback cannot be found");
+        }
         IdentityHashMap<Operation, InvocationChain> map = wire.getCallbackInvocationMap();
         Operation operation = JavaInterfaceUtil.findOperation(method, map.keySet());
         InvocationChain chain = map.get(operation);

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/MessageImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/MessageImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/MessageImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/MessageImpl.java Tue Jul 17 00:54:40 2007
@@ -19,6 +19,7 @@
 package org.apache.tuscany.sca.core.invocation;
 
 import org.apache.tuscany.sca.interfacedef.ConversationSequence;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.invocation.Message;
 import org.apache.tuscany.sca.runtime.EndpointReference;
 
@@ -34,6 +35,7 @@
     private boolean isFault;
     private ConversationSequence conversationSequence;
     private String conversationId;
+    private Operation op;
     
     private EndpointReference from;
     private EndpointReference to;
@@ -114,4 +116,11 @@
         this.to = to;
     }
 
+    public Operation getOperation() {
+        return op;
+    }
+
+    public void setOperation(Operation op) {
+        this.op = op;
+    }
 }

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/NonBlockingInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/NonBlockingInterceptor.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/NonBlockingInterceptor.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/invocation/NonBlockingInterceptor.java Tue Jul 17 00:54:40 2007
@@ -21,6 +21,7 @@
 import java.util.LinkedList;
 
 import org.apache.tuscany.sca.interfacedef.ConversationSequence;
+import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.invocation.Interceptor;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
@@ -166,6 +167,14 @@
         }
 
         public void setTo(EndpointReference to) {
+            throw new UnsupportedOperationException();
+        }
+
+        public Operation getOperation() {
+            return null;
+        }
+
+        public void setOperation(Operation op) {
             throw new UnsupportedOperationException();
         }
 

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/CompositeActivatorImpl.java Tue Jul 17 00:54:40 2007
@@ -29,7 +29,6 @@
 import org.apache.tuscany.sca.assembly.Composite;
 import org.apache.tuscany.sca.assembly.Implementation;
 import org.apache.tuscany.sca.assembly.Reference;
-import org.apache.tuscany.sca.assembly.SCABinding;
 import org.apache.tuscany.sca.assembly.SCABindingFactory;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
 import org.apache.tuscany.sca.assembly.builder.CompositeBuilderMonitor;
@@ -91,7 +90,7 @@
         super();
         this.assemblyFactory = assemblyFactory;
         this.scaBindingFactory = scaBindingFactory;
-        this.interfaceContractMapper = interfaceContractMapper;
+         this.interfaceContractMapper = interfaceContractMapper;
         this.scopeRegistry = scopeRegistry;
         this.workScheduler = workScheduler;
         this.wireProcessor = wireProcessor;
@@ -235,6 +234,12 @@
                     }
                 }
             }
+            for (RuntimeWire wire : ((RuntimeComponentService)service).getRuntimeWires()) {
+                wireProcessor.process(wire);
+            }
+            for (RuntimeWire wire : ((RuntimeComponentService)service).getCallbackWires()) {
+                wireProcessor.process(wire);
+            }
         }
         for (ComponentReference reference : component.getReferences()) {
             for (Binding binding : reference.getBindings()) {
@@ -260,6 +265,9 @@
                     }
                 }
             }
+            for (RuntimeWire wire : ((RuntimeComponentReference)reference).getRuntimeWires()) {
+                wireProcessor.process(wire);
+            }
         }
 
         Implementation implementation = component.getImplementation();
@@ -408,121 +416,98 @@
      * @param component
      * @param reference
      * @param binding
+     * @param isCallback
      */
-    private void createWires(Component component, ComponentReference reference, Binding binding, boolean isCallback) {
+    private void createWires(Component component, ComponentReference reference, Binding binding,
+                             boolean isCallback) {
         if (!(reference instanceof RuntimeComponentReference)) {
             return;
         }
-        RuntimeComponentReference runtimeRef = (RuntimeComponentReference)reference;
-        InterfaceContract bindingContract = getInterfaceContract(reference, binding, isCallback);
-
-        if (!(binding instanceof SCABinding)) {
-            // Use the interface contract of the reference on the component type
-            Reference componentTypeRef = reference.getReference();
-            InterfaceContract sourceContract = componentTypeRef == null ? reference.getInterfaceContract()
-                                                                        : componentTypeRef.getInterfaceContract();
-            sourceContract = sourceContract.makeUnidirectional(isCallback);
-
-            // Component Reference --> External Service
-            EndpointReference wireSource = new EndpointReferenceImpl((RuntimeComponent)component,
-                                                                     (RuntimeComponentReference)reference, binding,
-                                                                     sourceContract);
-
-            EndpointReference wireTarget = new EndpointReferenceImpl(null, null, binding, bindingContract);
-            RuntimeWire wire = new RuntimeWireImpl(wireSource, wireTarget);
-
-            if (sourceContract.getInterface() != null) {
-                for (Operation operation : sourceContract.getInterface().getOperations()) {
-                    Operation targetOperation = interfaceContractMapper.map(bindingContract.getInterface(), operation);
-                    InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
-                    if (operation.isNonBlocking()) {
-                        addNonBlockingInterceptor(reference, binding, chain);
-                    }
-                    addBindingInterceptor(reference, binding, chain, operation);
-                    wire.getInvocationChains().add(chain);
-                }
-            }
-            if (bindingContract.getCallbackInterface() != null && !(reference.getName().startsWith("$self$."))) {
-                for (Operation operation : bindingContract.getCallbackInterface().getOperations()) {
-                    Operation targetOperation = interfaceContractMapper.map(sourceContract.getCallbackInterface(),
-                                                                            operation);
-                    InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
-                    addImplementationInterceptor(component, null, chain, targetOperation, true);
-                    wire.addCallbackInvocationChain(chain);
-                }
-            }
-            runtimeRef.getRuntimeWires().add(wire); 
-            wireProcessor.process(wire);
-            // TODO: For non-SCA binding, how do we deal with targets? For now, assuming targets only apply to SCABinding
-            return;
-        }
-        for (ComponentService service : reference.getTargets()) {
-            Component target = null;
-            SCABinding scaBinding = service.getBinding(SCABinding.class);
-            if (scaBinding != null) {
-                target = scaBinding.getComponent();
-            }
-
-            // FIXME: [rfeng] Ignore unresolved services
-            if (service.isUnresolved()) {
-                continue;
-            }
-
-            // FIXME: [rfeng] We might need a better way to get the impl interface contract
-            InterfaceContract targetContract =
-                        service.getService().getInterfaceContract().makeUnidirectional(isCallback);
-
-            EndpointReference wireSource = new EndpointReferenceImpl((RuntimeComponent)component,
-                                                                     (RuntimeComponentReference)reference, binding,
-                                                                     bindingContract);
-
-            EndpointReference wireTarget = new EndpointReferenceImpl((RuntimeComponent)target,
-                                                                     (RuntimeComponentService)service, binding,
-                                                                     targetContract);
-
-            RuntimeWire wire = new RuntimeWireImpl(wireSource, wireTarget);
-
-            if (bindingContract.getInterface() != null) {
-                for (Operation operation : bindingContract.getInterface().getOperations()) {
-                    Operation targetOperation = interfaceContractMapper.map(targetContract.getInterface(), operation);
-                    InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
-                    if (operation.isNonBlocking()) {
-                        addNonBlockingInterceptor(reference, binding, chain);
+        if (!reference.getTargets().isEmpty()) {
+            if (isCallback) {
+                createReferenceWire(reference, component, binding, null, null, binding, true);
+            }
+            for (ComponentService service : reference.getTargets()) {
+                // FIXME: [rfeng] Ignore unresolved services
+                if (service.isUnresolved()) {
+                    continue;
+                }
+                if (!isCallback) {
+                    Binding serviceBinding = service.getBinding(binding.getClass());
+                    if (serviceBinding != null) {
+                        createReferenceWire(reference, component, binding, service, null, serviceBinding, false);
                     }
-                    addBindingInterceptor(reference, binding, chain, operation);
-                    if (target != null) {
-                        addImplementationInterceptor(target, service, chain, targetOperation, false);
+                } else {
+                    Binding serviceBinding = service.getCallbackBinding(binding.getClass());
+                    if (serviceBinding != null) {
+                        createServiceWire(service, null, serviceBinding, reference, component, binding, true);
                     }
-                    wire.getInvocationChains().add(chain);
                 }
             }
-            if (targetContract.getCallbackInterface() != null) {
-                for (Operation operation : targetContract.getCallbackInterface().getOperations()) {
-                    Operation targetOperation = interfaceContractMapper.map(bindingContract.getCallbackInterface(),
-                                                                            operation);
-                    InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
-                    if (operation.isNonBlocking()) {
-                        addNonBlockingCallbackInterceptor(service, binding, chain);
-                    }
-                    if (target != null) {
-                        addBindingCallbackInterceptor(service, binding, chain, operation);
-                    }
-                    // can't create callback implementation interceptor for self-reference
-                    if (!reference.getName().startsWith("$self$.")) { 
-                        addImplementationInterceptor(component, null, chain, targetOperation, true);
-                    }
-                    wire.addCallbackInvocationChain(chain);
-                }
+        } else {
+            if (CompositeBuilderImpl.bindingHasEndpoint(binding)) {  // create wire if binding has an endpoint
+                createReferenceWire(reference, component, binding, null, null, binding, isCallback);
             }
+        }
+    }
+
+    /**
+     * Create a reference wire for a forward call or a callback
+     * 
+     * @param component
+     * @param reference
+     * @param referenceBinding
+     * @param service
+     * @param serviceBinding
+     * @param isCallback
+     */
+    private RuntimeWire createReferenceWire(
+                            ComponentReference reference, Component refComponent, Binding refBinding,
+                            ComponentService service, Component serviceComponent, Binding serviceBinding,
+                            boolean isCallback) {
+        RuntimeComponentReference runtimeRef = (RuntimeComponentReference)reference;
+        InterfaceContract bindingContract = getInterfaceContract(reference, refBinding, isCallback);
 
-            runtimeRef.getRuntimeWires().add(wire);
-            if (!wire.getCallbackInvocationChains().isEmpty()) {
-                if (wire.getTarget().getContract() != null) {
-                    ((RuntimeComponentService) wire.getTarget().getContract()).getCallbackWires().add(wire);
+        // Use the interface contract of the reference on the component type
+        Reference componentTypeRef = reference.getReference();
+        InterfaceContract sourceContract = componentTypeRef == null ? reference.getInterfaceContract()
+                                                                    : componentTypeRef.getInterfaceContract();
+        sourceContract = sourceContract.makeUnidirectional(isCallback);
+
+        EndpointReference wireSource = new EndpointReferenceImpl((RuntimeComponent)refComponent,
+                                                                 (RuntimeComponentReference)reference,
+                                                                 refBinding, sourceContract);
+
+        EndpointReference wireTarget = new EndpointReferenceImpl((RuntimeComponent)serviceComponent,
+                                                                 (RuntimeComponentService)service,
+                                                                 serviceBinding, bindingContract);
+ 
+        RuntimeWire wire = new RuntimeWireImpl(wireSource, wireTarget);
+        if (!isCallback) {
+            for (Operation operation : sourceContract.getInterface().getOperations()) {
+                Operation targetOperation = interfaceContractMapper.map(bindingContract.getInterface(), operation);
+                InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
+                if (operation.isNonBlocking()) {
+                    addNonBlockingInterceptor(reference, refBinding, chain);
                 }
+                addBindingInterceptor(reference, refBinding, chain, operation);
+                wire.getInvocationChains().add(chain);
+            }
+        } else {
+            for (Operation operation : bindingContract.getCallbackInterface().getOperations()) {
+                Operation targetOperation = interfaceContractMapper.map(sourceContract.getCallbackInterface(),
+                                                                        operation);
+                InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
+                if (!reference.getName().startsWith("$self$.")) {
+                    addImplementationInterceptor(refComponent, null, chain, targetOperation, true);
+                } else {
+                    //FIXME: need to invoke the callback object
+                }
+                wire.addCallbackInvocationChain(chain);
             }
-            wireProcessor.process(wire);
         }
+        runtimeRef.getRuntimeWires().add(wire);
+        return wire;
     }
 
     /**
@@ -551,24 +536,47 @@
      * @param component
      * @param service
      * @param binding
+     * @param isCallback
      */
     private void createWires(Component component, ComponentService service, Binding binding, boolean isCallback) {
         if (!(service instanceof RuntimeComponentService)) {
             return;
         }
+        RuntimeWire wire = createServiceWire(service, component, binding, null, null, binding, isCallback);
+
+        //FIXME: need better way to create the source URI
+        wire.getSource().setURI(binding.getClass().getName());
+    }
+
+    /**
+     * Create a service wire for a forward call or a callback
+     * 
+     * @param component
+     * @param service
+     * @param serviceBinding
+     * @param reference
+     * @param referenceBinding
+     * @param isCallback
+     */
+    private RuntimeWire createServiceWire(
+                            ComponentService service, Component serviceComponent, Binding serviceBinding,
+                            ComponentReference reference, Component refComponent, Binding refBinding,
+                            boolean isCallback) {
         RuntimeComponentService runtimeService = (RuntimeComponentService)service;
 
         // FIXME: [rfeng] We might need a better way to get the impl interface contract
         InterfaceContract targetContract = service.getService().getInterfaceContract().
                                                makeUnidirectional(isCallback);
 
-        InterfaceContract sourceContract = getInterfaceContract(service, binding, isCallback);
-
-        EndpointReference wireSource = new EndpointReferenceImpl(null, null, binding, sourceContract);
+        InterfaceContract sourceContract = getInterfaceContract(service, serviceBinding, isCallback);
 
-        EndpointReference wireTarget = new EndpointReferenceImpl((RuntimeComponent)component,
-                                                                 (RuntimeComponentService)service, binding,
-                                                                 targetContract);
+        EndpointReference wireSource = new EndpointReferenceImpl((RuntimeComponent)refComponent,
+                                                                 (RuntimeComponentReference)reference,
+                                                                 refBinding, sourceContract);
+
+        EndpointReference wireTarget = new EndpointReferenceImpl((RuntimeComponent)serviceComponent,
+                                                                 (RuntimeComponentService)service,
+                                                                 serviceBinding, targetContract);
 
         RuntimeWire wire = new RuntimeWireImpl(wireSource, wireTarget);
 
@@ -576,7 +584,7 @@
             for (Operation operation : sourceContract.getInterface().getOperations()) {
                 Operation targetOperation = interfaceContractMapper.map(targetContract.getInterface(), operation);
                 InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
-                addImplementationInterceptor(component, service, chain, targetOperation, false);
+                addImplementationInterceptor(serviceComponent, service, chain, targetOperation, false);
                 wire.getInvocationChains().add(chain);
             }
             runtimeService.getRuntimeWires().add(wire);
@@ -588,16 +596,16 @@
                     interfaceContractMapper.map(sourceContract.getCallbackInterface(), operation);
                 InvocationChain chain = new InvocationChainImpl(operation, targetOperation);
                 if (operation.isNonBlocking()) {
-                    addNonBlockingCallbackInterceptor(service, binding, chain);
+                    addNonBlockingCallbackInterceptor(service, serviceBinding, chain);
                 }
-                addBindingCallbackInterceptor(service, binding, chain, operation);
+                addBindingCallbackInterceptor(service, serviceBinding, chain, operation);
                 wire.addCallbackInvocationChain(chain);
             }
             runtimeService.getCallbackWires().add(wire);
         }
 
-        wireProcessor.process(wire);
-    }
+        return wire;
+    } 
 
     /**
      * Add the interceptor for a component implementation

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/EndpointReferenceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/EndpointReferenceImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/EndpointReferenceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/EndpointReferenceImpl.java Tue Jul 17 00:54:40 2007
@@ -50,7 +50,8 @@
         this.contract = contract;
         this.binding = binding;
         this.interfaceContract = interfaceContract;
-        this.uri = binding.getURI();
+        this.uri = (component != null ? component.getName() : "") + '/' +
+                   (contract != null ? contract.getName() : "");
     }
 
     /**

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentReferenceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentReferenceImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentReferenceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentReferenceImpl.java Tue Jul 17 00:54:40 2007
@@ -83,4 +83,18 @@
         return null;
     }
 
+    public InvocationChain getCallbackInvocationChain(Binding binding, Operation operation) {
+        RuntimeWire wire = getRuntimeWire(binding);
+        if (wire == null) {
+            return null;
+        }
+        for (InvocationChain chain : wire.getCallbackInvocationChains()) {
+            Operation op = chain.getTargetOperation();
+            if (mapper.isCompatible(operation, op, op.getInterface().isRemotable())) {
+                return chain;
+            }
+        }
+        return null;
+    }
+
 }

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentServiceImpl.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentServiceImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeComponentServiceImpl.java Tue Jul 17 00:54:40 2007
@@ -80,6 +80,15 @@
     }
 
     public Invoker getInvoker(Binding binding, Operation operation) {
+        InvocationChain chain = getInvocationChain(binding, operation);
+        if (chain != null) {
+            return chain.getHeadInvoker();
+        } else {
+            return null;
+        }
+    }
+
+    public InvocationChain getInvocationChain(Binding binding, Operation operation) {
         RuntimeWire wire = getRuntimeWire(binding);
         if (wire == null) {
             return null;
@@ -87,7 +96,7 @@
         for (InvocationChain chain : wire.getInvocationChains()) {
             Operation op = chain.getTargetOperation();
             if (mapper.isCompatible(operation, op, op.getInterface().isRemotable())) {
-                return chain.getHeadInvoker();
+                return chain;
             }
         }
         return null;

Added: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java?view=auto&rev=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java (added)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java Tue Jul 17 00:54:40 2007
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.tuscany.sca.core.runtime;
+
+import org.apache.tuscany.sca.invocation.Interceptor;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.invocation.Message;
+
+public class RuntimeSCABindingInvoker implements Interceptor {
+
+    private Invoker next;
+    
+    public RuntimeSCABindingInvoker() {
+    }
+
+    public void setNext(Invoker next) {
+        this.next = next;
+    }
+
+    public Invoker getNext() {
+        return next;
+    }
+
+    public Message invoke(Message msg) {
+        return next.invoke(msg);
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingInvoker.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingProviderFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingProviderFactory.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingProviderFactory.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCABindingProviderFactory.java Tue Jul 17 00:54:40 2007
@@ -35,13 +35,13 @@
     public ReferenceBindingProvider createReferenceBindingProvider(RuntimeComponent component,
                                                                    RuntimeComponentReference reference,
                                                                    SCABinding binding) {
-        return new RuntimeSCABindingProvider(component, reference, binding);
+        return new RuntimeSCAReferenceBindingProvider(component, reference, binding);
     }
 
     public ServiceBindingProvider createServiceBindingProvider(RuntimeComponent component,
                                                                RuntimeComponentService service,
                                                                SCABinding binding) {
-        return null;
+        return new RuntimeSCAServiceBindingProvider(component, service, binding);
     }
 
     public Class<SCABinding> getModelType() {

Added: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java?view=auto&rev=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java (added)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java Tue Jul 17 00:54:40 2007
@@ -0,0 +1,114 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.core.runtime;
+
+import org.apache.tuscany.sca.assembly.SCABinding;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Interceptor;
+import org.apache.tuscany.sca.invocation.InvocationChain;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.provider.ReferenceBindingProvider2;
+import org.apache.tuscany.sca.runtime.EndpointReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+import org.apache.tuscany.sca.runtime.RuntimeWire;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class RuntimeSCAReferenceBindingProvider implements ReferenceBindingProvider2 {
+
+    private RuntimeComponentReference reference;
+    private SCABinding binding;
+    private boolean started = false;
+
+    public RuntimeSCAReferenceBindingProvider(RuntimeComponent component,
+                                              RuntimeComponentReference reference,
+                                              SCABinding binding) {
+        this.reference = reference;
+        this.binding = binding;
+    }
+
+    public InterfaceContract getBindingInterfaceContract() {
+        return reference.getInterfaceContract();
+    }
+
+    public boolean supportsAsyncOneWayInvocation() {
+        return true;
+    }
+
+    public Invoker createInvoker(Operation operation) {
+        return new RuntimeSCABindingInvoker();
+    }
+
+    @Deprecated
+    public Invoker createInvoker(Operation operation, boolean isCallback) {
+        if (isCallback) {
+            throw new UnsupportedOperationException();
+        } else {
+            return createInvoker(operation);
+        }
+    }
+
+    public void start() {
+        if (started) {
+            return;
+        } else {
+            started = true;
+        }
+        for (RuntimeWire sourceWire : reference.getRuntimeWires()) {
+            if (sourceWire.getSource().getBinding() == binding) {
+                EndpointReference target = sourceWire.getTarget();
+                if (target != null) {
+                    RuntimeComponentService service = (RuntimeComponentService)target.getContract();
+                    if (service != null) { // not a callback wire
+                        SCABinding scaBinding = service.getBinding(SCABinding.class);
+                        RuntimeWire targetWire = service.getRuntimeWire(scaBinding);
+                        boolean dynamicService = service.getInterfaceContract().getInterface().isDynamic();
+                        for (InvocationChain sourceChain : sourceWire.getInvocationChains()) {
+                            InvocationChain targetChain =
+                                service.getInvocationChain(scaBinding, sourceChain.getTargetOperation());
+                            if (targetChain == null && dynamicService) {
+                                targetChain = targetWire.getInvocationChains().get(0);
+                            }
+                            if (targetChain != null) {
+                                ((Interceptor)sourceChain.getTailInvoker()).setNext(targetChain.getHeadInvoker());
+                                if (!dynamicService) {
+                                    sourceChain.setTargetOperation(targetChain.getSourceOperation());
+                                }
+                            } else {
+                                throw new RuntimeException("Incompatible operations for source and target wires");
+                            }
+                        }
+                        if (!dynamicService) {
+                            sourceWire.getTarget().setInterfaceContract(targetWire.getSource().getInterfaceContract());
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    public void stop() {
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAReferenceBindingProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java?view=auto&rev=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java (added)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java Tue Jul 17 00:54:40 2007
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.core.runtime;
+
+import org.apache.tuscany.sca.assembly.Binding;
+import org.apache.tuscany.sca.assembly.SCABinding;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Interceptor;
+import org.apache.tuscany.sca.invocation.InvocationChain;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.provider.ServiceBindingProvider2;
+import org.apache.tuscany.sca.runtime.EndpointReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+import org.apache.tuscany.sca.runtime.RuntimeWire;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class RuntimeSCAServiceBindingProvider implements ServiceBindingProvider2 {
+
+    private RuntimeComponentService service;
+    private boolean started = false;
+
+    public RuntimeSCAServiceBindingProvider(RuntimeComponent component,
+                                            RuntimeComponentService service,
+                                            SCABinding binding) {
+        this.service = service;
+    }
+
+    public InterfaceContract getBindingInterfaceContract() {
+        return service.getInterfaceContract();
+    }
+
+    public boolean supportsAsyncOneWayInvocation() {
+        return true;
+    }
+
+    public Invoker createCallbackInvoker(Operation operation) {
+        return new RuntimeSCABindingInvoker();
+    }
+
+    public void start() {
+        if (started) {
+            return;
+        } else {
+            started = true;
+        }
+        for (RuntimeWire sourceWire : service.getCallbackWires()) {
+            if (sourceWire.getTarget().getBinding() instanceof SCABinding) {
+                EndpointReference source = sourceWire.getSource();
+                if (source != null) {
+                    RuntimeComponentReference reference = (RuntimeComponentReference)source.getContract();
+                    if (reference != null) { // a hard-wired callback
+                        Binding refBinding = source.getBinding();
+                        RuntimeWire targetWire = reference.getRuntimeWire(refBinding);
+                        for (InvocationChain sourceChain : sourceWire.getCallbackInvocationChains()) {
+                            InvocationChain targetChain =
+                                reference.getCallbackInvocationChain(refBinding, sourceChain.getTargetOperation());
+                            if (targetChain != null) {
+                                ((Interceptor)sourceChain.getTailInvoker()).setNext(targetChain.getHeadInvoker());
+                                sourceChain.setTargetOperation(targetChain.getSourceOperation());
+                            } else {
+                                throw new RuntimeException(
+                                                           "Incompatible operations for source and target callback wires");
+                            }
+                        }
+                        sourceWire.getSource().setInterfaceContract(targetWire.getTarget().getInterfaceContract());
+                    }
+                }
+            }
+        }
+    }
+
+    public void stop() {
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/runtime/RuntimeSCAServiceBindingProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java (original)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntimeBuilder.java Tue Jul 17 00:54:40 2007
@@ -44,6 +44,7 @@
 import org.apache.tuscany.sca.assembly.xml.CompositeProcessor;
 import org.apache.tuscany.sca.assembly.xml.ConstrainingTypeDocumentProcessor;
 import org.apache.tuscany.sca.assembly.xml.ConstrainingTypeProcessor;
+import org.apache.tuscany.sca.assembly.xml.SCABindingProcessor;
 import org.apache.tuscany.sca.contribution.ContributionFactory;
 import org.apache.tuscany.sca.contribution.processor.ContributionPostProcessor;
 import org.apache.tuscany.sca.contribution.processor.DefaultContributionPostProcessorExtensionPoint;
@@ -56,6 +57,7 @@
 import org.apache.tuscany.sca.contribution.processor.ExtensibleURLArtifactProcessor;
 import org.apache.tuscany.sca.contribution.processor.PackageProcessor;
 import org.apache.tuscany.sca.contribution.processor.PackageProcessorExtensionPoint;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
 import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPoint;
 import org.apache.tuscany.sca.contribution.processor.impl.FolderContributionProcessor;
 import org.apache.tuscany.sca.contribution.processor.impl.JarContributionProcessor;
@@ -121,6 +123,14 @@
         RuntimeWireProcessorExtensionPoint wireProcessors = new DefaultWireProcessorExtensionPoint();
         registry.addExtensionPoint(wireProcessors);
         RuntimeWireProcessor wireProcessor = new ExtensibleWireProcessor(wireProcessors);
+
+        // Add the SCABindingProcessor extension
+        PolicyFactory policyFactory = registry.getExtensionPoint(PolicyFactory.class);
+        SCABindingProcessor scaBindingProcessor = new SCABindingProcessor(assemblyFactory,
+                                                                          policyFactory,
+                                                                          scaBindingFactory);
+        StAXArtifactProcessorExtensionPoint processors = registry.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+        processors.addArtifactProcessor(scaBindingProcessor);       
 
         // Create a provider factory extension point
         ProviderFactoryExtensionPoint providerFactories = new DefaultProviderFactoryExtensionPoint();

Modified: incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptInvoker.java?view=diff&rev=556840&r1=556839&r2=556840
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptInvoker.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptInvoker.java Tue Jul 17 00:54:40 2007
@@ -44,12 +44,16 @@
         this.operation = operation;
     }
 
-    protected Object doInvoke(Object[] objects) throws ScriptException {
+    protected Object doInvoke(Object[] objects, Operation op) throws ScriptException {
         if (xmlHelper != null) {
             objects[0] = xmlHelper.toScriptXML((OMElement)objects[0]);
         }
 
-        Object response = ((Invocable)scriptEngine).invokeFunction(operation.getName(), objects);
+        Operation oper = operation;  // static setting
+        if (oper.getName() == null) {  // if no static setting
+            oper = op;  // use dynamic setting
+        }
+        Object response = ((Invocable)scriptEngine).invokeFunction(oper.getName(), objects);
 
         if (xmlHelper != null) {
             response = xmlHelper.toOMElement(response);
@@ -60,7 +64,7 @@
 
     public Message invoke(Message msg) {
         try {
-            Object resp = doInvoke((Object[])msg.getBody());
+            Object resp = doInvoke((Object[])msg.getBody(), msg.getOperation());
             msg.setBody(resp);
         } catch (ScriptException e) {
             msg.setFaultBody(e.getCause());



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org