Author: cbrisson Date: Mon Aug 7 10:11:20 2017 New Revision: 1804318 URL: http://svn.apache.org/viewvc?rev=1804318&view=rev Log: [tools] Switch JSON tool to org.json.simple
Modified: velocity/tools/trunk/velocity-tools-generic/pom.xml velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/JsonTool.java velocity/tools/trunk/velocity-tools-generic/src/test/java/org/apache/velocity/tools/generic/JsonToolTests.java Modified: velocity/tools/trunk/velocity-tools-generic/pom.xml URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/pom.xml?rev=1804318&r1=1804317&r2=1804318&view=diff ============================================================================== --- velocity/tools/trunk/velocity-tools-generic/pom.xml (original) +++ velocity/tools/trunk/velocity-tools-generic/pom.xml Mon Aug 7 10:11:20 2017 @@ -46,13 +46,17 @@ <configuration> <artifactSet> <includes> - <include>org.json</include> + <include>com.googlecode.json-simple:json-simple</include> </includes> </artifactSet> <relocations> <relocation> - <pattern>org.json</pattern> - <shadedPattern>org.apache.velocity.tools.shaded.org.json</shadedPattern> + <pattern>org.json.simple</pattern> + <shadedPattern>org.apache.velocity.tools.shaded.org.json.simple</shadedPattern> + </relocation> + <relocation> + <pattern>org.json.simple.parser</pattern> + <shadedPattern>org.apache.velocity.tools.shaded.org.json.simple.parser</shadedPattern> </relocation> </relocations> <minimizeJar>true</minimizeJar> @@ -96,9 +100,9 @@ <scope>test</scope> </dependency> <dependency> - <groupId>org.json</groupId> - <artifactId>json</artifactId> - <version>20160810</version> + <groupId>com.googlecode.json-simple</groupId> + <artifactId>json-simple</artifactId> + <version>1.1.1</version> </dependency> </dependencies> </project> Modified: velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/JsonTool.java URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/JsonTool.java?rev=1804318&r1=1804317&r2=1804318&view=diff ============================================================================== --- velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/JsonTool.java (original) +++ velocity/tools/trunk/velocity-tools-generic/src/main/java/org/apache/velocity/tools/generic/JsonTool.java Mon Aug 7 10:11:20 2017 @@ -30,9 +30,9 @@ import java.util.Set; import org.apache.velocity.tools.ConversionUtils; import org.apache.velocity.tools.XmlUtils; -import org.json.JSONArray; -import org.json.JSONObject; -import org.json.JSONTokener; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; +import org.json.simple.parser.JSONParser; import org.apache.velocity.tools.Scope; import org.apache.velocity.tools.config.DefaultKey; @@ -139,11 +139,11 @@ public class JsonTool extends ImportSupp Object ret = null; if (jsonArray != null) { - ret = wrapIfNeeded(jsonArray.opt(index)); + ret = wrapIfNeeded(jsonArray.get(index)); } else if (jsonObject != null) { - ret = wrapIfNeeded(jsonObject.opt(String.valueOf(index))); + ret = wrapIfNeeded(jsonObject.get(String.valueOf(index))); } return ret; } @@ -166,7 +166,7 @@ public class JsonTool extends ImportSupp } else if (jsonObject != null) { - ret = wrapIfNeeded(jsonObject.opt(key)); + ret = wrapIfNeeded(jsonObject.get(key)); } return ret; } @@ -177,7 +177,7 @@ public class JsonTool extends ImportSupp */ public Iterator<String> keys() { - return jsonObject == null ? null : jsonObject.keys(); + return jsonObject == null ? null : jsonObject.keySet().iterator(); } /** @@ -198,7 +198,7 @@ public class JsonTool extends ImportSupp { if (jsonObject != null) { - return jsonObject.keys(); + return jsonObject.keySet().iterator(); } else if (jsonArray != null) { @@ -211,28 +211,9 @@ public class JsonTool extends ImportSupp * Get size of root object or array. * @return size */ - public int length() + public int size() { - return jsonObject == null ? jsonArray == null ? null : jsonArray.length() : jsonObject.length(); - } - - /** - * Get array of root object keys. - * @return array of keys - */ - public JSONArray names() - { - return jsonObject == null ? null : jsonObject.names(); - } - - /** - * Query root object or array using a JSON pointer - * @param jsonPointer - * @return result - */ - public Object query(String jsonPointer) - { - return jsonObject == null ? jsonArray == null ? null : wrapIfNeeded(jsonArray.query(jsonPointer)) : wrapIfNeeded(jsonObject.query(jsonPointer)); + return jsonObject == null ? jsonArray == null ? null : jsonArray.size() : jsonObject.size(); } /** @@ -260,8 +241,7 @@ public class JsonTool extends ImportSupp importSupport.configure(config); } - private HybridJsonContainer root = null; - + private HybridJsonContainer root = null; /** * Looks for the "file" parameter and automatically uses @@ -311,65 +291,21 @@ public class JsonTool extends ImportSupp { try { - final int lookahead = 100; - - final int TYPE_UNKNOWN = 0; - final int TYPE_OBJECT = 1; - final int TYPE_ARRAY = 2; - - int jsonType = TYPE_UNKNOWN; - - if (!reader.markSupported()) - { - reader = new BufferedReader(reader); - } - reader.mark(lookahead); - char buffer[] = new char[lookahead]; - int read = reader.read(buffer); - reader.reset(); - for (int i = 0; i < read; ++i) + Object result = new JSONParser().parse(reader); + if (result instanceof JSONObject) { - switch (buffer[i]) - { - case '{': - jsonType = TYPE_OBJECT; - break; - case '[': - jsonType = TYPE_ARRAY; - break; - case ' ': - case '\t': - case '\r': - case '\n': - break; - default: - { - String msg = "could not pase JSON: invalid character at position " + i + ": '" + buffer[i] + "'"; - throw new Exception(msg); - } - } - if (jsonType != TYPE_UNKNOWN) - { - break; - } + root = new HybridJsonContainer((JSONObject)result); } - switch (jsonType) + else if (result instanceof JSONArray) { - case TYPE_UNKNOWN: - { - String msg = "could not pase JSON: did not find any '{' or '[' in the first " + lookahead + " characters"; - throw new Exception(msg); - } - case TYPE_OBJECT: - root = new HybridJsonContainer(new JSONObject(new JSONTokener(reader))); - break; - case TYPE_ARRAY: - root = new HybridJsonContainer(new JSONArray(new JSONTokener(reader))); + root = new HybridJsonContainer((JSONArray)result); } + else throw new Exception("Expecting JSON array or object"); } catch (Exception e) { getLog().error("error while setting up JSON source", e); + root = null; } } @@ -521,28 +457,9 @@ public class JsonTool extends ImportSupp * Get size of root object or array. * @return size */ - public int length() - { - return root == null ? null : root.length(); - } - - /** - * Get array of root object keys. - * @return array of keys - */ - public JSONArray names() - { - return root == null ? null : root.names(); - } - - /** - * Query root object or array using a JSON pointer - * @param jsonPointer - * @return result - */ - public Object query(String jsonPointer) + public int size() { - return root == null ? null : root.query(jsonPointer); + return root == null ? null : root.size(); } /** Modified: velocity/tools/trunk/velocity-tools-generic/src/test/java/org/apache/velocity/tools/generic/JsonToolTests.java URL: http://svn.apache.org/viewvc/velocity/tools/trunk/velocity-tools-generic/src/test/java/org/apache/velocity/tools/generic/JsonToolTests.java?rev=1804318&r1=1804317&r2=1804318&view=diff ============================================================================== --- velocity/tools/trunk/velocity-tools-generic/src/test/java/org/apache/velocity/tools/generic/JsonToolTests.java (original) +++ velocity/tools/trunk/velocity-tools-generic/src/test/java/org/apache/velocity/tools/generic/JsonToolTests.java Mon Aug 7 10:11:20 2017 @@ -19,7 +19,7 @@ package org.apache.velocity.tools.generi * under the License. */ -import org.json.JSONArray; +import org.json.simple.JSONArray; import org.junit.Test; import java.util.HashMap;