tuscany-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rf...@apache.org
Subject svn commit: r1180780 - in /tuscany/sca-java-2.x/trunk: distribution/all/src/main/release/bin/ modules/binding-jsonrpc-runtime/ modules/binding-jsonrpc-runtime/META-INF/ modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrp...
Date Mon, 10 Oct 2011 05:01:05 GMT
Author: rfeng
Date: Mon Oct 10 05:01:04 2011
New Revision: 1180780

URL: http://svn.apache.org/viewvc?rev=1180780&view=rev
Log:
Use home-grown JSONRPC implementation

Added:
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java   (contents, props changed)
      - copied, changed from r1180555, tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcServlet.java   (contents, props changed)
      - copied, changed from r1180555, tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpcServlet.java
Removed:
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpcServlet.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceServlet.java
    tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2JavaBean.java
    tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSON.java
    tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSONObject.java
    tuscany/sca-java-2.x/trunk/modules/databinding-json/src/test/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSONTestCase.java
    tuscany/sca-java-2.x/trunk/modules/databinding-json/src/test/java/org/apache/tuscany/sca/databinding/json/POJOTestCase.java
Modified:
    tuscany/sca-java-2.x/trunk/distribution/all/src/main/release/bin/LICENSE
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/META-INF/MANIFEST.MF
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/pom.xml
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc10Request.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc10Response.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Error.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Request.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Response.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Result.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCReferenceBindingProvider.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCExceptionTestCase.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCServiceTestCase.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCBinding.java
    tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/impl/JSONRPCBindingImpl.java
    tuscany/sca-java-2.x/trunk/modules/databinding-json/META-INF/MANIFEST.MF
    tuscany/sca-java-2.x/trunk/modules/databinding-json/pom.xml
    tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONHelper.java
    tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/String2JSON.java
    tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/jackson/JacksonHelper.java
    tuscany/sca-java-2.x/trunk/modules/implementation-python-runtime/pom.xml

Modified: tuscany/sca-java-2.x/trunk/distribution/all/src/main/release/bin/LICENSE
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/distribution/all/src/main/release/bin/LICENSE?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/distribution/all/src/main/release/bin/LICENSE (original)
+++ tuscany/sca-java-2.x/trunk/distribution/all/src/main/release/bin/LICENSE Mon Oct 10 05:01:04 2011
@@ -268,7 +268,6 @@ The following components come under Apac
  hazelcast-client-1.9.2.2.jar
  httpclient-4.1.2.jar
  httpcore-4.1.3.jar
- jabsorb-1.3.1.jar
  jackson-core-asl-1.8.5.jar
  jackson-mapper-asl-1.8.5.jar
  jackson-xc-1.8.5.jar
@@ -2247,3 +2246,16 @@ PYTHON SOFTWARE FOUNDATION LICENSE VERSI
 8. By copying, installing or otherwise using Jython, Licensee agrees to be bound by the terms and conditions of this License Agreement.
 ========================================================================================================
 
