InputStream exception while evaluating Xpath

doucchaus

New Member
I get : \[code\]javax.xml.transform.TransformerException: Unable to evaluate expression using this context\[/code\]\[code\] at com.sun.org.apache.xpath.internal.XPath.execute(Unknown Source) at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(Unknown Source) at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(Unknown Source) at XPathImplementation.evaluate(XPathImplementation.java:136) at Main.main(Main.java:23)Caused by: java.lang.RuntimeException: Unable to evaluate expression using this context at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(Unknown Source) at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(Unknown Source)\[/code\]While trying to evaluate an Xpath expression using \[code\]InputStream\[/code\] object , I've tried to debug it however found nothing wrong (and of course I missed something ..) . Here's the code:From Main: \[code\] XPathProject m = new XPathImplementation(); m.loadXML("books.xml"); String q = "inventory/book/chapter[3]/preceding-sibling::chapter//title"; Object ob = m.evaluate(q, null, XPathConstants.NODESET);\[/code\]We use this \[code\]evaluate\[/code\] method : \[code\]public Object evaluate(String expression, Node source, QName returnType) throws XPathExpressionException,IllegalArgumentException,NullPointerException, TransformerException{... InputStream is = nodeToInputStream(source); Object returnedObject= xpath.evaluate(expression, is, returnType); // it happens here !!... more code}\[/code\]Auxiliary method \[code\]nodeToInputStream\[/code\]: \[code\]/* * Convert Node object into InputStream object */ private InputStream nodeToInputStream(Node node) throws TransformerException { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); StreamResult outputTarget = new StreamResult(outputStream); Transformer t = TransformerFactory.newInstance().newTransformer(); t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); t.transform(new DOMSource(node), outputTarget); return new ByteArrayInputStream(outputStream.toByteArray());}\[/code\]Any idea where did I go wrong ? 10x!
 
Back
Top