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;


Reply via email to