[
https://issues.apache.org/jira/browse/CXF-2468?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Daniel Kulp resolved CXF-2468.
------------------------------
Resolution: Fixed
> As stated above the xml reader does not provide the namespace for xsi, but
> the same test (that attached) shows that it does provide it.
The XMLStreamReader does not, but the toString method that is used when doing
println(doc) does. As mentioned, bug in XMLBeans XMLStreamReader thing.
> writer.writeNamespace(nsPrefix, ns); // <-- FIX: NEW LINE ADDED
You don't want to do that as ALL attributes that are namespace prefixed would
end up with new namespace declarations outputted. The fix I implemented
checks if the namespace is already declared properly and on writes out the
namespace decl if it really need to.
See:
http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java?p2=/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java&p1=/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java&r1=825221&r2=825220&view=diff&pathrev=825221
> 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
> Assignee: Daniel Kulp
> Priority: Blocker
> Fix For: 2.1.8, 2.2.5
>
> Attachments: CXF2468.zip
>
>
> 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.