Uploaded image for project: 'Axiom'
  1. Axiom
  2. AXIOM-28

OMElement.declareDefaultNamespace() declares empty namespace for child element.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.2.8
    • 1.2.13
    • LLOM
    • None
    • Microsoft Windows 2003 Server, Java 1.5.0_11. Axis2 version 1.3 (uses AXIOM version 1.2.5).

    Description

      When calling declareDefaultNamespace() on a parent node, AXIOM assignes a blank namespace on the first level's child element. So if XML is passed to AXIOM that looks like this:

      <outerTag>
      <innerTag>
      <node1>Hello</node1>
      <node2>Hello</node2>
      </innerTag>
      </outerTag>

      And then declareDefaultNamespace() of "http://someNamespace" is called on the <outerTag>, the resulting XML will be this:

      <outerTag xmlns="http://someNamespace">
      <innerTag xmlns="">
      <node1>Hello</node1>
      <node2>Hello</node2>
      </innerTag>
      </outerTag>

      Notice the xmlns="" declared in the <innerTag>. According to my understanding of XML namespaces, the <innerTag> and its child nodes will no longer belong to the parent namespace of "http://someNamespace", since it explicitly overrides it with an empty namespace. So <innerTag> and its child nodes will in fact not belong to any namespace! Here is a small program to illustrate:

      import org.apache.axiom.om.*;
      import org.apache.axiom.om.impl.llom.util.*;

      public class Test2 {
      public static void main(String [] args) {
      try

      { String xmlString = "<outerTag>" + "<innerTag>" + "<node1>Hello</node1>" + "<node2>Hello</node2>" + "</innerTag>" + "</outerTag>"; OMElement elem = AXIOMUtil.stringToOM(xmlString); elem.declareDefaultNamespace("http://someNamespace"); System.out.println(elem.toString()); }

      catch(Exception e)

      { e.printStackTrace(); }

      }
      }

      The output of this program is this (I added line breaks in the XML for easier readability):

      <outerTag xmlns="http://someNamespace">
      <innerTag xmlns="">
      <node1>Hello</node1>
      <node2>Hello</node2>
      </innerTag>
      </outerTag>

      As you can see, the <innerTag> was assigned xmlns="" by AXIOM.

      Attachments

        Issue Links

          Activity

            People

              veithen Andreas Veithen
              ymondrow Yechiel Mondrowitz
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: