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

struberg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/johnzon.git


The following commit(s) were added to refs/heads/master by this push:
     new 5a55c66  JOHNZON-265 fix handling of numbers which exceed long
5a55c66 is described below

commit 5a55c6677a6749eff4d4ddb11cd818a6e1cbd2ee
Author: Mark Struberg <[email protected]>
AuthorDate: Mon Aug 19 08:31:36 2019 +0200

    JOHNZON-265 fix handling of numbers which exceed long
---
 .../org/apache/johnzon/core/JsonGeneratorImpl.java | 13 ++++---------
 .../apache/johnzon/core/JsonReaderImplTest.java    | 22 ++++++++++++++++++++++
 2 files changed, 26 insertions(+), 9 deletions(-)

diff --git 
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java 
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java
index 6730ec7..13a062c 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonGeneratorImpl.java
@@ -258,13 +258,8 @@ class JsonGeneratorImpl implements JsonGenerator, 
JsonChars, Serializable {
                 write(JsonString.class.cast(value).getString());
                 break;
             case NUMBER:
-                //TODO optimize
                 final JsonNumber number = JsonNumber.class.cast(value);
-                if (number.isIntegral()) {
-                    write(number.longValueExact());
-                } else {
-                    write(number.bigDecimalValue());
-                }
+                write(number.bigDecimalValue());
                 break;
             case TRUE:
                 write(true);
@@ -389,14 +384,14 @@ class JsonGeneratorImpl implements JsonGenerator, 
JsonChars, Serializable {
     @Override
     public JsonGenerator write(final BigDecimal value) {
         checkArrayOrValue();
-        writeValue(String.valueOf(value));
+        writeValue(value.toString());
         return this;
     }
 
     @Override
     public JsonGenerator write(final BigInteger value) {
         checkArrayOrValue();
-        writeValue(String.valueOf(value));
+        writeValue(value.toString());
         return this;
     }
 
@@ -695,7 +690,7 @@ class JsonGeneratorImpl implements JsonGenerator, 
JsonChars, Serializable {
         if (peek == GeneratorState.START_ARRAY || peek == 
GeneratorState.IN_ARRAY) {
             writeIndent();
         }
-        justWrite(String.valueOf(value));
+        justWrite(value);
         alignState();
     }
 
diff --git 
a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonReaderImplTest.java 
b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonReaderImplTest.java
index 1fa809d..e41cdbe 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonReaderImplTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonReaderImplTest.java
@@ -92,6 +92,28 @@ public class JsonReaderImplTest {
         reader.close();
     }
 
+    /**
+     * Test came up during the TCK adoption.
+     */
+    @Test
+    public void parseBigDecimal() {
+        String json = "123456789012345678901234567890";
+        JsonValue jsonValue = Json.createReader(new 
StringReader(json)).readValue();
+        String newJson = jsonValue.toString();
+        assertEquals(json, newJson);
+    }
+
+    /**
+     * Test came up during the TCK adoption.
+     */
+    @Test
+    public void parseBigDecimalArray() {
+        String json = "[123456789012345678901234567890]";
+        JsonValue jsonValue = Json.createReader(new 
StringReader(json)).readValue();
+        String newJson = jsonValue.toString();
+        assertEquals(json, newJson);
+    }
+
     @Test
     public void unicode() {
         final JsonReader reader = 
Json.createReaderFactory(getFactoryConfig()).createReader(

Reply via email to