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

Unable to parse XML with empty default namespace attribute value with OpenJDK StAX implementation

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.2.13
    • 1.2.14
    • API, LLOM

    Description

      From:

      http://www.w3.org/TR/2009/REC-xml-names-20091208/

      "The attribute value in a default namespace declaration MAY be empty. This has the same effect, within the scope of the declaration, of there being no default namespace."

      Here is a document that demonstrates this:

      <?xml version='1.0' encoding='UTF-8'?>
      <foo xmlns='http://example.org/'>
      <bar xmlns=''>value</bar>
      </foo>

      The following code snippet (slightly modified from Axiom documentation) uses Axiom to parse a String variable xmlData:

      InputStream in =
      new ByteArrayInputStream(xmlData.getBytes(Charset.forName("UTF-8")));
      OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(in);
      OMElement documentElement = builder.getDocumentElement();
      documentElement.serialize(System.out);
      System.out.println();

      When given the above XML example, an IllegalArgumentException is thrown:

      Exception in thread "main" java.lang.IllegalArgumentException: Namespace URI may not be null
      at org.apache.axiom.om.impl.llom.OMNamespaceImpl.<init>(OMNamespaceImpl.java:38)
      at org.apache.axiom.om.impl.llom.OMElementImpl.addNamespaceDeclaration(OMElementImpl.java:430)
      at org.apache.axiom.om.impl.builder.StAXOMBuilder.processNamespaceData(StAXOMBuilder.java:608)
      at org.apache.axiom.om.impl.builder.StAXOMBuilder.populateOMElement(StAXOMBuilder.java:430)
      at org.apache.axiom.om.impl.builder.StAXOMBuilder.createOMElement(StAXOMBuilder.java:461)
      at org.apache.axiom.om.impl.builder.StAXOMBuilder.createNextOMElement(StAXOMBuilder.java:318)
      at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:249)
      at org.apache.axiom.om.impl.llom.OMElementImpl.buildNext(OMElementImpl.java:709)
      at org.apache.axiom.om.impl.llom.OMNodeImpl.getNextOMSibling(OMNodeImpl.java:121)
      at org.apache.axiom.om.impl.traverse.OMChildrenIterator.getNextNode(OMChildrenIterator.java:36)
      at org.apache.axiom.om.impl.traverse.OMAbstractIterator.hasNext(OMAbstractIterator.java:69)
      at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555)
      at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:846)
      at org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:120)
      at org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:108)
      at org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:127)

      This looks like a bug.

      Cheers,

      Paul.

      Attachments

        1. patch-fix-StAXOMBuilder.diff
          1 kB
          Paul Millar

        Activity

          People

            veithen Andreas Veithen
            paulmillar Paul Millar
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: