Skip to content

XMLEventStreamWriter fails to handle writeEmptyElement() followed by writeAttribute() [SPR-11254] #15879

Closed
@spring-projects-issues

Description

@spring-projects-issues

Archie Cobbs opened SPR-11254 and commented

XMLEventStreamWriter converts an XMLStreamWriter into an XMLEventWriter.

However, it fails to handle the following sequence of API calls:

XMLStreamWriter.writeEmptyElement()
XMLStreamWriter.writeAttribute()

What happens is you get this exception:

Caused by: javax.xml.stream.XMLStreamException: Attribute not associated with any element
        at com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.writeAttribute(XMLStreamWriterImpl.java:610)
        at com.sun.xml.internal.stream.writers.XMLEventWriterImpl.add(XMLEventWriterImpl.java:164)
        at org.springframework.util.xml.XMLEventStreamWriter.writeAttribute(XMLEventStreamWriter.java:126)

The problem is that the XMLEventStreamWriter implementation seems to think that "writeEmptyElement" means "write element with no attributes", whereas what it really means is "write element with no nested content" (i.e., an element that can be self-closing).

The usage above is explicitly supported by the XMLStreamWriter API and in the JDK implementation results in a self-closing tag being emitted -- with or without attributes.

The fix is to keep track of whether the most recent element is self-closing or not.


Affects: 3.2.6, 4.0 GA

Attachments:

Backported to: 3.2.7

Metadata

Metadata

Assignees

Labels

in: coreIssues in core modules (aop, beans, core, context, expression)status: backportedAn issue that has been backported to maintenance branchestype: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions