You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by lr...@apache.org on 2009/03/19 07:55:35 UTC

svn commit: r755852 - in /tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider: JSONRPCBindingProviderFactory.java JSONRPCServiceBindingProvider.java JSONRPCServiceServlet.java

Author: lresende
Date: Thu Mar 19 06:55:35 2009
New Revision: 755852

URL: http://svn.apache.org/viewvc?rev=755852&view=rev
Log:
Wrapping the invocation with a message, in order to pass extra information during invocation

Modified:
    tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingProviderFactory.java
    tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
    tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceServlet.java

Modified: tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingProviderFactory.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingProviderFactory.java?rev=755852&r1=755851&r2=755852&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingProviderFactory.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingProviderFactory.java Thu Mar 19 06:55:35 2009
@@ -20,9 +20,11 @@
 package org.apache.tuscany.sca.binding.jsonrpc.provider;
 
 import org.apache.tuscany.sca.binding.jsonrpc.JSONRPCBinding;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.host.http.ServletHost;
 import org.apache.tuscany.sca.host.http.ServletHostExtensionPoint;
+import org.apache.tuscany.sca.invocation.MessageFactory;
 import org.apache.tuscany.sca.provider.BindingProviderFactory;
 import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
 import org.apache.tuscany.sca.provider.ServiceBindingProvider;
@@ -37,11 +39,15 @@
  */
 public class JSONRPCBindingProviderFactory implements BindingProviderFactory<JSONRPCBinding> {
 
+	private MessageFactory messageFactory;
     private ServletHost servletHost;
     
     public JSONRPCBindingProviderFactory(ExtensionPointRegistry extensionPoints) {
         ServletHostExtensionPoint servletHosts = extensionPoints.getExtensionPoint(ServletHostExtensionPoint.class);
         this.servletHost = servletHosts.getServletHosts().get(0);
+        
+        ModelFactoryExtensionPoint modelFactories = extensionPoints.getExtensionPoint(ModelFactoryExtensionPoint.class);
+        messageFactory = modelFactories.getFactory(MessageFactory.class);
     }
     
     public ReferenceBindingProvider createReferenceBindingProvider(RuntimeComponent component,
@@ -54,7 +60,7 @@
     public ServiceBindingProvider createServiceBindingProvider(RuntimeComponent component,
                                                                RuntimeComponentService service,
                                                                JSONRPCBinding binding) {
-        return new JSONRPCServiceBindingProvider(component, service, binding, servletHost);
+        return new JSONRPCServiceBindingProvider(component, service, binding, messageFactory, servletHost);
     }
 
     public Class<JSONRPCBinding> getModelType() {

Modified: tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java?rev=755852&r1=755851&r2=755852&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java Thu Mar 19 06:55:35 2009
@@ -32,6 +32,7 @@
 import org.apache.tuscany.sca.interfacedef.InterfaceContract;
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
+import org.apache.tuscany.sca.invocation.MessageFactory;
 import org.apache.tuscany.sca.provider.ServiceBindingProvider;
 import org.apache.tuscany.sca.runtime.RuntimeComponent;
 import org.apache.tuscany.sca.runtime.RuntimeComponentService;
@@ -48,6 +49,8 @@
     //       the same for clients using either the ajax or jsonrpc binding
     private static final String SCA_DOMAIN_SCRIPT = "/SCADomain/scaDomain.js";
     
+    private MessageFactory messageFactory;
+    
     private RuntimeComponent component;
     private RuntimeComponentService service;
     private InterfaceContract serviceContract;
@@ -59,10 +62,12 @@
     public JSONRPCServiceBindingProvider(RuntimeComponent component,
                                          RuntimeComponentService service,
                                          JSONRPCBinding binding,
+                                         MessageFactory messageFactory,
                                          ServletHost servletHost) {
         this.component = component;
         this.service = service;
         this.binding = binding;
+        this.messageFactory = messageFactory;
         this.servletHost = servletHost;
         
         //clone the service contract to avoid databinding issues
@@ -95,7 +100,7 @@
 
         // Create and register a Servlet for this service
         JSONRPCServiceServlet serviceServlet =
-            new JSONRPCServiceServlet(binding, service, serviceContract, serviceInterface, proxy);
+            new JSONRPCServiceServlet(messageFactory, binding, service, serviceContract, serviceInterface, proxy);
         String mapping = binding.getURI();
         if (!mapping.endsWith("/")) {
             mapping += "/";

Modified: tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceServlet.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceServlet.java?rev=755852&r1=755851&r2=755852&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceServlet.java (original)
+++ tuscany/branches/sca-java-1.x/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceServlet.java Thu Mar 19 06:55:35 2009
@@ -35,6 +35,8 @@
 import org.apache.tuscany.sca.assembly.Binding;
 import org.apache.tuscany.sca.interfacedef.InterfaceContract;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Message;
+import org.apache.tuscany.sca.invocation.MessageFactory;
 import org.apache.tuscany.sca.runtime.RuntimeComponentService;
 import org.apache.tuscany.sca.runtime.RuntimeWire;
 import org.json.JSONArray;
@@ -55,6 +57,8 @@
 public class JSONRPCServiceServlet extends JSONRPCServlet {
     private static final long serialVersionUID = 1L;
 
+    transient MessageFactory messageFactory;
+    
     transient Binding binding;
     transient String serviceName;
     transient Object serviceInstance;
@@ -62,12 +66,14 @@
     transient InterfaceContract serviceContract;
     transient Class<?> serviceInterface;
 
-    public JSONRPCServiceServlet(Binding binding,
+    public JSONRPCServiceServlet(MessageFactory messageFactory, 
+    		                     Binding binding,
                                  RuntimeComponentService componentService,
                                  InterfaceContract serviceContract,
                                  Class<?> serviceInterface,
                                  Object serviceInstance) {
-        this.binding = binding;
+        this.messageFactory = messageFactory;
+    	this.binding = binding;
         this.serviceName = binding.getName();
         this.componentService = componentService;
         this.serviceContract = serviceContract;
@@ -234,21 +240,38 @@
         Object result = null;
       
         try {
-        	JSONObject jsonResponse = new JSONObject();
-        	result = wire.invoke(jsonOperation, args);
+            // Invoke the get operation on the service implementation
+            Message requestMessage = messageFactory.createMessage();
+            requestMessage.setOperation(jsonOperation);
+
+            //store http request as a parameter to the message
+            requestMessage.getHeaders().add(request);
+            
+            requestMessage.setBody(args);
 
-        	try {
-                jsonResponse.put("result", result);
-                jsonResponse.putOpt("id", id);
-                //get response to send to client
-                return jsonResponse.toString().getBytes("UTF-8");
-            } catch (Exception e) {
-                throw new ServiceRuntimeException("Unable to create JSON response", e);
+        	//result = wire.invoke(jsonOperation, args);
+            Message responseMessage = wire.getInvocationChain(jsonOperation).getHeadInvoker().invoke(requestMessage);
+            
+            if (responseMessage.isFault()) {
+            	throw new RuntimeException((Throwable)responseMessage.getBody());
+            } else {
+            	try {
+            		result = responseMessage.getBody();
+                	JSONObject jsonResponse = new JSONObject();
+                    jsonResponse.put("result", result);
+                    jsonResponse.putOpt("id", id);
+                    //get response to send to client
+                    return jsonResponse.toString().getBytes("UTF-8");
+                } catch (Exception e) {
+                    throw new ServiceRuntimeException("Unable to create JSON response", e);
+                }
             }
-        } catch (InvocationTargetException e) {
+
+        	
+        }/* catch (InvocationTargetException e) {
            	 JSONRPCResult errorResult = new JSONRPCResult(JSONRPCResult.CODE_REMOTE_EXCEPTION, id, e.getCause() );
              return errorResult.toString().getBytes("UTF-8");
-        } catch(RuntimeException e) {
+        }*/ catch(RuntimeException e) {
              JSONRPCResult errorResult = new JSONRPCResult(JSONRPCResult.CODE_REMOTE_EXCEPTION, id, e.getCause());
              return errorResult.toString().getBytes("UTF-8");
         }