Author: lindner
Date: Mon Jun  8 18:06:21 2009
New Revision: 782716

URL: http://svn.apache.org/viewvc?rev=782716&view=rev
Log:
SHINDIG-1084 | Shindig REST returns a 500 internal server error for invalid 
JSON | Patch from Ben Smith

Modified:
    
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/BaseRequestItem.java
    
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/BaseRequestItemTest.java

Modified: 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/BaseRequestItem.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/BaseRequestItem.java?rev=782716&r1=782715&r2=782716&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/BaseRequestItem.java
 (original)
+++ 
incubator/shindig/trunk/java/common/src/main/java/org/apache/shindig/protocol/BaseRequestItem.java
 Mon Jun  8 18:06:21 2009
@@ -194,12 +194,24 @@
   }
 
   public <T> T getTypedParameter(String parameterName, Class<T> dataTypeClass) 
{
-    return converter.convertToObject(getParameter(parameterName), 
dataTypeClass);
+    try {
+      return converter.convertToObject(getParameter(parameterName), 
dataTypeClass);
+    } catch (RuntimeException e) {
+      if (e.getCause() instanceof JSONException)
+        throw new ProtocolException(HttpServletResponse.SC_BAD_REQUEST, 
e.getMessage());
+      throw e;
+    }
   }
 
   public <T> T getTypedRequest(Class<T> dataTypeClass) {
-    return jsonConverter.convertToObject(new 
JSONObject(this.parameters).toString(),
-        dataTypeClass);
+    try {
+      return jsonConverter.convertToObject(new 
JSONObject(this.parameters).toString(),
+          dataTypeClass);
+    } catch (RuntimeException e) {
+      if (e.getCause() instanceof JSONException)
+        throw new ProtocolException(HttpServletResponse.SC_BAD_REQUEST, 
e.getMessage());
+      throw e;
+    }
   }
 
   public String getParameter(String paramName) {

Modified: 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/BaseRequestItemTest.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/BaseRequestItemTest.java?rev=782716&r1=782715&r2=782716&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/BaseRequestItemTest.java
 (original)
+++ 
incubator/shindig/trunk/java/common/src/test/java/org/apache/shindig/protocol/BaseRequestItemTest.java
 Mon Jun  8 18:06:21 2009
@@ -17,6 +17,8 @@
  */
 package org.apache.shindig.protocol;
 
+import javax.servlet.http.HttpServletResponse;
+
 import org.apache.shindig.common.testing.FakeGadgetToken;
 import org.apache.shindig.protocol.conversion.BeanJsonConverter;
 import org.apache.shindig.protocol.model.SortOrder;
@@ -100,6 +102,17 @@
     assertEquals("Bob", input.name);
     assertEquals(1234, input.id);
   }
+  
+  public void testGetInvalidJsonTypedParameter() throws Exception {
+    request.setParameter("anykey", "{name: 'Bob");
+    int code = 0;
+    try {
+      request.getTypedParameter("anykey", InputData.class);
+    } catch(ProtocolException e) {
+      code = e.getCode();
+    }
+    assertEquals(HttpServletResponse.SC_BAD_REQUEST, code);
+  }
 
   public void testJSONConstructor() throws Exception {
     request = new BaseRequestItem(new JSONObject("{" +


Reply via email to