Uploaded image for project: 'Axis2'
  1. Axis2
  2. AXIS2-3195

AXIOM parser's throwing NullPointerException if OMElement.getParent() is instance of OMDocument and Rampart is engaged

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Invalid
    • None
    • None
    • None
    • None
    • Windows XP SP2, Axis2 1.2, Tomcat 6.0.13

    Description

      Please see attached project to demonstrate the issue. With the axis2-1.2 release and earlier, the AXIOM parser throws a NullPointerException when processing requests using Rampart:

      Thread [main] (Suspended (exception NullPointerException))
      OMStAXWrapper.updateNextNode() line: 981
      OMStAXWrapper.updateLastNode() line: 950
      OMStAXWrapper.next() line: 913
      StAXSOAPModelBuilder(StAXOMBuilder).next() line: 111
      SOAPEnvelopeImpl(NodeImpl).build() line: 469
      SOAPMessageImpl(DocumentImpl).build() line: 476
      Axis2Util.getDocumentFromSOAPEnvelope(SOAPEnvelope, boolean) line: 107
      RampartMessageData.<init>(MessageContext, boolean) line: 146
      MessageBuilder.build(MessageContext) line: 56
      RampartSender.invoke(MessageContext) line: 59
      Phase.invoke(MessageContext) line: 382
      AxisEngine.invoke(MessageContext) line: 522
      AxisEngine.send(MessageContext) line: 655
      OutInAxisOperationClient.send(MessageContext) line: 237
      OutInAxisOperationClient.execute(boolean) line: 202
      EchoStub.EchoOperation(OMElement) line: 127
      Client.main(String[]) line: 47

      The cause of the exception is the AXIOM parser's setting the boolean variable needToThrowEndDocument in the DOMStAXWrapper to true if the current node being parsed has a parent node of type OMDocument..

      Temp fix: In the code, when creating an AXIOM compatible schema, we did the following:

      try {
      // Get the schema is it is already AXIOM compatible, or convert it if it isn't.
      OMElement schema = docSchema instanceof OMDocument ? (OMElement) docSchema
      .getDocumentElement() : org.apache.axis2.util.XMLUtils.toOM(docSchema.getDocumentElement());

      // Workaround to fix an issue with the building the OMElement if the
      // parent is an OMDocument. Detach the element from the parent Document...
      if (schema.getParent() != null && schema.getParent() instanceof OMDocument)

      { schema.detach(); }

      elementList.add(org.apache.axis2.databinding.utils.Constants.OM_ELEMENT_KEY);
      elementList.add(schema);
      } catch (Exception e) {
      throw new java.lang.RuntimeException("Can't convert schema to AXIOM!", e);
      }

      Attachments

        1. RampartBugDemo.zip
          102 kB
          Christopher Weiss
        2. BugDemoConfigFiles.zip
          5 kB
          Christopher Weiss

        Activity

          People

            ruchith Ruchith B. Gunaratne
            consultantchris Christopher Weiss
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: