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 2010/05/11 19:44:59 UTC

svn commit: r943205 - in /tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat: json/provider/JSONWireFormatInterceptor.java xml/provider/XMLWireFormatInterceptor.java

Author: lresende
Date: Tue May 11 17:44:59 2010
New Revision: 943205

URL: http://svn.apache.org/viewvc?rev=943205&view=rev
Log:
Considering request encoding when processing body

Modified:
    tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatInterceptor.java
    tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatInterceptor.java

Modified: tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatInterceptor.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatInterceptor.java?rev=943205&r1=943204&r2=943205&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatInterceptor.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/json/provider/JSONWireFormatInterceptor.java Tue May 11 17:44:59 2010
@@ -52,28 +52,21 @@ public class JSONWireFormatInterceptor i
         this.next = next;
     }
     
-    private String read(InputStream in) throws IOException {
-        StringWriter sw = new StringWriter();
-        InputStreamReader reader = new InputStreamReader(in, "UTF-8");
-        char[] buf = new char[8192];
-        while (true) {
-            int size = reader.read(buf);
-            if (size < 0) {
-                break;
-            }
-            sw.write(buf, 0, size);
-        }
-        return sw.toString();
-    }
-
     public Message invoke(Message msg) {
         HTTPContext bindingContext = (HTTPContext) msg.getBindingContext();
         
+        // Decode using the charset in the request if it exists otherwise
+        // use UTF-8 as this is what all browser implementations use.
+        String charset = bindingContext.getHttpRequest().getCharacterEncoding();
+        if (charset == null) {
+            charset = "UTF-8";
+        }
+        
         try {
-            if(bindingContext.getHttpRequest().getMethod().equalsIgnoreCase("get") == false && bindingContext.getHttpRequest().getMethod().equalsIgnoreCase("delete") == false  && msg.getBody() != null) {
+            if( isPayloadSupported(bindingContext.getHttpRequest().getMethod()) && msg.getBody() != null) {
                 Object[] args = msg.getBody();
                 InputStream in = (InputStream) args[0];
-                String data = read(in);
+                String data = read(in, charset);
                 JSONObject jsonPayload = new JSONObject(data);
                 msg.setBody(new Object[]{jsonPayload});
             }
@@ -83,5 +76,38 @@ public class JSONWireFormatInterceptor i
         
         return getNext().invoke(msg);
     }
+    
+    /**
+     * Check if HTTP Operation should support payload
+     * @param operation
+     * @return
+     */
+    private static boolean isPayloadSupported(String operation) {
+        boolean isGet = "get".equalsIgnoreCase(operation);
+        boolean isDelete = "delete".equalsIgnoreCase(operation);
+        
+        return  isGet == false && isDelete == false;
+    }
+    
+    /**
+     * Read JSON payload from HTTP Request Body
+     * @param in
+     * @param charset
+     * @return
+     * @throws IOException
+     */
+    private static String read(InputStream in, String charset) throws IOException {
+        StringWriter sw = new StringWriter();
+        InputStreamReader reader = new InputStreamReader(in, "UTF-8");
+        char[] buf = new char[8192];
+        while (true) {
+            int size = reader.read(buf);
+            if (size < 0) {
+                break;
+            }
+            sw.write(buf, 0, size);
+        }
+        return sw.toString();
+    }
 
 }

Modified: tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatInterceptor.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatInterceptor.java?rev=943205&r1=943204&r2=943205&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatInterceptor.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/binding-rest-runtime/src/main/java/org/apache/tuscany/sca/binding/rest/wireformat/xml/provider/XMLWireFormatInterceptor.java Tue May 11 17:44:59 2010
@@ -24,6 +24,7 @@ import java.io.InputStream;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.tuscany.sca.common.http.HTTPContext;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.core.FactoryExtensionPoint;
 import org.apache.tuscany.sca.invocation.Interceptor;
@@ -54,12 +55,21 @@ public class XMLWireFormatInterceptor im
         this.next = next;
     }
 
-    public Message invoke(Message msg) {        
+    public Message invoke(Message msg) {
+        HTTPContext bindingContext = (HTTPContext) msg.getBindingContext();
+        
+        // Decode using the charset in the request if it exists otherwise
+        // use UTF-8 as this is what all browser implementations use.
+        String charset = bindingContext.getHttpRequest().getCharacterEncoding();
+        if (charset == null) {
+            charset = "UTF-8";
+        }
+        
         try {
             if(msg.getBody() != null) {
                 Object[] args = msg.getBody();
                 InputStream data = (InputStream) args[0];
-                XMLStreamReader xmlPayload = inputFactory.createXMLStreamReader(data);
+                XMLStreamReader xmlPayload = inputFactory.createXMLStreamReader(data, charset);
                 msg.setBody(new Object[]{xmlPayload});
             }
         } catch(Exception e) {