This is an automated email from the ASF dual-hosted git repository.
rmannibucau 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 3f684d3 JOHNZON-269 ensure JsonWriter#close is not implicit
3f684d3 is described below
commit 3f684d3df85ee6b0511996d6525190290855965a
Author: Romain Manni-Bucau <[email protected]>
AuthorDate: Sun Aug 18 20:50:20 2019 +0200
JOHNZON-269 ensure JsonWriter#close is not implicit
---
.../org/apache/johnzon/core/JsonGeneratorImpl.java | 30 +++++++------
.../org/apache/johnzon/core/JsonWriterImpl.java | 50 ++++++++++------------
.../org/apache/johnzon/core/JsonPatchTest.java | 8 +++-
.../java/org/apache/johnzon/core/OverflowTest.java | 1 +
4 files changed, 47 insertions(+), 42 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 ae481ac..6730ec7 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
@@ -461,21 +461,27 @@ class JsonGeneratorImpl implements JsonGenerator,
JsonChars, Serializable {
if (closed) {
return;
}
+ JsonGenerationException ex = null;
+ final GeneratorState state = currentState();
+ if (state != GeneratorState.END && state != GeneratorState.ROOT_VALUE)
{
+ ex = new JsonGenerationException("Invalid json");
+ }
try {
- final GeneratorState state = currentState();
- if (state != GeneratorState.END && state !=
GeneratorState.ROOT_VALUE) {
- throw new JsonGenerationException("Invalid json");
+ if (ex == null) {
+ flushBuffer();
}
- } finally {
- flushBuffer();
- try {
- writer.close();
- } catch (final IOException e) {
- throw new JsonException(e.getMessage(), e);
- } finally {
- closed = true;
- bufferProvider.release(buffer);
+ writer.close();
+ } catch (final IOException e) {
+ if (ex != null) {
+ throw ex;
}
+ throw new JsonException(e.getMessage(), e);
+ } finally {
+ closed = true;
+ bufferProvider.release(buffer);
+ }
+ if (ex != null) {
+ throw ex;
}
}
diff --git
a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java
b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java
index 2577f1f..f17e3f8 100644
--- a/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java
+++ b/johnzon-core/src/main/java/org/apache/johnzon/core/JsonWriterImpl.java
@@ -18,16 +18,18 @@
*/
package org.apache.johnzon.core;
+import java.io.Serializable;
+
import javax.json.JsonArray;
import javax.json.JsonObject;
import javax.json.JsonStructure;
import javax.json.JsonValue;
import javax.json.JsonWriter;
import javax.json.stream.JsonGenerator;
-import java.io.Serializable;
class JsonWriterImpl implements JsonWriter, Serializable {
private final JsonGenerator generator;
+ private boolean called = false;
private boolean closed = false;
JsonWriterImpl(final JsonGenerator generator) {
@@ -36,55 +38,47 @@ class JsonWriterImpl implements JsonWriter, Serializable {
@Override
public void writeArray(final JsonArray array) {
- checkClosed();
- try {
- generator.write(array);
- } finally {
- close();
- }
+ checkState();
+ generator.write(array);
+ markCalled();
}
@Override
public void writeObject(final JsonObject object) {
- checkClosed();
- try {
- generator.write(object);
- } finally {
- close();
- }
+ checkState();
+ generator.write(object);
+ markCalled();
}
@Override
public void write(final JsonValue value) {
- checkClosed();
- try {
- generator.write(value);
- } finally {
- close();
- }
+ checkState();
+ generator.write(value);
+ markCalled();
}
@Override
public void write(final JsonStructure value) {
- checkClosed();
- try {
- generator.write(value);
- } finally {
- close();
- }
+ checkState();
+ generator.write(value);
+ markCalled();
}
@Override
public void close() {
-
if (!closed) {
closed = true;
generator.close();
}
}
- private void checkClosed() {
- if (closed) {
+ private void markCalled() {
+ generator.flush();
+ called = true;
+ }
+
+ private void checkState() {
+ if (closed || called) {
throw new IllegalStateException("writeArray(), writeObject(),
write() or close() method was already called");
}
diff --git
a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java
b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java
index ade393a..e579e5b 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/JsonPatchTest.java
@@ -29,10 +29,12 @@ import javax.json.JsonObject;
import javax.json.JsonPatch;
import javax.json.JsonStructure;
import javax.json.JsonValue;
+import javax.json.JsonWriter;
import javax.json.spi.JsonProvider;
import java.io.StringReader;
import java.io.StringWriter;
+import java.io.Writer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
@@ -998,8 +1000,10 @@ public class JsonPatchTest {
private static String toJsonString(JsonStructure value) {
- StringWriter writer = new StringWriter();
- Json.createWriter(writer).write(value);
+ final Writer writer = new StringWriter();
+ try (final JsonWriter jsonWriter = Json.createWriter(writer)) {
+ jsonWriter.write(value);
+ }
return writer.toString();
}
diff --git
a/johnzon-core/src/test/java/org/apache/johnzon/core/OverflowTest.java
b/johnzon-core/src/test/java/org/apache/johnzon/core/OverflowTest.java
index c097703..47652e4 100644
--- a/johnzon-core/src/test/java/org/apache/johnzon/core/OverflowTest.java
+++ b/johnzon-core/src/test/java/org/apache/johnzon/core/OverflowTest.java
@@ -76,6 +76,7 @@ public class OverflowTest {
arrayBuilder.add("0123456789012345-" + i);
}
writer.writeArray(arrayBuilder.build());
+ writer.close();
String json = sw.toString();
System.out.println("Created a JSON of size " + json.length() + "
bytes");