[ 
https://issues.apache.org/jira/browse/CXF-2468?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michael Klimiuk reopened CXF-2468:
----------------------------------


Hi Daniel, I've reopened the issue just to make sure that the situation is 
clear.

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.

We can see it if we include the output of the xml bean object in the test 
before the service invocation, like:

    System.out.println("Document = " + doc);

this will show us:

    Document = <myOperationRequest 
xmlns="http://sandbox.org/services/myService/myDataTypes"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";><info><firstName>Mike</firstName><lastName
 xsi:nil="true"/></info></myOperationRequest>

In the output message this information is missed, but if we do the following 
fix in the StaxUtils class(as I mentioned earlier):

>    506            } else {
>    507                writer.writeNamespace(nsPrefix, ns); // <-- FIX: NEW 
> LINE ADDED
>    508                writer.writeAttribute(reader.getAttributePrefix(i), 
> reader.getAttributeNamespace(i), reader
>    509                    .getAttributeLocalName(i), 
> reader.getAttributeValue(i));
>    510            }

Than the namespace for xsi will be caught and used.

This fix works in our project, so please review it and tell whether this is the 
right way or not.

> 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.

Reply via email to