hi,
I am getting some null pointer exceptions for some xpath queries executed
on Axiom objects. Here is a sample code to reproduce the issue.
OMFactory omFactory = OMAbstractFactory.getOMFactory();
OMElement wrapperElement = omFactory.createOMElement(new QName("
http://test.com", "wrapper"));
PlaceOrder placeOrder = new PlaceOrder();
placeOrder.setPrice(23.45);
placeOrder.setQuantity(23);
placeOrder.setSymbol("IBM");
QName elementQName = new QName("http://test.com", "placeOrder");
XMLStreamReader xmlStreamReader =
BeanUtil.getPullParser(placeOrder, elementQName, null,
true, false);
StAXOMBuilder stAXOMBuilder = new StAXOMBuilder(new
StreamWrapper(xmlStreamReader));
OMElement omElement = stAXOMBuilder.getDocumentElement();
wrapperElement.addChild(omElement);
try {
AXIOMXPath axiomxPath = new
AXIOMXPath("//sn:wrapper/sn:placeOrder");
axiomxPath.addNamespace("sn", "http://test.com");
OMElement resultOMElement = (OMElement)
axiomxPath.selectSingleNode(wrapperElement);
System.out.println("OMElement ==> " + resultOMElement);
} catch (JaxenException e) {
e.printStackTrace();
}
Here the result is null. Even I build the wrapperElement before executing
the xpath it won't work.
But if I insert the following lines before xpath execution it works fine.
String resultString = wrapperElement.toString();
StAXOMBuilder resultOMBuilder = new StAXOMBuilder(new
ByteArrayInputStream(resultString.getBytes()));
wrapperElement = resultOMBuilder.getDocumentElement();
This means xpath and other things should be ok. And also this works fine
for the xpaths like
//sn:placeOrder/sn:price
what could be the reason?
thanks,
Amila.
--
Amila Suriarachchi
WSO2 Inc.
blog: http://amilachinthaka.blogspot.com/