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.

Reply via email to