You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2010/08/31 08:18:58 UTC

svn commit: r991087 - /tuscany/sca-java-2.x/trunk/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/format/HTTPDefaultWireFormatServiceInterceptor.java

Author: antelder
Date: Tue Aug 31 06:18:58 2010
New Revision: 991087

URL: http://svn.apache.org/viewvc?rev=991087&view=rev
Log:
Update to work with POSTing JSON

Modified:
    tuscany/sca-java-2.x/trunk/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/format/HTTPDefaultWireFormatServiceInterceptor.java

Modified: tuscany/sca-java-2.x/trunk/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/format/HTTPDefaultWireFormatServiceInterceptor.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/format/HTTPDefaultWireFormatServiceInterceptor.java?rev=991087&r1=991086&r2=991087&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/format/HTTPDefaultWireFormatServiceInterceptor.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-http-runtime/src/main/java/org/apache/tuscany/sca/binding/http/format/HTTPDefaultWireFormatServiceInterceptor.java Tue Aug 31 06:18:58 2010
@@ -28,6 +28,7 @@ import java.util.Comparator;
 import java.util.List;
 import java.util.Set;
 import java.util.SortedSet;
+import java.util.StringTokenizer;
 import java.util.TreeSet;
 
 import javax.servlet.ServletRequest;
@@ -90,10 +91,32 @@ public class HTTPDefaultWireFormatServic
         if ("GET".equals(servletRequest.getMethod())) {
             msg.setBody(getRequestFromQueryString(msg.getOperation(), servletRequest));
         } else {
-            msg.setBody(read(servletRequest));
+            msg.setBody(getRequestFromPost(msg.getOperation(), servletRequest));
         }
         return msg;
     }
+    
+    /**
+     * The data binding seems to be expecting an Object array of json strings so if the
+     * post data is a json array convert that to an array of strings
+     * TODO: should this be being done by the data binding framework? 
+     */
+    private Object[] getRequestFromPost(Operation operation, HttpServletRequest servletRequest) throws IOException {
+        List<Object> os = new ArrayList<Object>();
+        String data = read(servletRequest);
+        if (data.length() > 0) {
+            if (data.startsWith("[") && data.endsWith("]")) {
+                data = data.substring(1, data.length()-1);
+                StringTokenizer st = new StringTokenizer(data, ",");
+                while (st.hasMoreElements()) {
+                    os.add(st.nextElement());
+                }
+            } else {
+                os.add(data);
+            }
+        }
+        return os.toArray();
+    }
 
     private Message invokeResponse(Message msg) throws IOException {
         HTTPContext context = msg.getBindingContext();
@@ -219,7 +242,7 @@ public class HTTPDefaultWireFormatServic
             while ((str = reader.readLine()) != null) {
                 sb.append(str);
             }
-            return sb.toString();
+            return sb.toString().trim();
         } finally {
             if (reader != null) {
                 reader.close();