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" +