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

OMFactory#createOMElement doesn't generate namespace declaration if the OMNamespace argument is null

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 1.2.12
    • 1.2.13
    • DOOM, LLOM
    • None

    Description

      Consider the following code:

      OMFactory factory = OMAbstractFactory.getOMFactory();
      OMNamespace ns = factory.createOMNamespace("urn:test", "");
      OMElement root = factory.createOMElement("root", ns);
      OMElement child = factory.createOMElement("child", null, root);
      System.out.println("child has namespace declarations: " + child.getAllDeclaredNamespaces().hasNext());
      System.out.println("xml = " + root.toString());
      System.out.println("default namespace on child = '" + child.getDefaultNamespace().getNamespaceURI() + "'");

      With the current Axiom code, the output is:

      child has namespace declarations: false
      xml = <root xmlns="urn:test"><child xmlns="" /></root>
      default namespace on child = 'urn:test'

      That means that the call to createOMElement that creates the child element doesn't generate a namespace declaration. The serialized XML is still correct because the serializer performs namespace repairing. However, because of the absence of a namespace declaration on the child OMElement, the result of getDefaultNamespace is incorrect.

      The createOMElement method is supposed to create a namespace declaration if no corresponding declaration is in scope on the parent element. This should also be the case if the OMNamespace argument is null and there is a default namespace declaration with a non empty namespace URI.

      Attachments

        Activity

          People

            veithen Andreas Veithen
            veithen Andreas Veithen
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: