Update to support DOMInvoker with remote endpoints

git-svn-id: https://svn.apache.org/repos/asf/tuscany/sca-java-2.x/trunk@1373865 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/ServiceHelper.java b/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/ServiceHelper.java
index 274b15d..47bee4f 100644
--- a/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/ServiceHelper.java
+++ b/modules/domain-node/src/main/java/org/apache/tuscany/sca/impl/ServiceHelper.java
@@ -35,15 +35,19 @@
 import org.apache.tuscany.sca.context.CompositeContext;

 import org.apache.tuscany.sca.core.ExtensionPointRegistry;

 import org.apache.tuscany.sca.core.FactoryExtensionPoint;

+import org.apache.tuscany.sca.core.assembly.impl.RuntimeEndpointReferenceImpl;

 import org.apache.tuscany.sca.core.invocation.ExtensibleProxyFactory;

 import org.apache.tuscany.sca.core.invocation.ProxyFactory;

 import org.apache.tuscany.sca.core.invocation.ProxyFactoryExtensionPoint;

+import org.apache.tuscany.sca.core.invocation.impl.AsyncJDKInvocationHandler;

+import org.apache.tuscany.sca.core.invocation.impl.DOMInvokerImpl;

 import org.apache.tuscany.sca.deployment.Deployer;

 import org.apache.tuscany.sca.interfacedef.Interface;

 import org.apache.tuscany.sca.interfacedef.InterfaceContract;

 import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;

 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;

 import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;

+import org.apache.tuscany.sca.invocation.MessageFactory;

 import org.apache.tuscany.sca.runtime.ContributionDescription;

 import org.apache.tuscany.sca.runtime.DOMInvoker;

 import org.apache.tuscany.sca.runtime.DomainRegistry;

@@ -54,6 +58,7 @@
 import org.oasisopen.sca.NoSuchServiceException;

 import org.oasisopen.sca.ServiceRuntimeException;

 import org.oasisopen.sca.annotation.Remotable;

+import org.w3c.dom.Node;

 

 /**

  * TODO: Merge this into sca-client RemoteServiceInvocationHandler

@@ -106,8 +111,8 @@
         if (((RuntimeComponent)ep.getComponent()).getComponentContext() != null) {

             return ((TuscanyServiceReference<?>)((RuntimeComponent)ep.getComponent()).getServiceReference(null, serviceName)).getDOMInvoker();

         } else {

-            throw new NoSuchServiceException(serviceURI);

-//            return getRemoteProxy(interfaze, ep, domainRegistry, extensionPointRegistry, deployer);

+//            throw new NoSuchServiceException(serviceURI);

+            return getRemoteDOMInvoker(ep, domainRegistry, extensionPointRegistry, deployer);

         }

     }

 

@@ -145,6 +150,44 @@
         return proxyFactory.createProxy(serviceInterface, epr);

     }

 

+    private static DOMInvoker getRemoteDOMInvoker(Endpoint endpoint, DomainRegistry domainRegistry, ExtensionPointRegistry extensionPointRegistry, Deployer deployer) throws NoSuchServiceException {

+        FactoryExtensionPoint factories = extensionPointRegistry.getExtensionPoint(FactoryExtensionPoint.class);

+        AssemblyFactory assemblyFactory = factories.getFactory(AssemblyFactory.class);

+        JavaInterfaceFactory javaInterfaceFactory = factories.getFactory(JavaInterfaceFactory.class);

+        ProxyFactory proxyFactory =

+            new ExtensibleProxyFactory(extensionPointRegistry.getExtensionPoint(ProxyFactoryExtensionPoint.class));

+

+        CompositeContext compositeContext =

+            new CompositeContext(extensionPointRegistry, domainRegistry, null, null, null,

+                                 deployer.getSystemDefinitions());

+

+        RuntimeEndpointReference epr;

+        try {

+            epr =

+                createEndpointReference(javaInterfaceFactory,

+                                        compositeContext,

+                                        assemblyFactory,

+                                        endpoint,

+                                        null);

+        } catch (Exception e) {

+            throw new ServiceRuntimeException(e);

+        }

+

+        InterfaceContract ic;

+        try {

+           ic = (InterfaceContract)epr.getGeneratedWSDLContract(epr.getBindingInterfaceContract()).clone();

+        } catch (CloneNotSupportedException e) {

+            throw new RuntimeException(e);

+        }

+        ic.getInterface().resetDataBinding(Node.class.getName());

+        

+        ((RuntimeEndpointReferenceImpl)epr).setreferenceInterfaceContract(ic);

+        epr.rebuild();

+        

+        AsyncJDKInvocationHandler handler = new AsyncJDKInvocationHandler(extensionPointRegistry, factories.getFactory(MessageFactory.class), null, epr);

+        return new DOMInvokerImpl(handler);

+    }

+

     private static RuntimeEndpointReference createEndpointReference(JavaInterfaceFactory javaInterfaceFactory,

                                                              CompositeContext compositeContext,

                                                              AssemblyFactory assemblyFactory,