attribute namespace is missed in out message in case of XmlBeans data binding
------------------------------------------------------------------------------
Key: CXF-2468
URL: https://issues.apache.org/jira/browse/CXF-2468
Project: CXF
Issue Type: Bug
Components: OtherDatabindings
Reporter: Michael Klimiuk
Priority: Blocker
SCENARIO:
The XmlBeans databinding is used.
Trying to send a message with an input data like:
<myOperation
xmlns="http://sandbox.org/services/MyService/myOperation"
xmlns:s1="http://sandbox.org/datatypes/one"
xmlns:s2="http://sandbox.org/datatypes/two"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<data>
<s1:oneElement>
<s2:twoElement xsi:nil="true"/>
</s1:oneElement>
</data>
</myOperation>
ACTUAL RESULT:
The out message is generated as follows:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<myOperation xmlns="http://sandbox.org/services/MyService/myOperation">
<data>
<oneElement xmlns="http://sandbox.org/datatypes/one">
<twoElement xmlns="http://sandbox.org/datatypes/two"
xsi:nil="true"/>
</oneElement>
</data>
</myOperation>
</soap:Body>
</soap:Envelope>
Namespace definition for "xsi" prefix is missed. And the receiver fails to
process the message because of validation.
EXPECTED RESULT:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<myOperation xmlns="http://sandbox.org/services/MyService/myOperation">
<data>
<oneElement xmlns="http://sandbox.org/datatypes/one">
<twoElement xmlns="http://sandbox.org/datatypes/two"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:nil="true"/>
</oneElement>
</data>
</myOperation>
</soap:Body>
</soap:Envelope>
I.e. the namespace for "xsi" prefix is present.
ANALYSIS:
Analysis is based on the CXF 2.2.3.
Please have a look at the sources:
Class: org.apache.cxf.staxutils.StaxUtils
Method: writeStartElement(XMLStreamReader reader, XMLStreamWriter writer)
The code under his comment -> // Write out attributes
My guess is:
If we have both "ns" and "nsPrefix" that are not empty then the namespace
definition should be written.
506 } else {
507 writer.writeNamespace(nsPrefix, ns); // <-- THIS IS A NEW
EXAMPLE LINE OF WHAT IS DESIRED
508 writer.writeAttribute(reader.getAttributePrefix(i),
reader.getAttributeNamespace(i), reader
509 .getAttributeLocalName(i),
reader.getAttributeValue(i));
510 }
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.