Do not close passed-in Writer (#604)
diff --git a/src/main/java/org/eclipse/yasson/internal/JsonBinding.java b/src/main/java/org/eclipse/yasson/internal/JsonBinding.java index fb185de..5cacc63 100644 --- a/src/main/java/org/eclipse/yasson/internal/JsonBinding.java +++ b/src/main/java/org/eclipse/yasson/internal/JsonBinding.java
@@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2024 Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2025 Oracle and/or its affiliates. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v. 2.0 which is available at @@ -12,6 +12,7 @@ package org.eclipse.yasson.internal; +import java.io.FilterWriter; import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; @@ -145,7 +146,7 @@ @Override public void toJson(Object object, Writer writer) throws JsonbException { final SerializationContextImpl marshaller = new SerializationContextImpl(jsonbContext); - try (JsonGenerator generator = writerGenerator(writer)) { + try (JsonGenerator generator = writerGenerator(new CloseSuppressingWriter(writer))) { marshaller.marshallWithoutClose(object, generator); } } @@ -153,7 +154,7 @@ @Override public void toJson(Object object, Type type, Writer writer) throws JsonbException { final SerializationContextImpl marshaller = new SerializationContextImpl(jsonbContext, type); - try (JsonGenerator generator = writerGenerator(writer)) { + try (JsonGenerator generator = writerGenerator(new CloseSuppressingWriter(writer))) { marshaller.marshallWithoutClose(object, generator); } } @@ -234,4 +235,17 @@ jsonbContext.getComponentInstanceCreator().close(); } + private static class CloseSuppressingWriter extends FilterWriter { + + protected CloseSuppressingWriter(final Writer in) { + super(in); + } + + @Override + public void close() { + // do not close + } + + } + }