Description
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:
- SPR-11254.txt (4.60 kB)
Backported to: 3.2.7