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

ramyav pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata4.git


The following commit(s) were added to refs/heads/master by this push:
     new 3b85879  [OLINGO-1478]Fix jackson parser for handling big numbers
3b85879 is described below

commit 3b8587973ca3313927c20d4cecf2af1e521e73c1
Author: ramya vasanth <[email protected]>
AuthorDate: Thu Aug 27 10:10:52 2020 +0530

    [OLINGO-1478]Fix jackson parser for handling big numbers
---
 .../server/core/deserializer/json/ODataJsonDeserializer.java   |  1 +
 .../apache/olingo/server/tecsvc/provider/PropertyProvider.java |  2 ++
 .../deserializer/json/ODataJsonDeserializerEntityTest.java     | 10 ++++++++++
 3 files changed, 13 insertions(+)

diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java
index ac29475..9b4fc8e 100644
--- 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java
@@ -334,6 +334,7 @@ public class ODataJsonDeserializer implements 
ODataDeserializer {
   private ObjectNode parseJsonTree(final InputStream stream) throws 
IOException, DeserializerException {
     ObjectMapper objectMapper = new ObjectMapper();
     
objectMapper.configure(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY, 
true);
+    objectMapper.configure(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS, 
true);
     JsonParser parser = new JsonFactory(objectMapper).createParser(stream);
     final JsonNode tree = parser.getCodec().readTree(parser);
     if (tree == null || !tree.isObject()) {
diff --git 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/PropertyProvider.java
 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/PropertyProvider.java
index 4c306d3..febb04e 100644
--- 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/PropertyProvider.java
+++ 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/PropertyProvider.java
@@ -454,6 +454,8 @@ public class PropertyProvider {
   public static final CsdlProperty propertyDecimal_ExplicitNullable = new 
CsdlProperty()
       .setName("PropertyDecimal")
       .setType(nameDecimal)
+      .setPrecision(31)
+      .setScale(14)
       .setNullable(true);
 
   public static final CsdlProperty propertyDouble = new CsdlProperty()
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
index 8961a1b..25ce502 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
@@ -1885,4 +1885,14 @@ public class ODataJsonDeserializerEntityTest extends 
AbstractODataDeserializerTe
     version.add("4.01");
     return odata.createDeserializer(contentType, metadata, 
version).entity(stream, entityType);
   }
+  
+  @Test
+  public void testEntityLargeNumbers() throws Exception {
+         String entityString =
+                       "{\"PropertyKey\":327," +
+                           
"\"PropertyDecimal\":12345678912345678.1234567891234}";
+    final Entity entity = deserialize(entityString, "ETAllNullable");
+    assertNotNull(entity);
+    assertEquals(new BigDecimal("12345678912345678.1234567891234"), 
entity.getProperties().get(1).getValue());
+  }
 }

Reply via email to