You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2017/03/28 13:02:05 UTC
svn commit: r1789112 - in /sling/trunk/bundles/servlets/post: pom.xml
src/main/java/org/apache/sling/servlets/post/JSONResponse.java
src/test/java/org/apache/sling/servlets/post/JsonResponseTest.java
Author: pauls
Date: Tue Mar 28 13:02:05 2017
New Revision: 1789112
URL: http://svn.apache.org/viewvc?rev=1789112&view=rev
Log:
SLING-6681: Replace commons.json usage in org.apache.sling.servlets.post
Modified:
sling/trunk/bundles/servlets/post/pom.xml
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/JSONResponse.java
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/JsonResponseTest.java
Modified: sling/trunk/bundles/servlets/post/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/pom.xml?rev=1789112&r1=1789111&r2=1789112&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/post/pom.xml (original)
+++ sling/trunk/bundles/servlets/post/pom.xml Tue Mar 28 13:02:05 2017
@@ -22,7 +22,7 @@
<parent>
<groupId>org.apache.sling</groupId>
<artifactId>sling</artifactId>
- <version>30</version>
+ <version>29</version>
<relativePath />
</parent>
@@ -150,12 +150,6 @@
</dependency>
<dependency>
<groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.commons.json</artifactId>
- <version>2.0.2-incubator</version>
- <scope>provided</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.jcr.contentloader</artifactId>
<version>2.1.10</version>
<scope>provided</scope>
@@ -167,6 +161,12 @@
<scope>provided</scope>
</dependency>
<dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.commons.johnzon</artifactId>
+ <version>0.1.0-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.commons.testing</artifactId>
<version>2.0.10</version>
Modified: sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/JSONResponse.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/JSONResponse.java?rev=1789112&r1=1789111&r2=1789112&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/JSONResponse.java (original)
+++ sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/JSONResponse.java Tue Mar 28 13:02:05 2017
@@ -18,12 +18,17 @@
*/
package org.apache.sling.servlets.post;
-import org.apache.sling.commons.json.JSONArray;
-import org.apache.sling.commons.json.JSONException;
-import org.apache.sling.commons.json.JSONObject;
-
+import javax.json.Json;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonObject;
+import javax.json.JsonObjectBuilder;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* The <code>JSONResponse</code> is an {@link AbstractPostResponse} preparing
@@ -44,47 +49,28 @@ public class JSONResponse extends Abstra
private static final String PROP_CHANGES = "changes";
- private JSONObject json = new JSONObject();
+ private Map<String, Object> json = new HashMap<>();
- private JSONArray changes = new JSONArray();
+ private List<Map<String, Object>> changes = new ArrayList<>();
private Throwable error;
- public JSONResponse() throws JSONResponseException {
- try {
- json = new JSONObject();
- changes = new JSONArray();
- json.put(PROP_CHANGES, changes);
- } catch (Throwable e) {
- throw new JSONResponseException(e);
+ public void onChange(String type, String... arguments) {
+ Map<String,Object> change = new HashMap<>();
+ change.put(PROP_TYPE, type);
+
+ if (arguments.length > 1) {
+ change.put(PROP_ARGUMENT, Arrays.asList(arguments));
}
- }
-
- public void onChange(String type, String... arguments)
- throws JSONResponseException {
- try {
- JSONObject change = new JSONObject();
- change.put(PROP_TYPE, type);
- for (String argument : arguments) {
- change.accumulate(PROP_ARGUMENT, argument);
- }
- changes.put(change);
- } catch (JSONException e) {
- throw new JSONResponseException(e);
+ else if (arguments.length == 1) {
+ change.put(PROP_ARGUMENT, arguments[0]);
}
+ changes.add(change);
}
@Override
public void setError(Throwable error) {
- try {
- this.error = error;
- JSONObject jsonError = new JSONObject();
- jsonError.put("class", error.getClass().getName());
- jsonError.put("message", error.getMessage());
- json.put("error", jsonError);
- } catch (JSONException e) {
- throw new JSONResponseException(e);
- }
+ this.error = error;
}
@Override
@@ -94,26 +80,13 @@ public class JSONResponse extends Abstra
@Override
public void setProperty(String name, Object value) {
- try {
- this.json.put(name, value);
- } catch (Throwable e) {
- throw new JSONResponseException("Error setting JSON property '"
- + name + "' to '" + value + "'", e);
- }
+ json.put(name, value);
}
@Override
- public Object getProperty(String name) throws JSONResponseException {
- try {
- if (json.has(name)) {
- return json.get(name);
- } else {
- return null;
- }
- } catch (JSONException e) {
- throw new JSONResponseException("Error getting JSON property '"
- + name + "'", e);
- }
+ public Object getProperty(String name) {
+ return PROP_CHANGES.equals(name) ? getJson().getJsonArray(PROP_CHANGES) :
+ "error".equals(name) && this.error != null ? getJson().get("error") : json.get(name);
}
@SuppressWarnings({ "ThrowableResultOfMethodCallIgnored" })
@@ -123,27 +96,59 @@ public class JSONResponse extends Abstra
response.setContentType(RESPONSE_CONTENT_TYPE);
response.setCharacterEncoding(RESPONSE_CHARSET);
- try {
- json.write(response.getWriter());
- } catch (JSONException e) {
- IOException ioe = new IOException("Error creating JSON response");
- ioe.initCause(e);
- throw ioe;
- }
+ Json.createGenerator(response.getWriter()).write(getJson()).close();
}
- JSONObject getJson() {
- return json;
+ JsonObject getJson() {
+ JsonObjectBuilder jsonBuilder = Json.createObjectBuilder();
+ for (Map.Entry<String, Object> entry : json.entrySet()) {
+ if (entry.getValue() != null) {
+ jsonBuilder.add(entry.getKey(), entry.getValue().toString());
+ }
+ else {
+ jsonBuilder.addNull(entry.getKey());
+ }
+ }
+ if (this.error != null) {
+ jsonBuilder
+ .add("error", Json.createObjectBuilder()
+ .add("class", error.getClass().getName())
+ .add("message", error.getMessage()));
+ }
+ JsonArrayBuilder changesBuilder = Json.createArrayBuilder();
+ for (Map<String, Object> entry : changes) {
+ JsonObjectBuilder entryBuilder = Json.createObjectBuilder();
+ entryBuilder.add(PROP_TYPE, (String) entry.get(PROP_TYPE));
+
+ Object arguments = entry.get(PROP_ARGUMENT);
+
+ if (arguments != null) {
+ if (arguments instanceof List) {
+ JsonArrayBuilder argumentsBuilder = Json.createArrayBuilder();
+
+ for (String argument : ((List<String>) arguments))
+ {
+ argumentsBuilder.add(argument);
+ }
+
+ entryBuilder.add(PROP_ARGUMENT, argumentsBuilder);
+ }
+ else {
+ entryBuilder.add(PROP_ARGUMENT, (String) arguments);
+ }
+ }
+ changesBuilder.add(entryBuilder);
+ }
+ jsonBuilder.add(PROP_CHANGES, changesBuilder);
+ return jsonBuilder.build();
}
-
+
public class JSONResponseException extends RuntimeException {
-
public JSONResponseException(String message, Throwable exception) {
- super(message, exception);
+ super(message, exception);
}
-
public JSONResponseException(Throwable e) {
- super("Error building JSON response", e);
+ super("Error building JSON response", e);
}
}
}
Modified: sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/JsonResponseTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/JsonResponseTest.java?rev=1789112&r1=1789111&r2=1789112&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/JsonResponseTest.java (original)
+++ sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/JsonResponseTest.java Tue Mar 28 13:02:05 2017
@@ -18,16 +18,19 @@
package org.apache.sling.servlets.post;
import java.io.IOException;
+import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonObject;
+import javax.json.JsonString;
+import javax.json.JsonValue;
import javax.servlet.http.HttpServletResponse;
import junit.framework.TestCase;
-import org.apache.sling.commons.json.JSONArray;
-import org.apache.sling.commons.json.JSONException;
-import org.apache.sling.commons.json.JSONObject;
import org.apache.sling.commons.testing.sling.MockSlingHttpServletResponse;
public class JsonResponseTest extends TestCase {
@@ -41,38 +44,38 @@ public class JsonResponseTest extends Te
public void testOnChange() throws Exception {
res.onChange("modified", "argument1", "argument2");
Object prop = res.getProperty("changes");
- JSONArray changes = assertInstanceOf(prop, JSONArray.class);
- assertEquals(1, changes.length());
- Object obj = changes.get(0);
- JSONObject change = assertInstanceOf(obj, JSONObject.class);
- assertEquals("modified", assertProperty(change, JSONResponse.PROP_TYPE, String.class));
- JSONArray arguments = assertProperty(change, JSONResponse.PROP_ARGUMENT, JSONArray.class);
- assertEquals(2, arguments.length());
+ JsonArray changes = assertInstanceOf(prop, JsonArray.class);
+ assertEquals(1, changes.size());
+ Object obj = changes.getJsonObject(0);
+ JsonObject change = assertInstanceOf(obj, JsonObject.class);
+ assertProperty(change, JSONResponse.PROP_TYPE, "modified");
+ JsonArray arguments = change.getJsonArray(JSONResponse.PROP_ARGUMENT);
+ assertEquals(2, arguments.size());
}
public void testSetProperty() throws Exception {
res.setProperty("prop", "value");
- assertProperty(res.getJson(), "prop", String.class);
+ assertProperty(res.getJson(), "prop", "value");
}
@SuppressWarnings({"ThrowableInstanceNeverThrown"})
- public void testSetError() throws IOException, JSONException {
+ public void testSetError() throws IOException {
String errMsg = "Dummy error";
res.setError(new Error(errMsg));
MockSlingHttpServletResponse resp = new MockSlingHttpServletResponse();
res.send(resp, true);
- JSONObject json = res.getJson();
- JSONObject error = assertProperty(json, "error", JSONObject.class);
- assertProperty(error, "class", Error.class.getName());
- assertProperty(error, "message", errMsg);
+ JsonObject json = res.getJson();
+ JsonValue error = assertProperty(json, "error");
+ assertProperty((JsonObject) error, "class", Error.class.getName());
+ assertProperty((JsonObject) error, "message", errMsg);
}
public void testSend() throws Exception {
res.onChange("modified", "argument1");
MockSlingHttpServletResponse response = new MockSlingHttpServletResponse();
res.send(response, true);
- JSONObject result = new JSONObject(response.getOutput().toString());
- assertProperty(result, HtmlResponse.PN_STATUS_CODE, HttpServletResponse.SC_OK);
+ JsonObject result = Json.createReader(new StringReader(response.getOutput().toString())).readObject();
+ assertProperty(result, HtmlResponse.PN_STATUS_CODE, Integer.toString(HttpServletResponse.SC_OK));
assertEquals(JSONResponse.RESPONSE_CONTENT_TYPE, response.getContentType());
assertEquals(JSONResponse.RESPONSE_CHARSET, response.getCharacterEncoding());
}
@@ -84,8 +87,8 @@ public class JsonResponseTest extends Te
res.setLocation(location);
MockResponseWithHeader response = new MockResponseWithHeader();
res.send(response, true);
- JSONObject result = new JSONObject(response.getOutput().toString());
- assertProperty(result, HtmlResponse.PN_STATUS_CODE, HttpServletResponse.SC_CREATED);
+ JsonObject result = Json.createReader(new StringReader(response.getOutput().toString())).readObject();
+ assertProperty(result, HtmlResponse.PN_STATUS_CODE, Integer.toString(HttpServletResponse.SC_CREATED));
assertEquals(location, response.getHeader("Location"));
}
@@ -98,21 +101,21 @@ public class JsonResponseTest extends Te
res.setLocation(location);
MockResponseWithHeader response = new MockResponseWithHeader();
res.send(response, true);
- JSONObject result = new JSONObject(response.getOutput().toString());
- assertProperty(result, HtmlResponse.PN_STATUS_CODE, status);
+ JsonObject result = Json.createReader(new StringReader(response.getOutput().toString())).readObject();
+ assertProperty(result, HtmlResponse.PN_STATUS_CODE, Integer.toString(status));
assertEquals(location, response.getHeader("Location"));
}
}
- private static <T> T assertProperty(JSONObject obj, String key, Class<T> clazz) throws JSONException {
- assertTrue("JSON object does not have property " + key, obj.has(key));
- return assertInstanceOf(obj.get(key), clazz);
+ private static JsonValue assertProperty(JsonObject obj, String key) {
+ assertTrue("JSON object does not have property " + key, obj.containsKey(key));
+ return obj.get(key);
}
@SuppressWarnings({"unchecked"})
- private static <T> T assertProperty(JSONObject obj, String key, T expected) throws JSONException {
- T res = (T) assertProperty(obj, key, expected.getClass());
- assertEquals(expected, res);
+ private static JsonString assertProperty(JsonObject obj, String key, String expected) {
+ JsonString res = (JsonString) assertProperty(obj, key);
+ assertEquals(expected, res.getString());
return res;
}