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("{" +