cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Klimiuk (JIRA)" <j...@apache.org>
Subject [jira] Reopened: (CXF-2468) attribute namespace is missed in out message in case of XmlBeans data binding
Date Mon, 19 Oct 2009 07:12:31 GMT

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


Mime
View raw message