StaxUtils.writeStartElement(XMLStreamReader reader, XMLStreamWriter writer)
does not write namespace for header elements that have a namespace URI and an
empty prefix
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
Key: CXF-2628
URL: https://issues.apache.org/jira/browse/CXF-2628
Project: CXF
Issue Type: Bug
Affects Versions: 2.2.6
Environment: apache-cxf-2.2.6-SNAPSHOT 20100119 and STAX RI (the one
included in JDK 1.6.0_16)
Reporter: Gyorgy Orban
Attachments: StaxUtils.patch
Please see attached patch. The patch changes the order of these two codeblocks:
//codeblock1:
if (uri != null) {
writeElementNS = true;
Iterator<String> it =
CastUtils.cast(writer.getNamespaceContext().getPrefixes(uri));
while (it != null && it.hasNext()) {
String s = it.next();
if (s == null) {
s = "";
}
if (s.equals(prefix)) {
writeElementNS = false;
}
}
}
//codeblock2:
if (uri != null) {
if (prefix.length() == 0 && StringUtils.isEmpty(uri)) {
writer.writeStartElement(local);
} else {
writer.writeStartElement(prefix, local, uri);
}
} else {
writer.writeStartElement(local);
}
The issue happens because:
1) writer.writeStartElement(prefix, local, uri); gets executed
2) because of 1), writer.getNamespaceContext().getPrefixes(uri) returns an
iterator with the "" prefix for the namespace uri
3) writeElementNS is set to false because of 2)
4) W3CDOMStreamReader.getNamespaceCount() always returns 0
5) because of 3) and 4), writer.writeDefaultNamespace(uri) never gets executed
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.