+The json-20090211.jar includes files under the following licenses: 
+========================================================================================================
+Copyright (c) 2002 JSON.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+The Software shall be used for Good, not Evil.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 
+========================================================================================================
+

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/META-INF/MANIFEST.MF?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/META-INF/MANIFEST.MF (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/META-INF/MANIFEST.MF Mon Oct 10 05:01:04 2011
@@ -21,6 +21,7 @@ Import-Package: javax.security.auth.logi
  org.apache.tuscany.sca.core;version="2.0.0",
  org.apache.tuscany.sca.databinding.javabeans;version="2.0.0",
  org.apache.tuscany.sca.databinding.json;version="2.0.0",
+ org.apache.tuscany.sca.databinding.json.jackson;version="2.0.0",
  org.apache.tuscany.sca.host.http;version="2.0.0",
  org.apache.tuscany.sca.host.http.client;version="2.0.0",
  org.apache.tuscany.sca.interfacedef;version="2.0.0",

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/pom.xml?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/pom.xml (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/pom.xml Mon Oct 10 05:01:04 2011
@@ -98,9 +98,9 @@
         </dependency>
 
         <dependency>
-            <groupId>org.jabsorb</groupId>
-            <artifactId>jabsorb</artifactId>
-            <version>1.3.1</version>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>20090211</version>
         </dependency>
 
         <!-- Explicitly add slf4j so that jabsorb uses the latest versions -->

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc10Request.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc10Request.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc10Request.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc10Request.java Mon Oct 10 05:01:04 2011
@@ -19,6 +19,8 @@
 
 package org.apache.tuscany.sca.binding.jsonrpc.protocol;
 
+import java.util.Arrays;
+
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -66,6 +68,17 @@ public class JsonRpc10Request {
 
     }
 
+    public JSONObject toJSONObject() throws JSONException {
+        JSONObject req = new JSONObject();
+        req.put("id", id);
+        req.put("method", method);
+        if (params != null) {
+            JSONArray args = new JSONArray(Arrays.asList(params));
+            req.put("params", args);
+        }
+        return req;
+    }
+
     public boolean isNotification() {
         return id == null;
     }

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc10Response.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc10Response.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc10Response.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc10Response.java Mon Oct 10 05:01:04 2011
@@ -37,9 +37,17 @@ import org.json.JSONObject;
  * </ul> 
  */
 public class JsonRpc10Response {
+    public static final int REMOTE_EXCEPTION = 490;
     private Object id;
     private Object result;
     private Object error;
+    
+    private volatile JSONObject response;
+
+    public JsonRpc10Response(JSONObject response) {
+        super();
+        this.response = response;
+    }
 
     public JsonRpc10Response(Object id, Object result, Object error) {
         super();
@@ -51,8 +59,32 @@ public class JsonRpc10Response {
         }
     }
 
+    public JsonRpc10Response(Object id, Throwable t) {
+        super();
+        this.id = id;
+        this.result = null;
+        try {
+            JSONObject obj = new JSONObject();
+            // obj.put("msg", t.getMessage());
+            obj.put("code", REMOTE_EXCEPTION);
+            obj.put("message", t.getMessage());
+            JSONObject exception = new JSONObject();
+            exception.put("class", t.getClass().getName());
+            exception.put("message", t.getMessage());
+            exception.put("stackTrace", JsonRpc20Error.stackTrace(t));
+            obj.put("data", exception);
+            this.error = obj;
+        } catch (JSONException e) {
+            throw new IllegalArgumentException(e);
+        }
+
+    }
+
     public JSONObject toJSONObject() throws JSONException {
-        JSONObject response = new JSONObject();
+        if (response != null) {
+            return response;
+        }
+        response = new JSONObject();
         response.put("id", id);
         if (result != null) {
             response.put("result", result);

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Error.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Error.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Error.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Error.java Mon Oct 10 05:01:04 2011
@@ -59,7 +59,7 @@ public class JsonRpc20Error extends Json
         super(id);
         this.code = INTERNAL_ERROR;
         this.messaege = t.getMessage();
-        this.data = stackTrace(t);
+        this.data = t;
     }
 
     public static String stackTrace(Throwable t) {
@@ -68,14 +68,36 @@ public class JsonRpc20Error extends Json
         return sw.toString();
     }
 
+    public JsonRpc20Error(JSONObject response) {
+        super(response);
+        this.id = response.opt("id");
+        this.code = response.optInt("code");
+        this.messaege = response.optString("message");
+        this.data = response.opt("data");
+    }
+
     public JSONObject toJSONObject() throws JSONException {
-        JSONObject response = new JSONObject();
+        if (response != null) {
+            return response;
+        }
+
+        response = new JSONObject();
         response.put("jsonrpc", "2.0");
         response.put("id", id);
         JSONObject error = new JSONObject();
         error.put("code", code);
         error.put("message", messaege);
-        error.put("data", data);
+
+        if (data instanceof Throwable) {
+            Throwable t = (Throwable)data;
+            JSONObject exception = new JSONObject();
+            exception.put("class", t.getClass().getName());
+            exception.put("message", t.getMessage());
+            exception.put("stackTrace", JsonRpc20Error.stackTrace(t));
+            response.put("data", exception);
+        } else {
+            error.put("data", data);
+        }
         response.put("error", error);
 
         return response;

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Request.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Request.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Request.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Request.java Mon Oct 10 05:01:04 2011
@@ -19,6 +19,7 @@
 
 package org.apache.tuscany.sca.binding.jsonrpc.protocol;
 
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
@@ -49,6 +50,21 @@ public class JsonRpc20Request {
         this.mappedParams = mappedParams;
     }
 
+    public JSONObject toJSONObject() throws JSONException {
+        JSONObject req = new JSONObject();
+        req.put("jsonrpc", "2.0");
+        req.put("id", id);
+        req.put("method", method);
+        if (params != null) {
+            JSONArray args = new JSONArray(Arrays.asList(params));
+            req.put("params", args);
+        } else {
+            JSONObject args = new JSONObject(mappedParams);
+            req.put("params", args);
+        }
+        return req;
+    }
+
     public JsonRpc20Request(JSONObject req) throws JSONException {
         super();
         if (req.has("jsonrpc") && "2.0".equals(req.getString("jsonrpc"))) {

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Response.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Response.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Response.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Response.java Mon Oct 10 05:01:04 2011
@@ -30,8 +30,16 @@ public class JsonRpc20Response extends J
         this.result = result;
     }
 
+    public JsonRpc20Response(JSONObject response) {
+        super(response);
+        this.result = response.opt("result");
+    }
+
     public JSONObject toJSONObject() throws JSONException {
-        JSONObject response = new JSONObject();
+        if (response != null) {
+            return response;
+        }
+        response = new JSONObject();
         response.put("jsonrpc", "2.0");
         response.put("id", id);
         response.put("result", result);

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Result.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Result.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Result.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpc20Result.java Mon Oct 10 05:01:04 2011
@@ -27,7 +27,13 @@ import org.json.JSONObject;
 
 public abstract class JsonRpc20Result {
     protected Object id;
+    protected volatile JSONObject response;
 
+    protected JsonRpc20Result(JSONObject response) {
+        super();
+        this.response = response;
+    }
+    
     protected JsonRpc20Result(Object id) {
         super();
         this.id = id;

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCReferenceBindingProvider.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCReferenceBindingProvider.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCReferenceBindingProvider.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCReferenceBindingProvider.java Mon Oct 10 05:01:04 2011
@@ -70,7 +70,7 @@ public class JSONRPCReferenceBindingProv
 
     public Invoker createInvoker(Operation operation) {
         // final Interface intf = reference.getInterfaceContract().getInterface();
-        return new JSONRPCBindingInvoker(endpointReference, operation, httpClient);
+        return new JsonRpcInvoker(endpointReference, operation, httpClient);
     }
 
     public void start() {

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCServiceBindingProvider.java Mon Oct 10 05:01:04 2011
@@ -92,8 +92,8 @@ public class JSONRPCServiceBindingProvid
         Object proxy = component.getComponentContext().getServiceReference(serviceInterface, endpoint).getService();
 
         // Create and register a Servlet for this service
-        JSONRPCServiceServlet serviceServlet =
-            new JSONRPCServiceServlet(messageFactory, endpoint, serviceInterface, proxy);
+        JsonRpcServlet serviceServlet =
+            new JsonRpcServlet(messageFactory, endpoint, serviceInterface, proxy);
         String mapping = registerServlet(serviceServlet);
         servletMappings.add(mapping);
     }

Copied: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java (from r1180555, tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java)
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java?p2=tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java&p1=tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java&r1=1180555&r2=1180780&rev=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JSONRPCBindingInvoker.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java Mon Oct 10 05:01:04 2011
@@ -21,16 +21,11 @@ package org.apache.tuscany.sca.binding.j
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
 import java.lang.reflect.Type;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
-
-import javax.xml.bind.annotation.adapters.XmlAdapter;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
-import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
+import java.util.UUID;
 
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
@@ -42,24 +37,19 @@ import org.apache.http.entity.EntityTemp
 import org.apache.http.entity.StringEntity;
 import org.apache.http.util.EntityUtils;
 import org.apache.tuscany.sca.assembly.EndpointReference;
+import org.apache.tuscany.sca.binding.jsonrpc.JSONRPCBinding;
+import org.apache.tuscany.sca.binding.jsonrpc.protocol.JsonRpc10Request;
+import org.apache.tuscany.sca.binding.jsonrpc.protocol.JsonRpc20Request;
 import org.apache.tuscany.sca.databinding.json.JSONDataBinding;
+import org.apache.tuscany.sca.databinding.json.jackson.JacksonHelper;
 import org.apache.tuscany.sca.interfacedef.DataType;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
 import org.apache.tuscany.sca.invocation.DataExchangeSemantics;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
-import org.codehaus.jackson.map.AnnotationIntrospector;
-import org.codehaus.jackson.map.DeserializationConfig;
 import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.deser.CustomDeserializerFactory;
-import org.codehaus.jackson.map.deser.StdDeserializerProvider;
-import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector;
-import org.codehaus.jackson.map.ser.CustomSerializerFactory;
 import org.codehaus.jackson.map.type.TypeFactory;
-import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;
-import org.codehaus.jackson.xc.XmlAdapterJsonDeserializer;
-import org.codehaus.jackson.xc.XmlAdapterJsonSerializer;
-import org.json.JSONException;
 import org.json.JSONObject;
 import org.oasisopen.sca.ServiceRuntimeException;
 
@@ -68,14 +58,14 @@ import org.oasisopen.sca.ServiceRuntimeE
  * 
  * @version $Rev$ $Date$
  */
-public class JSONRPCBindingInvoker implements Invoker, DataExchangeSemantics {
+public class JsonRpcInvoker implements Invoker, DataExchangeSemantics {
     private EndpointReference endpointReference;
     private Operation operation;
     private String uri;
     private ObjectMapper mapper;
     private HttpClient httpClient;
 
-    public JSONRPCBindingInvoker(EndpointReference endpointReference, Operation operation, HttpClient httpClient) {
+    public JsonRpcInvoker(EndpointReference endpointReference, Operation operation, HttpClient httpClient) {
         this.endpointReference = endpointReference;
         this.operation = operation;
         this.uri = endpointReference.getBinding().getURI();
@@ -87,35 +77,36 @@ public class JSONRPCBindingInvoker imple
         HttpPost post = null;
         HttpResponse response = null;
         try {
-            String requestId = "1";
+            String requestId = UUID.randomUUID().toString();
             post = new HttpPost(uri);
             HttpEntity entity = null;
             Object[] args = msg.getBody();
             final String db = msg.getOperation().getWrapper().getDataBinding();
 
             if (!db.equals(JSONDataBinding.NAME)) {
-
-                // Construct a map to hold JSON-RPC request
-                final Map<String, Object> jsonRequest = new HashMap<String, Object>();
-                jsonRequest.put("method", "Service" + "." + msg.getOperation().getName());
-
-                List<Object> params = null;
+                Object[] params = new Object[0];
                 // Extract the arguments
                 args = msg.getBody();
 
-                if (args != null) {
-                    params = Arrays.asList(args);
-                } else {
-                    params = Collections.emptyList();
+                if (args instanceof Object[]) {
+                    params = (Object[])args;
                 }
 
-                jsonRequest.put("params", params);
-                jsonRequest.put("id", requestId);
+                JSONObject jsonReq = null;
+                if (JSONRPCBinding.VERSION_20.equals(((JSONRPCBinding)endpointReference.getBinding()).getVersion())) {
+                    JsonRpc20Request req = new JsonRpc20Request(requestId, msg.getOperation().getName(), params);
+                    jsonReq = req.toJSONObject();
+                } else {
+                    JsonRpc10Request req = new JsonRpc10Request(requestId, msg.getOperation().getName(), params);
+                    jsonReq = req.toJSONObject();
+                }
+                final String json = jsonReq.toString(4);
 
                 // Create content producer so that we can stream the json result out
                 ContentProducer cp = new ContentProducer() {
                     public void writeTo(OutputStream outstream) throws IOException {
-                        mapper.writeValue(outstream, jsonRequest);
+                        // mapper.writeValue(outstream, req.toJSONObject().toString());
+                        outstream.write(json.getBytes("UTF-8"));
                     }
                 };
                 entity = new EntityTemplate(cp);
@@ -137,7 +128,7 @@ public class JSONRPCBindingInvoker imple
                 if (!db.equals(JSONDataBinding.NAME)) {
                     JSONObject jsonResponse = new JSONObject(entityResponse);
 
-                    if (!jsonResponse.has("result")) {
+                    if (!jsonResponse.isNull("error")) {
                         processException(jsonResponse);
                     }
                     DataType<List<DataType>> outputType = operation.getOutputType();
@@ -156,9 +147,6 @@ public class JSONRPCBindingInvoker imple
                     }
 
                     Object rawResult = jsonResponse.get("result");
-                    if (rawResult == null) {
-                        processException(jsonResponse);
-                    }
 
                     Class<?> returnClass = returnType.getPhysical();
                     Type genericReturnType = returnType.getGenericType();
@@ -182,65 +170,71 @@ public class JSONRPCBindingInvoker imple
                 response.getEntity().consumeContent();
                 throw new ServiceRuntimeException("Abnormal HTTP response: " + response.getStatusLine().toString());
             }
+        } catch (RuntimeException e) {
+            throw e;
+        } catch (Error e) {
+            throw e;
         } catch (Exception e) {
             // e.printStackTrace();
             msg.setFaultBody(e);
+        } catch (Throwable e) {
+            throw new ServiceRuntimeException(e);
         }
 
         return msg;
     }
 
     public static ObjectMapper createObjectMapper(Class<?> cls) {
-        ObjectMapper mapper = new ObjectMapper();
-        if (cls != null) {
-            // Workaround for http://jira.codehaus.org/browse/JACKSON-413
-            Package pkg = cls.getPackage();
-            if (pkg != null) {
-                XmlJavaTypeAdapters adapters = pkg.getAnnotation(XmlJavaTypeAdapters.class);
-                if (adapters != null) {
-                    CustomSerializerFactory serializerFactory = new CustomSerializerFactory();
-                    CustomDeserializerFactory deserializerFactory = new CustomDeserializerFactory();
-                    for (XmlJavaTypeAdapter a : adapters.value()) {
-                        XmlAdapter xmlAdapter = null;
-                        try {
-                            xmlAdapter = a.value().newInstance();
-                        } catch (Throwable e) {
-                            // Ignore
-                        }
-                        if (xmlAdapter != null) {
-                            XmlAdapterJsonDeserializer deserializer = new XmlAdapterJsonDeserializer(xmlAdapter, null);
-                            XmlAdapterJsonSerializer serializer = new XmlAdapterJsonSerializer(xmlAdapter, null);
-                            deserializerFactory.addSpecificMapping(a.type(), deserializer);
-                            serializerFactory.addGenericMapping(a.type(), serializer);
-                            StdDeserializerProvider deserializerProvider =
-                                new StdDeserializerProvider(deserializerFactory);
-                            mapper.setSerializerFactory(serializerFactory);
-                            mapper.setDeserializerProvider(deserializerProvider);
-                        }
-                    }
-                }
-            }
-        }
-        AnnotationIntrospector primary = new JaxbAnnotationIntrospector();
-        AnnotationIntrospector secondary = new JacksonAnnotationIntrospector();
-        AnnotationIntrospector pair = new AnnotationIntrospector.Pair(primary, secondary);
-        mapper.getDeserializationConfig().setAnnotationIntrospector(pair);
-        // [rfeng] To avoid complaints about javaClass
-        mapper.getDeserializationConfig().set(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, Boolean.FALSE);
-        mapper.getSerializationConfig().setAnnotationIntrospector(pair);
-        return mapper;
+        return JacksonHelper.createObjectMapper(cls);
     }
 
     /**
      * Generate and throw exception based on the data in the 'responseMessage'
      */
-    protected void processException(JSONObject responseMessage) throws JSONException {
+    protected void processException(JSONObject responseMessage) throws Throwable {
         // FIXME: We need to find a way to build Java exceptions out of the json-rpc error
-        JSONObject error = (JSONObject)responseMessage.get("error");
+        JSONObject error = (JSONObject)responseMessage.opt("error");
         if (error != null) {
+            Object data = error.opt("data");
+            if (data instanceof JSONObject) {
+                JSONObject fault = (JSONObject)data;
+                String javaClass = fault.optString("class");
+                String message = fault.optString("message");
+                String stackTrace = fault.optString("stackTrace");
+                if (javaClass != null) {
+                    if (stackTrace != null) {
+                        message = message + "\n" + stackTrace;
+                    }
+                    ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+                    if (operation instanceof JavaOperation) {
+                        Method method = ((JavaOperation)operation).getJavaMethod();
+                        classLoader = method.getDeclaringClass().getClassLoader();
+                    }
+                    Class<? extends Throwable> exceptionClass =
+                        (Class<? extends Throwable>)Class.forName(javaClass, false, classLoader);
+                    Constructor<? extends Throwable> ctor = null;
+                    Throwable ex = null;
+                    try {
+                        ctor = exceptionClass.getConstructor(String.class, Throwable.class);
+                        ex = ctor.newInstance(message, null);
+                    } catch (NoSuchMethodException e1) {
+                        try {
+                            ctor = exceptionClass.getConstructor(String.class);
+                            ex = ctor.newInstance(message);
+                        } catch (NoSuchMethodException e2) {
+                            try {
+                                ctor = exceptionClass.getConstructor(Throwable.class);
+                                ex = ctor.newInstance(null);
+                            } catch (NoSuchMethodException e3) {
+                                ctor = exceptionClass.getConstructor();
+                                ex = ctor.newInstance();
+                            }
+                        }
+                    }
+                    throw ex;
+                }
+            }
             throw new ServiceRuntimeException(error.toString());
-        } else {
-            throw new ServiceRuntimeException(responseMessage.toString());
         }
     }
 

Propchange: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Copied: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcServlet.java (from r1180555, tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpcServlet.java)
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcServlet.java?p2=tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcServlet.java&p1=tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpcServlet.java&r1=1180555&r2=1180780&rev=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/protocol/JsonRpcServlet.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcServlet.java Mon Oct 10 05:01:04 2011
@@ -17,7 +17,7 @@
  * under the License.    
  */
 
-package org.apache.tuscany.sca.binding.jsonrpc.protocol;
+package org.apache.tuscany.sca.binding.jsonrpc.provider;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -25,15 +25,27 @@ import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.StringWriter;
 import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
 import java.util.List;
 
+import javax.security.auth.login.LoginException;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.commons.codec.binary.Base64;
 import org.apache.tuscany.sca.assembly.Binding;
-import org.apache.tuscany.sca.binding.jsonrpc.provider.JavaToSmd;
+import org.apache.tuscany.sca.binding.jsonrpc.JSONRPCBinding;
+import org.apache.tuscany.sca.binding.jsonrpc.protocol.JsonRpc10Request;
+import org.apache.tuscany.sca.binding.jsonrpc.protocol.JsonRpc10Response;
+import org.apache.tuscany.sca.binding.jsonrpc.protocol.JsonRpc20BatchRequest;
+import org.apache.tuscany.sca.binding.jsonrpc.protocol.JsonRpc20Error;
+import org.apache.tuscany.sca.binding.jsonrpc.protocol.JsonRpc20Request;
+import org.apache.tuscany.sca.binding.jsonrpc.protocol.JsonRpc20Response;
+import org.apache.tuscany.sca.binding.jsonrpc.protocol.JsonRpc20Result;
+import org.apache.tuscany.sca.databinding.json.JSONDataBinding;
+import org.apache.tuscany.sca.databinding.json.jackson.JacksonHelper;
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.invocation.Message;
 import org.apache.tuscany.sca.invocation.MessageFactory;
@@ -89,6 +101,7 @@ public class JsonRpcServlet extends Http
 
     private void handleJsonRpcInvocation(HttpServletRequest request, HttpServletResponse response)
         throws UnsupportedEncodingException, IOException, ServletException {
+        StringWriter data = new StringWriter();
         // Decode using the charset in the request if it exists otherwise
         // use UTF-8 as this is what all browser implementations use.
         // The JSON-RPC-Java JavaScript client is ASCII clean so it
@@ -98,17 +111,42 @@ public class JsonRpcServlet extends Http
         if (charset == null) {
             charset = "UTF-8";
         }
-        // default POST style
-        BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream(), charset));
-        StringWriter data = new StringWriter();
-        // Read the request into charArray
-        char[] buf = new char[4096];
-        int ret;
-        while ((ret = in.read(buf, 0, 4096)) != -1) {
-            data.write(buf, 0, ret);
+
+        if (request.getMethod().equals("GET")) {
+            // if using GET Support (see http://groups.google.com/group/json-rpc/web/json-rpc-over-http)
+
+            //parse the GET QueryString
+            try {
+                String params =
+                    new String(Base64.decodeBase64(URLDecoder.decode(request.getParameter("params"), charset)
+                        .getBytes()));
+                StringBuilder sb = new StringBuilder();
+                sb.append("{");
+                sb.append("\"method\": \"" + request.getParameter("method") + "\",");
+                sb.append("\"params\": " + params + ",");
+                sb.append("\"id\":" + request.getParameter("id"));
+                sb.append("}");
+
+                data.write(sb.toString());
+            } catch (Throwable e) {
+                JsonRpc10Response error = new JsonRpc10Response(request.getParameter("id"), e);
+                error.write(response.getWriter());
+                return;
+            }
+        } else {
+
+            // default POST style
+            BufferedReader in = new BufferedReader(new InputStreamReader(request.getInputStream(), charset));
+            // Read the request into charArray
+            char[] buf = new char[4096];
+            int ret;
+            while ((ret = in.read(buf, 0, 4096)) != -1) {
+                data.write(buf, 0, ret);
+            }
         }
 
         String json = data.toString().trim();
+
         try {
             if (json.startsWith("[")) {
                 JSONArray input = new JSONArray(json);
@@ -123,7 +161,7 @@ public class JsonRpcServlet extends Http
                 JSONArray responses = batchReq.getBatchResponse().toJSONArray();
                 responses.write(response.getWriter());
             } else {
-                JSONObject input = new JSONObject(data.toString());
+                JSONObject input = JacksonHelper.read(json);
                 if (input.has("jsonrpc")) {
                     JsonRpc20Request jsonReq = new JsonRpc20Request(input);
                     JsonRpc20Result jsonResult = invoke(jsonReq);
@@ -139,7 +177,7 @@ public class JsonRpcServlet extends Http
         }
     }
 
-    private JsonRpc20Result invoke(JsonRpc20Request request) {
+    private JsonRpc20Result invoke(JsonRpc20Request request) throws Exception {
 
         // invoke the request
         String method = request.getMethod();
@@ -153,6 +191,12 @@ public class JsonRpcServlet extends Http
         requestMessage.setOperation(jsonOperation);
 
         requestMessage.getHeaders().put("RequestMessage", request);
+
+        if (jsonOperation.getWrapper().getDataBinding().equals(JSONDataBinding.NAME)) {
+            requestMessage.setBody(new Object[] {JacksonHelper.write(request.toJSONObject())});
+        } else {
+            requestMessage.setBody(params);
+        }
         requestMessage.setBody(params);
 
         Message responseMessage = null;
@@ -170,25 +214,29 @@ public class JsonRpcServlet extends Http
         }
 
         if (!responseMessage.isFault()) {
-
-            if (jsonOperation.getOutputType().getLogical().size() == 0) {
-                // void operation (json-rpc notification)
-                try {
-                    JsonRpc20Response response = new JsonRpc20Response(request.getId(), null);
-                    return response;
-                } catch (Exception e) {
-                    throw new ServiceRuntimeException("Unable to create JSON response", e);
-                }
-
+            if (jsonOperation.getWrapper().getDataBinding().equals(JSONDataBinding.NAME)) {
+                result = responseMessage.getBody();
+                return new JsonRpc20Response(JacksonHelper.read(result.toString()));
             } else {
-                // regular operation returning some value
-                try {
-                    result = responseMessage.getBody();
-                    JsonRpc20Response response = new JsonRpc20Response(request.getId(), result);
-                    //get response to send to client
-                    return response;
-                } catch (Exception e) {
-                    throw new ServiceRuntimeException("Unable to create JSON response", e);
+                if (jsonOperation.getOutputType().getLogical().size() == 0) {
+                    // void operation (json-rpc notification)
+                    try {
+                        JsonRpc20Response response = new JsonRpc20Response(request.getId(), null);
+                        return response;
+                    } catch (Exception e) {
+                        throw new ServiceRuntimeException("Unable to create JSON response", e);
+                    }
+
+                } else {
+                    // regular operation returning some value
+                    try {
+                        result = responseMessage.getBody();
+                        JsonRpc20Response response = new JsonRpc20Response(request.getId(), result);
+                        //get response to send to client
+                        return response;
+                    } catch (Exception e) {
+                        throw new ServiceRuntimeException("Unable to create JSON response", e);
+                    }
                 }
             }
 
@@ -202,7 +250,7 @@ public class JsonRpcServlet extends Http
 
     }
 
-    private JsonRpc10Response invoke(JsonRpc10Request request) {
+    private JsonRpc10Response invoke(JsonRpc10Request request) throws Exception {
 
         // invoke the request
         String method = request.getMethod();
@@ -216,42 +264,42 @@ public class JsonRpcServlet extends Http
         requestMessage.setOperation(jsonOperation);
 
         requestMessage.getHeaders().put("RequestMessage", request);
-        requestMessage.setBody(params);
+        if (jsonOperation.getWrapper().getDataBinding().equals(JSONDataBinding.NAME)) {
+            requestMessage.setBody(new Object[] {JacksonHelper.write(request.toJSONObject())});
+        } else {
+            requestMessage.setBody(params);
+        }
 
         Message responseMessage = null;
         try {
 
             //result = wire.invoke(jsonOperation, args);
             responseMessage = endpoint.getInvocationChain(jsonOperation).getHeadInvoker().invoke(requestMessage);
-        } catch (RuntimeException re) {
-            if (re.getCause() instanceof javax.security.auth.login.LoginException) {
-                throw re;
+        } catch (RuntimeException e) {
+            if (e.getCause() instanceof LoginException) {
+                throw e;
             } else {
-                JsonRpc10Response error = new JsonRpc10Response(request.getId(), null, re.toString());
+                JsonRpc10Response error = new JsonRpc10Response(request.getId(), e);
                 return error;
             }
         }
 
         if (!responseMessage.isFault()) {
-
-            if (jsonOperation.getOutputType().getLogical().size() == 0) {
-                // void operation (json-rpc notification)
-                try {
+            if (jsonOperation.getWrapper().getDataBinding().equals(JSONDataBinding.NAME)) {
+                result = responseMessage.getBody();
+                return new JsonRpc10Response(JacksonHelper.read(result.toString()));
+            } else {
+                if (jsonOperation.getOutputType().getLogical().size() == 0) {
+                    // void operation (json-rpc notification)
                     JsonRpc10Response response = new JsonRpc10Response(request.getId(), JSONObject.NULL, null);
                     return response;
-                } catch (Exception e) {
-                    throw new ServiceRuntimeException("Unable to create JSON response", e);
-                }
 
-            } else {
-                // regular operation returning some value
-                try {
+                } else {
+                    // regular operation returning some value
                     result = responseMessage.getBody();
                     JsonRpc10Response response = new JsonRpc10Response(request.getId(), result, null);
                     //get response to send to client
                     return response;
-                } catch (Exception e) {
-                    throw new ServiceRuntimeException("Unable to create JSON response", e);
                 }
             }
 
@@ -259,8 +307,7 @@ public class JsonRpcServlet extends Http
             //exception thrown while executing the invocation
             Throwable exception = (Throwable)responseMessage.getBody();
 
-            JsonRpc10Response error =
-                new JsonRpc10Response(request.getId(), null, JsonRpc20Error.stackTrace(exception));
+            JsonRpc10Response error = new JsonRpc10Response(request.getId(), exception);
             return error;
         }
 
@@ -300,7 +347,12 @@ public class JsonRpcServlet extends Http
     protected void handleSMDRequest(HttpServletRequest request, HttpServletResponse response) throws IOException,
         UnsupportedEncodingException {
         String serviceUrl = request.getRequestURL().toString();
-        String smd = JavaToSmd.interfaceToSmd20(serviceInterface, serviceUrl);
+        String smd = null;
+        if (JSONRPCBinding.VERSION_20.equals(((JSONRPCBinding)binding).getVersion())) {
+            smd = JavaToSmd.interfaceToSmd20(serviceInterface, serviceUrl);
+        } else {
+            smd = JavaToSmd.interfaceToSmd(serviceInterface, serviceUrl);
+        }
 
         response.setContentType("application/json;charset=utf-8");
         OutputStream out = response.getOutputStream();

Propchange: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcServlet.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcServlet.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCExceptionTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCExceptionTestCase.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCExceptionTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCExceptionTestCase.java Mon Oct 10 05:01:04 2011
@@ -75,7 +75,7 @@ public class JSONRPCExceptionTestCase{
 
         JSONObject jsonErr = new JSONObject(response.getText()).getJSONObject("error");
 
-        Assert.assertEquals("Runtime Exception", jsonErr.getString("msg"));
+        Assert.assertEquals("Runtime Exception", jsonErr.getString("message"));
     }
 
     @Test
@@ -90,6 +90,6 @@ public class JSONRPCExceptionTestCase{
 
         JSONObject jsonErr = new JSONObject(response.getText()).getJSONObject("error");
 
-        Assert.assertEquals("Business Exception", jsonErr.getString("msg"));
+        Assert.assertEquals("Business Exception", jsonErr.getString("message"));
     }   
 }
\ No newline at end of file

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCServiceTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCServiceTestCase.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCServiceTestCase.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/test/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCServiceTestCase.java Mon Oct 10 05:01:04 2011
@@ -106,6 +106,6 @@ public class JSONRPCServiceTestCase {
         Assert.assertEquals(200, response.getResponseCode());
         
         JSONObject jsonResp = new JSONObject(response.getText());
-        Assert.assertEquals(0, jsonResp.getString("result").length());
+        Assert.assertTrue(jsonResp.isNull("result"));
     }
 }
\ No newline at end of file

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCBinding.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCBinding.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCBinding.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/JSONRPCBinding.java Mon Oct 10 05:01:04 2011
@@ -29,5 +29,11 @@ import org.apache.tuscany.sca.assembly.B
  * @version $Rev$ $Date$
  */
 public interface JSONRPCBinding extends Binding {
-	QName TYPE = new QName(SCA11_TUSCANY_NS, "binding.jsonrpc");
+    QName TYPE = new QName(SCA11_TUSCANY_NS, "binding.jsonrpc");
+    String VERSION_10 = "1.0";
+    String VERSION_20 = "2.0";
+
+    String getVersion();
+
+    void setVersion(String version);
 }

Modified: tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/impl/JSONRPCBindingImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/impl/JSONRPCBindingImpl.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/impl/JSONRPCBindingImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-jsonrpc/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/impl/JSONRPCBindingImpl.java Mon Oct 10 05:01:04 2011
@@ -33,11 +33,12 @@ import org.apache.tuscany.sca.binding.js
 public class JSONRPCBindingImpl implements JSONRPCBinding {
     private String name;
     private String uri;
+    private String version = VERSION_10;
 
     public QName getType() {
-		return TYPE;
-	}
-    
+        return TYPE;
+    }
+
     public String getName() {
         return name;
     }
@@ -67,25 +68,33 @@ public class JSONRPCBindingImpl implemen
     public Object clone() throws CloneNotSupportedException {
         return super.clone();
     }
-    
+
     public WireFormat getRequestWireFormat() {
         return null;
     }
-    
-    public void setRequestWireFormat(WireFormat wireFormat) {  
+
+    public void setRequestWireFormat(WireFormat wireFormat) {
     }
-    
+
     public WireFormat getResponseWireFormat() {
         return null;
     }
-    
+
     public void setResponseWireFormat(WireFormat wireFormat) {
     }
-    
+
     public OperationSelector getOperationSelector() {
         return null;
     }
-    
+
     public void setOperationSelector(OperationSelector operationSelector) {
-    }    
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
 }

Modified: tuscany/sca-java-2.x/trunk/modules/databinding-json/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/databinding-json/META-INF/MANIFEST.MF?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/databinding-json/META-INF/MANIFEST.MF (original)
+++ tuscany/sca-java-2.x/trunk/modules/databinding-json/META-INF/MANIFEST.MF Mon Oct 10 05:01:04 2011
@@ -1,6 +1,7 @@
 Manifest-Version: 1.0
 Export-Package: org.apache.tuscany.sca.databinding.json;version="2.0.0",
- org.apache.tuscany.sca.databinding.json.axiom;version="2.0.0"
+ org.apache.tuscany.sca.databinding.json.axiom;version="2.0.0",
+ org.apache.tuscany.sca.databinding.json.jackson;version="2.0.0"
 SCA-Version: 1.1
 Bundle-Name: Apache Tuscany SCA Data Binding for JSON
 Bundle-Vendor: The Apache Software Foundation

Modified: tuscany/sca-java-2.x/trunk/modules/databinding-json/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/databinding-json/pom.xml?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/databinding-json/pom.xml (original)
+++ tuscany/sca-java-2.x/trunk/modules/databinding-json/pom.xml Mon Oct 10 05:01:04 2011
@@ -52,17 +52,17 @@
             <artifactId>jackson-xc</artifactId>
             <version>1.8.5</version>
         </dependency>
-        <!-- 
+        
         <dependency>
             <groupId>com.fasterxml</groupId>
             <artifactId>jackson-module-json-org</artifactId>
             <version>0.9.1</version>
         </dependency>
-         -->
+        
         <dependency>
-            <groupId>org.jabsorb</groupId>
-            <artifactId>jabsorb</artifactId>
-            <version>1.3.1</version>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>20090211</version>
         </dependency>
         
         <dependency>

Modified: tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONHelper.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONHelper.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONHelper.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONHelper.java Mon Oct 10 05:01:04 2011
@@ -97,8 +97,8 @@ public class JSONHelper {
                 if (type == JSONArray.class || type.isArray() || Collection.class.isAssignableFrom(type)) {
                     return new JSONArray(json);
                 }
-                return new org.json.JSONObject(json);
-            } catch (org.json.JSONException e) {
+                return JacksonHelper.MAPPER.readValue(json, org.json.JSONObject.class);
+            } catch (Exception e) {
                 throw new IllegalArgumentException(e);
             }
         }

Modified: tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/String2JSON.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/String2JSON.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/String2JSON.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/String2JSON.java Mon Oct 10 05:01:04 2011
@@ -19,10 +19,10 @@
 
 package org.apache.tuscany.sca.databinding.json;
 
+import org.apache.tuscany.sca.databinding.BaseTransformer;
 import org.apache.tuscany.sca.databinding.PullTransformer;
 import org.apache.tuscany.sca.databinding.TransformationContext;
 import org.apache.tuscany.sca.databinding.TransformationException;
-import org.apache.tuscany.sca.databinding.BaseTransformer;
 
 /**
  * @version $Rev$ $Date$
@@ -41,7 +41,7 @@ public class String2JSON extends BaseTra
 
     public Object transform(String source, TransformationContext context) {
         try {
-            Class type = null;
+            Class<?> type = null;
             if (context != null && context.getTargetDataType() != null) {
                 type = context.getTargetDataType().getPhysical();
             }

Modified: tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/jackson/JacksonHelper.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/jackson/JacksonHelper.java?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/jackson/JacksonHelper.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/jackson/JacksonHelper.java Mon Oct 10 05:01:04 2011
@@ -47,12 +47,15 @@ import org.codehaus.jackson.map.util.Std
 import org.codehaus.jackson.xc.JaxbAnnotationIntrospector;
 import org.codehaus.jackson.xc.XmlAdapterJsonDeserializer;
 import org.codehaus.jackson.xc.XmlAdapterJsonSerializer;
+import org.json.JSONObject;
+
+import com.fasterxml.jackson.module.jsonorg.JsonOrgModule;
 
 /**
  * 
  */
 public class JacksonHelper {
-    private final static ObjectMapper MAPPER = createMapper();
+    public final static ObjectMapper MAPPER = createMapper();
     private final static JsonFactory FACTORY = new MappingJsonFactory(createMapper());
 
     public static ObjectMapper createMapper() {
@@ -85,6 +88,8 @@ public class JacksonHelper {
                             StdDeserializerProvider deserializerProvider =
                                 new StdDeserializerProvider(deserializerFactory);
                             mapper = new ObjectMapper();
+                            mapper.registerModule(new JsonOrgModule());
+
                             mapper.setSerializerFactory(serializerFactory);
                             mapper.setDeserializerProvider(deserializerProvider);
                         }
@@ -94,6 +99,7 @@ public class JacksonHelper {
         }
         if (mapper == null) {
             mapper = new ObjectMapper();
+            mapper.registerModule(new JsonOrgModule());
         }
         AnnotationIntrospector primary = new JaxbAnnotationIntrospector();
         AnnotationIntrospector secondary = new JacksonAnnotationIntrospector();
@@ -180,4 +186,41 @@ public class JacksonHelper {
         }
     }
 
+    public static JSONObject read(InputStream is) throws IOException {
+        try {
+            return MAPPER.readValue(is, JSONObject.class);
+        } catch (Exception e) {
+            throw new IOException(e);
+        }
+    }
+
+    /**
+     * Read from String into a org.json.JSONObject
+     * @param json
+     * @return
+     */
+    public static JSONObject read(String json) {
+        try {
+            return MAPPER.readValue(json, JSONObject.class);
+        } catch (Exception e) {
+            throw new IllegalArgumentException(e);
+        }
+    }
+
+    public static void write(JSONObject json, OutputStream out) throws IOException {
+        try {
+            MAPPER.writeValue(out, json);
+        } catch (Exception e) {
+            throw new IOException(e);
+        }
+    }
+    
+    public static String write(JSONObject json) throws IOException {
+        try {
+            return MAPPER.writeValueAsString(json);
+        } catch (Exception e) {
+            throw new IOException(e);
+        }
+    }
+
 }

Modified: tuscany/sca-java-2.x/trunk/modules/implementation-python-runtime/pom.xml
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/implementation-python-runtime/pom.xml?rev=1180780&r1=1180779&r2=1180780&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/implementation-python-runtime/pom.xml (original)
+++ tuscany/sca-java-2.x/trunk/modules/implementation-python-runtime/pom.xml Mon Oct 10 05:01:04 2011
@@ -84,6 +84,13 @@
             <version>2.0-SNAPSHOT</version>
             <scope>test</scope>
         </dependency>
+        
+        <dependency>
+            <groupId>org.jabsorb</groupId>
+            <artifactId>jabsorb</artifactId>
+            <version>1.3.1</version>
+            <scope>test</scope>
+        </dependency>
 
     </dependencies> 
 </project>



Mime
View raw message