Details
-
Bug
-
Status: Open
-
Major
-
Resolution: Unresolved
-
1.3
-
None
-
None
-
jdk5
Description
Any attemp to use axis 2 with XPath expressions from javax.xml.xpath leads to an error like this:
java.lang.ClassCastException: org.apache.axiom.om.impl.dom.DocumentImpl
at org.apache.axis2.saaj.NodeImplEx.toSAAJNode2(NodeImplEx.java:260)
at org.apache.axis2.saaj.NodeImplEx.toSAAJNode(NodeImplEx.java:181)
at org.apache.axis2.saaj.SOAPElementImpl.getParentElement(SOAPElementImpl.java:723)
at org.apache.axis2.saaj.SOAPElementImpl.getParentNode(SOAPElementImpl.java:778)
at com.sun.org.apache.xml.internal.dtm.ref.DTMManagerDefault.getDTMHandleFromNode(DTMManagerDefault.java:534)
at com.sun.org.apache.xpath.internal.XPathContext.getDTMHandleFromNode(XPathContext.java:154)
at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:234)
at com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:123)
at com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.eval(XPathExpressionImpl.java:97)
at com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:178)
at com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl.evaluate(XPathExpressionImpl.java:223)
at Demo.test2(Demo.java:207)
Sample you can try:
message = MessageFactory.newInstance().createMessage();
soapBody = message.getSOAPBody().addBodyElement(new QName("namespace", "root"));
path = "name(.)";
xp = XPathFactory.newInstance().newXPath().compile(path);
System.out.println("|" + xp.evaluate(soapBody) + "|");
If you think empty body may cause this, fill it: nothing will change. Of use not body, usual SOAPElement: all the same. No need to say, XPath works fine with java's native DOM.
Thank you.