You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by bu...@apache.org on 2004/05/04 23:13:52 UTC
DO NOT REPLY [Bug 20439] -
About a class cast in XPathEvaluatorImpl.java
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 fl@opikanoba.org 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: xalan-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-dev-help@xml.apache.org