Skip to content
This repository was archived by the owner on Jul 11, 2024. It is now read-only.

Don't close generator / parser in marshaller. #543

Merged
merged 2 commits into from
May 1, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion common/grpc/protobuf-jackson/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,8 @@ jmh {
iterations = 10
fork = 5
profilers = listOf()
setIncludeTests(true)
isIncludeTests = true
isZip64 = true
}

protobuf {
Expand Down
2 changes: 1 addition & 1 deletion common/grpc/protobuf-jackson/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,4 @@
# SOFTWARE.
#

version = 1.0.0
version = 1.1.0
Original file line number Diff line number Diff line change
Expand Up @@ -156,8 +156,9 @@ private MessageMarshaller(@Nullable PrettyPrinter prettyPrinter, MarshallerRegis
public void mergeValue(byte[] json, Message.Builder builder) throws IOException {
checkNotNull(json, "json");
checkNotNull(builder, "builder");
JsonParser parser = jsonFactory.createParser(json);
mergeValue(parser, builder);
try (JsonParser parser = jsonFactory.createParser(json)) {
mergeValue(parser, builder);
}
}

/**
Expand All @@ -169,8 +170,9 @@ public void mergeValue(byte[] json, Message.Builder builder) throws IOException
public void mergeValue(String json, Message.Builder builder) throws IOException {
checkNotNull(json, "json");
checkNotNull(builder, "builder");
JsonParser parser = jsonFactory.createParser(json);
mergeValue(parser, builder);
try (JsonParser parser = jsonFactory.createParser(json)) {
mergeValue(parser, builder);
}
}

/**
Expand All @@ -183,8 +185,9 @@ public void mergeValue(String json, Message.Builder builder) throws IOException
public void mergeValue(InputStream json, Message.Builder builder) throws IOException {
checkNotNull(json, "json");
checkNotNull(builder, "builder");
JsonParser parser = jsonFactory.createParser(json);
mergeValue(parser, builder);
try (JsonParser parser = jsonFactory.createParser(json)) {
mergeValue(parser, builder);
}
}

/**
Expand All @@ -204,8 +207,6 @@ public void mergeValue(JsonParser jsonParser, Message.Builder builder) throws IO
throw e;
} catch (IOException e) {
throw new InvalidProtocolBufferException(e);
} finally {
jsonParser.close();
}
}

Expand All @@ -217,8 +218,9 @@ public void mergeValue(JsonParser jsonParser, Message.Builder builder) throws IO
public <T extends Message> byte[] writeValueAsBytes(T message) throws IOException {
checkNotNull(message, "message");
ByteArrayBuilder builder = new ByteArrayBuilder(jsonFactory._getBufferRecycler());
JsonGenerator gen = jsonFactory.createGenerator(builder);
writeValue(message, gen);
try (JsonGenerator gen = jsonFactory.createGenerator(builder)) {
writeValue(message, gen);
}
return builder.toByteArray();
}

Expand All @@ -230,8 +232,9 @@ public <T extends Message> byte[] writeValueAsBytes(T message) throws IOExceptio
public <T extends Message> String writeValueAsString(T message) throws IOException {
checkNotNull(message, "message");
SegmentedStringWriter sw = new SegmentedStringWriter(jsonFactory._getBufferRecycler());
JsonGenerator gen = jsonFactory.createGenerator(sw);
writeValue(message, gen);
try (JsonGenerator gen = jsonFactory.createGenerator(sw)) {
writeValue(message, gen);
}
return sw.getAndClear();
}

Expand All @@ -242,8 +245,9 @@ public <T extends Message> String writeValueAsString(T message) throws IOExcepti
public <T extends Message> void writeValue(T message, OutputStream out) throws IOException {
checkNotNull(message, "message");
checkNotNull(out, "out");
JsonGenerator gen = jsonFactory.createGenerator(out);
writeValue(message, gen);
try (JsonGenerator gen = jsonFactory.createGenerator(out)) {
writeValue(message, gen);
}
}

/**
Expand All @@ -267,8 +271,6 @@ public <T extends Message> void writeValue(T message, JsonGenerator gen) throws
throw e;
} catch (IOException e) {
throw new InvalidProtocolBufferException(e);
} finally {
gen.close();
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@
import static org.assertj.core.api.Assertions.entry;
import static org.junit.Assert.assertEquals;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Strings;
import com.google.protobuf.Any;
import com.google.protobuf.BoolValue;
Expand Down Expand Up @@ -933,6 +936,25 @@ public void fieldsOutOfOrder() throws Exception {
assertMatchesUpstream(TestFieldOrder.newBuilder().setValue1("foo").setValue2("bar").build());
}

@Test
public void doesNotCloseJsonGenerator() throws Exception {
JsonGenerator generator =
new ObjectMapper().getFactory().createGenerator(new ByteArrayOutputStream());
MessageMarshaller marshaller =
MessageMarshaller.builder().register(TestAllTypes.getDefaultInstance()).build();
marshaller.writeValue(TestAllTypes.getDefaultInstance(), generator);
assertThat(generator.isClosed()).isFalse();
}

@Test
public void doesNotCloseJsonParser() throws Exception {
JsonParser parser = new ObjectMapper().getFactory().createParser("{}");
MessageMarshaller marshaller =
MessageMarshaller.builder().register(TestAllTypes.getDefaultInstance()).build();
marshaller.mergeValue(parser, TestAllTypes.newBuilder());
assertThat(parser.isClosed()).isFalse();
}

private static String recursiveJson(int numRecursions) {
StringBuilder input = new StringBuilder("{\n");
for (int i = 0; i < numRecursions; i++) {
Expand Down