Uploaded image for project: 'CXF'
  1. CXF
  2. CXF-2468

attribute namespace is missed in out message in case of XmlBeans data binding

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Blocker
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 2.1.8, 2.2.5
    • Component/s: OtherDatabindings
    • Labels:
      None

      Description

      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 }

        Attachments

        1. CXF2468.zip
          4 kB
          Michael Klimiuk

          Activity

            People

            • Assignee:
              dkulp Daniel Kulp
              Reporter:
              mklimiuk Michael Klimiuk
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: