You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by cp...@apache.org on 2021/11/16 09:21:18 UTC

[solr] branch main updated: SOLR-15619: add Long support for @JsonProperty annotations (#285)

This is an automated email from the ASF dual-hosted git repository.

cpoerschke pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new d18e247  SOLR-15619: add Long support for @JsonProperty annotations (#285)
d18e247 is described below

commit d18e247c24c1cc0b51830e524c2b70de9547b4b2
Author: Christine Poerschke <cp...@apache.org>
AuthorDate: Tue Nov 16 09:21:10 2021 +0000

    SOLR-15619: add Long support for @JsonProperty annotations (#285)
---
 .../org/apache/solr/util/TestSolrJacksonAnnotation.java |  6 ++++++
 .../org/apache/solr/common/util/JsonSchemaCreator.java  |  2 ++
 .../apache/solr/common/util/JsonSchemaValidator.java    | 13 +++++++++++++
 .../org/apache/solr/common/util/JsonValidatorTest.java  | 17 +++++++++++++++++
 4 files changed, 38 insertions(+)

diff --git a/solr/core/src/test/org/apache/solr/util/TestSolrJacksonAnnotation.java b/solr/core/src/test/org/apache/solr/util/TestSolrJacksonAnnotation.java
index baaef7b..41dbac5 100644
--- a/solr/core/src/test/org/apache/solr/util/TestSolrJacksonAnnotation.java
+++ b/solr/core/src/test/org/apache/solr/util/TestSolrJacksonAnnotation.java
@@ -37,6 +37,7 @@ public class TestSolrJacksonAnnotation extends SolrTestCase {
     o.field = "v1";
     o.f2 = "v2";
     o.ifld = 1234;
+    o.lfld = 5678L;
     String json = mapper.writeValueAsString(o);
 
     @SuppressWarnings("unchecked")
@@ -44,15 +45,18 @@ public class TestSolrJacksonAnnotation extends SolrTestCase {
     assertEquals("v1",  m.get("field"));
     assertEquals("v2",  m.get("friendlyName"));
     assertEquals("1234",  String.valueOf(m.get("friendlyIntFld")));
+    assertEquals("5678",  String.valueOf(m.get("friendlyLongFld")));
     TestObj o1 = mapper.readValue(json, TestObj.class);
 
     assertEquals("v1", o1.field);
     assertEquals("v2", o1.f2);
     assertEquals(1234, o1.ifld);
+    assertEquals(5678L, o1.lfld);
 
     Map<String, Object> schema = JsonSchemaCreator.getSchema(TestObj.class);
     assertEquals("string", Utils.getObjectByPath(schema,true,"/properties/friendlyName/type"));
     assertEquals("integer", Utils.getObjectByPath(schema,true,"/properties/friendlyIntFld/type"));
+    assertEquals("long", Utils.getObjectByPath(schema,true,"/properties/friendlyLongFld/type"));
     assertEquals("friendlyName", Utils.getObjectByPath(schema,true,"/required[0]"));
 
 
@@ -81,5 +85,7 @@ public class TestSolrJacksonAnnotation extends SolrTestCase {
     public String f2;
     @JsonProperty("friendlyIntFld")
     public int ifld;
+    @JsonProperty("friendlyLongFld")
+    public long lfld;
   }
 }
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/JsonSchemaCreator.java b/solr/solrj/src/java/org/apache/solr/common/util/JsonSchemaCreator.java
index 6d2546e..1928139 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/JsonSchemaCreator.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/JsonSchemaCreator.java
@@ -42,6 +42,8 @@ public class JsonSchemaCreator {
     natives.put(String.class, "string");
     natives.put(Integer.class, "integer");
     natives.put(int.class, "integer");
+    natives.put(Long.class, "long");
+    natives.put(long.class, "long");
     natives.put(Float.class, "number");
     natives.put(float.class, "number");
     natives.put(Double.class, "number");
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/JsonSchemaValidator.java b/solr/solrj/src/java/org/apache/solr/common/util/JsonSchemaValidator.java
index 96cd376..fbae10e 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/JsonSchemaValidator.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/JsonSchemaValidator.java
@@ -107,6 +107,19 @@ enum Type {
       }
     }
   },
+  LONG(Long.class){
+    @Override
+    boolean isValid(Object o) {
+      if(super.isValid(o)) return true;
+      try {
+        Long.parseLong(String.valueOf(o));
+        return true;
+      } catch (NumberFormatException e) {
+        return false;
+
+      }
+    }
+  },
   BOOLEAN(Boolean.class){
     @Override
     boolean isValid(Object o) {
diff --git a/solr/solrj/src/test/org/apache/solr/common/util/JsonValidatorTest.java b/solr/solrj/src/test/org/apache/solr/common/util/JsonValidatorTest.java
index 73f1ef1..18bc953 100644
--- a/solr/solrj/src/test/org/apache/solr/common/util/JsonValidatorTest.java
+++ b/solr/solrj/src/test/org/apache/solr/common/util/JsonValidatorTest.java
@@ -119,6 +119,23 @@ public class JsonValidatorTest extends SolrTestCaseJ4  {
     assertEquals(1, errs.size());
     assertTrue(errs.get(0).contains("Value of enum"));
 
+    {
+      final JsonSchemaValidator durationValidator = new JsonSchemaValidator("{" +
+          "  type:object," +
+          "  properties: {" +
+          "   i : {type: integer}," +
+          "   l : {type: long}," +
+          "   name: {type: string}}}");
+      for (Long val : new Long[] { 30L, 30L*24, 30L*24*60, 30L*24*60*60, 30L*24*60*60*1000 }) { // month: days, hours, minutes, seconds, milliseconds
+        if (val <= Integer.MAX_VALUE) {
+          errs = durationValidator.validateJson(Utils.fromJSONString("{name: 'val', i:"+Integer.toString(val.intValue())+"}"));
+          assertNull("errs are " + errs, errs);
+        }
+        errs = durationValidator.validateJson(Utils.fromJSONString("{name: 'val', l:"+val.toString()+"}"));
+        assertNull("errs are " + errs, errs);
+      }
+    }
+
     String schema = "{\n" +
         "  'type': 'object',\n" +
         "  'properties': {\n" +