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