From 45a66b994977b04cf70fadb25a3e6ae6c9d4a6f3 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Tue, 19 May 2026 16:42:54 -0700 Subject: [PATCH 1/2] Fix an issue wrt Woodstox 7.2.0 --- release-notes/VERSION | 4 ++++ .../jackson/dataformat/xml/ser/ToXmlGenerator.java | 11 +++++++++++ .../dataformat/xml/util/DefaultXmlPrettyPrinter.java | 8 +++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/release-notes/VERSION b/release-notes/VERSION index 2e61d3b06..b960216d2 100644 --- a/release-notes/VERSION +++ b/release-notes/VERSION @@ -9,6 +9,10 @@ Version: 3.x (for earlier see VERSION-2.x) No changes since 3.1 +3.1.4 (not yet released) + +- Pro-active fix to support Woodstox 7.2.0 (but no dep version bump) + 3.1.3 (01-May-2025) 3.1.2 (11-Apr-2026) 3.1.1 (27-Mar-2026) diff --git a/src/main/java/tools/jackson/dataformat/xml/ser/ToXmlGenerator.java b/src/main/java/tools/jackson/dataformat/xml/ser/ToXmlGenerator.java index ed21a45b2..580c24fa2 100644 --- a/src/main/java/tools/jackson/dataformat/xml/ser/ToXmlGenerator.java +++ b/src/main/java/tools/jackson/dataformat/xml/ser/ToXmlGenerator.java @@ -735,9 +735,12 @@ public JsonGenerator writeRawValue(String text) throws JacksonException { if (_nextIsAttribute) { _xmlWriter.writeAttribute(_nextName.getNamespaceURI(), _nextName.getLocalPart(), text); } else if (checkNextIsUnwrapped()) { + // Woodstox 7.2.0 change: writeRaw does not close pending start element; force it + _xmlWriter.writeCharacters(""); _xmlWriter.writeRaw(text); } else { _xmlWriter.writeStartElement(_nextName.getNamespaceURI(), _nextName.getLocalPart()); + _xmlWriter.writeCharacters(""); _xmlWriter.writeRaw(text); _xmlWriter.writeEndElement(); } @@ -762,9 +765,11 @@ public JsonGenerator writeRawValue(String text, int offset, int len) throws Jack if (_nextIsAttribute) { _xmlWriter.writeAttribute(_nextName.getNamespaceURI(), _nextName.getLocalPart(), text.substring(offset, offset + len)); } else if (checkNextIsUnwrapped()) { + _xmlWriter.writeCharacters(""); _xmlWriter.writeRaw(text, offset, len); } else { _xmlWriter.writeStartElement(_nextName.getNamespaceURI(), _nextName.getLocalPart()); + _xmlWriter.writeCharacters(""); _xmlWriter.writeRaw(text, offset, len); _xmlWriter.writeEndElement(); } @@ -788,9 +793,11 @@ public JsonGenerator writeRawValue(char[] text, int offset, int len) throws Jack if (_nextIsAttribute) { _xmlWriter.writeAttribute(_nextName.getNamespaceURI(), _nextName.getLocalPart(), new String(text, offset, len)); } else if (checkNextIsUnwrapped()) { + _xmlWriter.writeCharacters(""); _xmlWriter.writeRaw(text, offset, len); } else { _xmlWriter.writeStartElement(_nextName.getNamespaceURI(), _nextName.getLocalPart()); + _xmlWriter.writeCharacters(""); _xmlWriter.writeRaw(text, offset, len); _xmlWriter.writeEndElement(); } @@ -813,6 +820,8 @@ public JsonGenerator writeRaw(String text) throws JacksonException _reportUnimplementedStax2("writeRaw"); } try { + // Woodstox 7.2.0 regression: writeRaw does not close pending start element; force it + _xmlWriter.writeCharacters(""); _xmlWriter.writeRaw(text); } catch (XMLStreamException e) { StaxUtil.throwAsWriteException(e, this); @@ -828,6 +837,7 @@ public JsonGenerator writeRaw(String text, int offset, int len) throws JacksonEx _reportUnimplementedStax2("writeRaw"); } try { + _xmlWriter.writeCharacters(""); _xmlWriter.writeRaw(text, offset, len); } catch (XMLStreamException e) { StaxUtil.throwAsWriteException(e, this); @@ -843,6 +853,7 @@ public JsonGenerator writeRaw(char[] text, int offset, int len) throws JacksonEx _reportUnimplementedStax2("writeRaw"); } try { + _xmlWriter.writeCharacters(""); _xmlWriter.writeRaw(text, offset, len); } catch (XMLStreamException e) { StaxUtil.throwAsWriteException(e, this); diff --git a/src/main/java/tools/jackson/dataformat/xml/util/DefaultXmlPrettyPrinter.java b/src/main/java/tools/jackson/dataformat/xml/util/DefaultXmlPrettyPrinter.java index baf9e5ce6..07515a2ce 100644 --- a/src/main/java/tools/jackson/dataformat/xml/util/DefaultXmlPrettyPrinter.java +++ b/src/main/java/tools/jackson/dataformat/xml/util/DefaultXmlPrettyPrinter.java @@ -461,6 +461,8 @@ public void writeLeafXsiNilElement(XMLStreamWriter2 sw, public void writePrologLinefeed(XMLStreamWriter2 sw) throws XMLStreamException { // 06-Dec-2015, tatu: Alternatively could try calling `writeSpace()`... + // Woodstox 7.2.0 regression: writeRaw does not close pending start element; force it + sw.writeCharacters(""); sw.writeRaw(_newLine); } @@ -501,6 +503,8 @@ public FixedSpaceIndenter() { } public void writeIndentation(XMLStreamWriter2 sw, int level) throws XMLStreamException { + // Woodstox 7.2.0 regression: writeRaw does not close pending start element; force it + sw.writeCharacters(""); sw.writeRaw(" "); } @@ -531,10 +535,12 @@ public Lf2SpacesIndenter() { } @Override public void writeIndentation(XMLStreamWriter2 sw, int level) throws XMLStreamException { + // Woodstox 7.2.0 regression: writeRaw does not close pending start element; force it + sw.writeCharacters(""); sw.writeRaw(_newLine); level += level; // 2 spaces per level while (level > SPACE_COUNT) { // should never happen but... - sw.writeRaw(SPACES, 0, SPACE_COUNT); + sw.writeRaw(SPACES, 0, SPACE_COUNT); level -= SPACES.length; } sw.writeRaw(SPACES, 0, level); From bf6cd7bb6cc146a99456a68d731dde05390cf313 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Tue, 19 May 2026 16:44:50 -0700 Subject: [PATCH 2/2] ... --- release-notes/VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/release-notes/VERSION b/release-notes/VERSION index b960216d2..493ad88f4 100644 --- a/release-notes/VERSION +++ b/release-notes/VERSION @@ -11,7 +11,7 @@ No changes since 3.1 3.1.4 (not yet released) -- Pro-active fix to support Woodstox 7.2.0 (but no dep version bump) +#863: Fix to support Woodstox 7.2.0 (but no dep version bump) 3.1.3 (01-May-2025) 3.1.2 (11-Apr-2026)