You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2017/06/07 14:11:32 UTC

[28/50] [abbrv] lucene-solr:feature/autoscaling: SOLR-10744: use the new flags in json parsing and add tests

SOLR-10744: use the new flags in json parsing and add tests


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/1f437fe5
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/1f437fe5
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/1f437fe5

Branch: refs/heads/feature/autoscaling
Commit: 1f437fe5ab8892e102792a30c3621d005a36a024
Parents: 67876b3
Author: Noble Paul <no...@apache.org>
Authored: Mon Jun 5 13:34:07 2017 +0930
Committer: Noble Paul <no...@apache.org>
Committed: Mon Jun 5 13:34:07 2017 +0930

----------------------------------------------------------------------
 .../test/org/apache/solr/util/TestUtils.java    | 27 +++++++++++++++++++-
 .../java/org/apache/solr/common/util/Utils.java | 16 +++++++++---
 2 files changed, 39 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1f437fe5/solr/core/src/test/org/apache/solr/util/TestUtils.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/util/TestUtils.java b/solr/core/src/test/org/apache/solr/util/TestUtils.java
index 7b209ea..5c55cd7 100644
--- a/solr/core/src/test/org/apache/solr/util/TestUtils.java
+++ b/solr/core/src/test/org/apache/solr/util/TestUtils.java
@@ -16,6 +16,9 @@
  */
 package org.apache.solr.util;
 
+import java.io.IOException;
+import java.io.StringReader;
+import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -23,11 +26,14 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.common.util.CommandOperation;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.common.util.StrUtils;
 import org.apache.solr.common.util.Utils;
 import org.junit.Assert;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
+
 /**
  *
  */
@@ -154,7 +160,26 @@ public class TestUtils extends SolrTestCaseJ4 {
     assertEquals( num, NumberUtils.SortableStr2long(sortable, 0, sortable.length() ) );
     assertEquals( Long.toString(num), NumberUtils.SortableStr2long(sortable) );
   }
-  
+
+  public void testNoggitFlags() throws IOException {
+    String s = "a{b:c, d [{k1:v1}{k2:v2}]}";
+    assertNoggitJsonValues((Map) Utils.fromJSON(s.getBytes(UTF_8)));
+    assertNoggitJsonValues((Map) Utils.fromJSONString(s));
+    List<CommandOperation> commands = CommandOperation.parse(new StringReader(s + s));
+    assertEquals(2, commands.size());
+    for (CommandOperation command : commands) {
+      assertEquals("a", command.name);
+      assertEquals( "v1" ,Utils.getObjectByPath(command.getDataMap(), true, "d[0]/k1"));command.getDataMap();
+      assertEquals( "v2" ,Utils.getObjectByPath(command.getDataMap(), true, "d[1]/k2"));command.getDataMap();
+    }
+  }
+
+  private void assertNoggitJsonValues(Map m) {
+    assertEquals( "c" ,Utils.getObjectByPath(m, true, "/a/b"));
+    assertEquals( "v1" ,Utils.getObjectByPath(m, true, "/a/d[0]/k1"));
+    assertEquals( "v2" ,Utils.getObjectByPath(m, true, "/a/d[1]/k2"));
+  }
+
   public void testUtilsJSPath(){
     
     String json = "{\n" +

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/1f437fe5/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/Utils.java b/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
index 4cb6b8e..01b7870 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
@@ -19,6 +19,7 @@ package org.apache.solr.common.util;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.Reader;
 import java.io.StringReader;
 import java.lang.invoke.MethodHandles;
 import java.nio.charset.StandardCharsets;
@@ -104,6 +105,9 @@ public class Utils {
     CharArr chars = new CharArr();
     ByteUtils.UTF8toUTF16(utf8, 0, utf8.length, chars);
     JSONParser parser = new JSONParser(chars.getArray(), chars.getStart(), chars.length());
+    parser.setFlags(parser.getFlags() |
+        JSONParser.ALLOW_MISSING_COLON_COMMA_BEFORE_OBJECT |
+        JSONParser.OPTIONAL_OUTER_BRACES);
     try {
       return ObjectBuilder.getVal(parser);
     } catch (IOException e) {
@@ -124,7 +128,7 @@ public class Utils {
 
   public static Object fromJSON(InputStream is){
     try {
-      return new ObjectBuilder(new JSONParser(new InputStreamReader(is, StandardCharsets.UTF_8))).getObject();
+      return new ObjectBuilder(getJSONParser((new InputStreamReader(is, StandardCharsets.UTF_8)))).getObject();
     } catch (IOException e) {
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Parse error", e);
     }
@@ -135,11 +139,17 @@ public class Utils {
         .getContextClassLoader().getResourceAsStream(resourceName));
 
   }
+  public static JSONParser getJSONParser(Reader reader){
+    JSONParser parser = new JSONParser(reader);
+    parser.setFlags(parser.getFlags() |
+        JSONParser.ALLOW_MISSING_COLON_COMMA_BEFORE_OBJECT |
+        JSONParser.OPTIONAL_OUTER_BRACES);
+    return parser;
+  }
 
   public static Object fromJSONString(String json)  {
     try {
-      return new ObjectBuilder(new JSONParser(new StringReader(
-          json))).getObject();
+      return new ObjectBuilder(getJSONParser(new StringReader(json))).getObject();
     } catch (IOException e) {
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Parse error", e);
     }