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;
     }
 


Reply via email to