DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://issues.apache.org/bugzilla/show_bug.cgi?id=20439>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=20439 About a class cast in XPathEvaluatorImpl.java ------- Additional Comments From [EMAIL PROTECTED] 2004-05-04 21:13 ------- Complete mail : http://marc.theaimsgroup.com/?l=xalan-dev&m=108368990131370&w=2 in short : I made 2 versions for resolving prefixes, - one works : XPathNSResolver nsResolver = evaluator.createNSResolver(buildNSDoc().getDocumentElement()); - the other method doesn't : // !!!!! XPathNSResolver subclassing : doesn't work //XPathNSResolver nsResolver = new NamespacesRes(); an exception is raised : test: [java] java.lang.ClassCastException [java] at org.apache.xpath.domapi.XPathEvaluatorImpl.createExpression(XPathEvaluatorImpl.java:165) [java] at org.apache.xpath.domapi.XPathEvaluatorImpl.evaluate(XPathEvaluatorImpl.java:257) [java] at test.XPathNSResolverTest.evalXpath(Unknown Source) [java] at test.XPathNSResolverTest.main(Unknown Source) [java] Exception in thread "main" [java] Java Result: 1 Test program ------------------------ 8< ------------------------------------------ package test; import java.io.StringReader; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.apache.xpath.domapi.XPathEvaluatorImpl; import org.w3c.dom.*; import org.w3c.dom.xpath.*; import org.xml.sax.InputSource; class NamespacesRes implements XPathNSResolver { public String lookupNamespaceURI(String prefix) { System.out.println("lookupNamespaceURI " + prefix); if (prefix.equals("ab")) { return "http://ns.test.org/ab/"; } else if (prefix.equals("xy")) { return "http://ns.test.org/xy/"; } else if (prefix.equals("def")) { return "http://ns.test.org/"; } else { return null; } } } public class XPathNSResolverTest { private Document doc = null; public XPathNSResolverTest() { InputSource is; try { is = new InputSource(new StringReader( "<?xml version=\"1.0\"?>" + "<ab:foo xmlns=\"http://ns.test.org/\" " + " xmlns:ab=\"http://ns.test.org/ab/\" " + " xmlns:xy=\"http://ns.test.org/xy/\">" + "<list><xy:item>item1</xy:item>" + "<xy:item>item2</xy:item></list>" + "</ab:foo>")); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); dbf.setValidating(false); this.doc = dbf.newDocumentBuilder().parse(is); } catch (Exception e) { System.err.println(e.getMessage()); e.printStackTrace(); } } public Document buildNSDoc(){ Document nsdoc=null; try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DOMImplementation impl = dbf.newDocumentBuilder().getDOMImplementation(); nsdoc = impl.createDocument("http://ns.test.org/", "def:nsdoc", null); Element root = nsdoc.getDocumentElement(); root.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:ab", "http://ns.test.org/ab/"); root.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xy", "http://ns.test.org/xy/"); root.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:def", "http://ns.test.org/"); } catch (ParserConfigurationException e) { e.printStackTrace(); } return nsdoc; } public void evalXpath(String xpath) { XPathEvaluator evaluator = new XPathEvaluatorImpl(doc); // !!!!! XPathNSResolver subclassing : doesn't work //XPathNSResolver nsResolver = new NamespacesRes(); // works ! XPathNSResolver nsResolver = evaluator.createNSResolver(buildNSDoc().getDocumentElement()); XPathResult result = (XPathResult) evaluator.evaluate(xpath, doc, nsResolver, XPathResult.UNORDERED_NODE_ITERATOR_TYPE, null); System.out.println("Result >>"); Node next = result.iterateNext(); while (next != null) { XPathResult stringValue = (XPathResult) evaluator .evaluate("string()", next, nsResolver, XPathResult.STRING_TYPE, null); System.out.println(stringValue.getStringValue()); next = result.iterateNext(); } } public static void main(String[] args) { XPathNSResolverTest test = new XPathNSResolverTest(); test.evalXpath("/ab:foo/def:list/xy:item"); } } ------------------------ 8< ------------------------------------------ --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
