How to pass DOM Document created using Axiom to evaluate XPath in Psychopath processor

StackOverflow https://stackoverflow.com/questions/18943283

  •  29-06-2022
  •  | 
  •  

Currently Psychopath Xpath processor uses XercesLoader class to load bytestream and create org.w3c.dom.Document and it can be passed to evaluate the Xpath.

 InputStream is = new FileInputStream("resources/test.xml");
 DOMLoader loader = new XercesLoader(); 
 Document doc = loader.load(is);

I created org.w3c.dom.Document using axiom and passed it to Psychopath.

    InputStream is = new FileInputStream("resources/test.xml");

    OMMetaFactory omMetaFactory = OMAbstractFactory.getMetaFactory(OMAbstractFactory.FEATURE_DOM);
    OMFactory omFac = omMetaFactory.getOMFactory();
    OMXMLParserWrapper wrapper = OMXMLBuilderFactory.createOMBuilder(omFac, is) ;
    Document doc = (Document) wrapper.getDocument(); 

But when passing doc2 it gives the error

Exception in thread "main" org.w3c.dom.DOMException: NOT_SUPPORTED_ERR: The implementation does not support the requested type of object or operation. at org.apache.axiom.om.impl.dom.DOMUtil.newDOMException(DOMUtil.java:82) at org.apache.axiom.om.impl.dom.NodeImpl.compareDocumentPosition(NodeImpl.java:212) at org.eclipse.wst.xml.xpath2.processor.internal.types.NodeType.compare_node(NodeType.java:219) at org.eclipse.wst.xml.xpath2.processor.internal.types.NodeType.access$0(NodeType.java:207) at org.eclipse.wst.xml.xpath2.processor.internal.types.NodeType$1.compare(NodeType.java:64) at java.util.TreeMap.put(TreeMap.java:545) at java.util.TreeSet.add(TreeSet.java:255) at java.util.AbstractCollection.addAll(AbstractCollection.java:342) at java.util.TreeSet.addAll(TreeSet.java:312) at org.eclipse.wst.xml.xpath2.processor.internal.types.NodeType.linarize(NodeType.java:415) at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.do_step(DefaultEvaluator.java:1165) at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.visit(DefaultEvaluator.java:1249) at org.eclipse.wst.xml.xpath2.processor.internal.ast.XPathExpr.accept(XPathExpr.java:43) at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.do_expr(DefaultEvaluator.java:337) at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.visit(DefaultEvaluator.java:366) at org.eclipse.wst.xml.xpath2.processor.ast.XPath.accept(XPath.java:58) at org.eclipse.wst.xml.xpath2.processor.DefaultEvaluator.evaluate2(DefaultEvaluator.java:325) at org.eclipse.wst.xml.xpath2.processor.ast.XPath.evaluate(XPath.java:131) at psychopath.main(psychopath.java:85)

Needs an explanation. How to pass the DOM Document instance made using axiom to Psychopath to evaluate XPath?

有帮助吗?

解决方案

The explanation is simple: Axiom's DOM implementation doesn't implement the compareDocumentPosition method (defined by DOM 3).

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top