You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Christopher Weiss (JIRA)" <ji...@apache.org> on 2007/09/12 20:13:32 UTC

[jira] Updated: (AXIS2-3195) AXIOM parser's throwing NullPointerException if OMElement.getParent() is instance of OMDocument and Rampart is engaged

     [ https://issues.apache.org/jira/browse/AXIS2-3195?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Christopher Weiss updated AXIS2-3195:
-------------------------------------

          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);
}


  was:
I can send a complete project to demonstrate the issue if necessary. With the axis2-1.2 release and earlier, the AXIOM parser may throw a NullPointerException when processing requests:

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);
}


    Affects Version/s:     (was: 1.2)
              Summary: AXIOM parser's throwing NullPointerException if OMElement.getParent() is instance of OMDocument and Rampart is engaged  (was: AXIOM parser's throwing NullPointerException if OMElement.getParent() is instance of OMDocument)

> AXIOM parser's throwing NullPointerException if OMElement.getParent() is instance of OMDocument and Rampart is engaged
> ----------------------------------------------------------------------------------------------------------------------
>
>                 Key: AXIS2-3195
>                 URL: https://issues.apache.org/jira/browse/AXIS2-3195
>             Project: Axis 2.0 (Axis2)
>          Issue Type: Bug
>         Environment: Windows XP SP2, Axis2 1.2, Tomcat 6.0.13
>            Reporter: Christopher Weiss
>
> 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);
> }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org