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(