Repository: johnzon Updated Branches: refs/heads/master 40e75bc56 -> 5852983bb
JOHNZON-110 better testing if we can use the JsonLongImpl optimization for jsonnumber Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/5852983b Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/5852983b Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/5852983b Branch: refs/heads/master Commit: 5852983bbc16c0c07c60d30fcd39fd6c308d48bd Parents: 40e75bc Author: rmannibucau <[email protected]> Authored: Thu Mar 23 22:51:00 2017 +0100 Committer: rmannibucau <[email protected]> Committed: Thu Mar 23 22:51:00 2017 +0100 ---------------------------------------------------------------------- .../johnzon/core/JsonParserFactoryImpl.java | 12 ++++++------ .../org/apache/johnzon/core/JsonReaderImpl.java | 6 +++--- .../apache/johnzon/core/JsonStreamParserImpl.java | 4 ++++ .../org/apache/johnzon/core/JsonNumberTest.java | 18 ++++++++++++++---- 4 files changed, 27 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/johnzon/blob/5852983b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java index c57f144..d9bfd67 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonParserFactoryImpl.java @@ -65,7 +65,7 @@ public class JsonParserFactoryImpl extends AbstractJsonFactory implements JsonPa this.supportsComments = getBool(SUPPORTS_COMMENTS, DEFAULT_SUPPORTS_COMMENT); } - private JsonParser getDefaultJsonParserImpl(final InputStream in) { + private JsonStreamParserImpl getDefaultJsonParserImpl(final InputStream in) { if (supportsComments) { return new CommentsJsonStreamParserImpl(in, maxSize, bufferProvider, valueBufferProvider); } @@ -73,7 +73,7 @@ public class JsonParserFactoryImpl extends AbstractJsonFactory implements JsonPa return new JsonStreamParserImpl(in, maxSize, bufferProvider, valueBufferProvider); } - private JsonParser getDefaultJsonParserImpl(final InputStream in, final Charset charset) { + private JsonStreamParserImpl getDefaultJsonParserImpl(final InputStream in, final Charset charset) { if (supportsComments) { return new CommentsJsonStreamParserImpl(in, charset, maxSize, bufferProvider, valueBufferProvider); } @@ -81,7 +81,7 @@ public class JsonParserFactoryImpl extends AbstractJsonFactory implements JsonPa return new JsonStreamParserImpl(in, charset, maxSize, bufferProvider, valueBufferProvider); } - private JsonParser getDefaultJsonParserImpl(final Reader in) { + private JsonStreamParserImpl getDefaultJsonParserImpl(final Reader in) { if (supportsComments) { return new CommentsJsonStreamParserImpl(in, maxSize, bufferProvider, valueBufferProvider); } @@ -121,15 +121,15 @@ public class JsonParserFactoryImpl extends AbstractJsonFactory implements JsonPa return Collections.unmodifiableMap(internalConfig); } - public JsonParser createInternalParser(final InputStream in) { + public JsonStreamParserImpl createInternalParser(final InputStream in) { return getDefaultJsonParserImpl(in); } - public JsonParser createInternalParser(final InputStream in, final Charset charset) { + public JsonStreamParserImpl createInternalParser(final InputStream in, final Charset charset) { return getDefaultJsonParserImpl(in, charset); } - public JsonParser createInternalParser(final Reader reader) { + public JsonStreamParserImpl createInternalParser(final Reader reader) { return getDefaultJsonParserImpl(reader); } } http://git-wip-us.apache.org/repos/asf/johnzon/blob/5852983b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java index a209a56..4ceb803 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonReaderImpl.java @@ -30,10 +30,10 @@ import javax.json.stream.JsonParser; import javax.json.stream.JsonParsingException; public class JsonReaderImpl implements JsonReader { - private final JsonParser parser; + private final JsonStreamParserImpl parser; private boolean closed = false; - public JsonReaderImpl(final JsonParser parser) { + public JsonReaderImpl(final JsonStreamParserImpl parser) { this.parser = parser; } @@ -151,7 +151,7 @@ public class JsonReaderImpl implements JsonReader { break; case VALUE_NUMBER: - if (parser.isIntegralNumber()) { + if (parser.isIntegralNumber() && parser.isNotTooLong()) { builder.add(key, new JsonLongImpl(parser.getLong())); } else { builder.add(key, new JsonNumberImpl(parser.getBigDecimal())); http://git-wip-us.apache.org/repos/asf/johnzon/blob/5852983b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java index 876ec78..6f34368 100644 --- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java +++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonStreamParserImpl.java @@ -838,6 +838,10 @@ public class JsonStreamParserImpl implements JsonChars, JsonParser{ } } + boolean isNotTooLong() { + return (endOfValueInBuffer - startOfValueInBuffer) < 19; + } + @Override public int getInt() { if (previousEvent != VALUE_NUMBER) { http://git-wip-us.apache.org/repos/asf/johnzon/blob/5852983b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java ---------------------------------------------------------------------- diff --git a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java index b610995..55c3754 100644 --- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java +++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonNumberTest.java @@ -18,13 +18,15 @@ */ package org.apache.johnzon.core; -import java.math.BigInteger; +import org.junit.Assert; +import org.junit.Test; import javax.json.Json; import javax.json.JsonArray; - -import org.junit.Assert; -import org.junit.Test; +import javax.json.JsonNumber; +import java.io.StringReader; +import java.io.StringWriter; +import java.math.BigInteger; @@ -48,4 +50,12 @@ public class JsonNumberTest { } + @Test + public void testBigIntegerButFromJustALongTooLong() { + final StringWriter writer = new StringWriter(); + Json.createGenerator(writer).writeStartObject().write("value", new BigInteger("10002000000000000000")).writeEnd().close(); + final String asJson = writer.toString(); + final JsonNumber jsonNumber = Json.createReader(new StringReader(asJson)).readObject().getJsonNumber("value"); + Assert.assertEquals(new BigInteger("10002000000000000000"), jsonNumber.bigIntegerValue()); + } }
