Java JOOX命名空间支持
我正在尝试对一些包含名称空间的XML运行一些xpath查询。不幸的是,它给了我一个相当可怕的错误消息,因为它不理解xpath查询或XML中的名称空间 xpath查询示例是:Java JOOX命名空间支持,java,xml,xpath,namespaces,joox,Java,Xml,Xpath,Namespaces,Joox,我正在尝试对一些包含名称空间的XML运行一些xpath查询。不幸的是,它给了我一个相当可怕的错误消息,因为它不理解xpath查询或XML中的名称空间 xpath查询示例是://b:menuBarItem[@label='Risk']/@id 我可以在中配置名称空间吗?配置方式与我在这里使用内置java库的方式类似 private static NamespaceContext createXPathNameSpaceContext( final Map<String, String&g
//b:menuBarItem[@label='Risk']/@id
我可以在中配置名称空间吗?配置方式与我在这里使用内置java库的方式类似
private static NamespaceContext createXPathNameSpaceContext( final Map<String, String> namespaces ) {
NamespaceContext nsContext = new NamespaceContext() {
public Iterator<String> getPrefixes( String namespaceURI ) {
return null;
}
public String getPrefix( String namespaceURI ) {
return null;
}
public String getNamespaceURI( String prefix ) {
if ( namespaces.containsKey( prefix ) ) {
return namespaces.get( prefix );
} else {
return XMLConstants.NULL_NS_URI;
}
}
};
return nsContext;
}
最明显的是我没有注册名称空间,但我不知道如何注册。我怀疑我有点短视,忽略了API中的某些内容。我从JOOX得到的堆栈跟踪如下
java.lang.RuntimeException: javax.xml.xpath.XPathExpressionException
at org.joox.Impl.xpath(Impl.java:494)
at org.joox.Impl.xpath(Impl.java:467)
at org.joox.Impl.xpath(Impl.java:93)
at end2end.http.HttpAction$XML.extractResponseData(HttpAction.java:181)
at end2end.http.XMLPostAction.extractResponseData(XMLPostAction.java:26)
at end2end.http.HttpAction.perform(HttpAction.java:58)
at end2end.TestXML$UserAction.fire(TestXML.java:176)
at end2end.TestXML$FireAction.fire(TestXML.java:148)
at end2end.TestXML.multipleUsers(TestXML.java:119)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:702)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:894)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1219)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:336)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:65)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:88)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1122)
at org.testng.TestNG.run(TestNG.java:1030)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:215)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
Caused by: javax.xml.xpath.XPathExpressionException
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(XPathImpl.java:402)
at org.joox.Impl.xpath(Impl.java:486)
at org.joox.Impl.xpath(Impl.java:467)
at org.joox.Impl.xpath(Impl.java:93)
at end2end.http.HttpAction$XML.extractResponseData(HttpAction.java:181)
at end2end.http.XMLPostAction.extractResponseData(XMLPostAction.java:27)
at end2end.http.HttpAction.perform(HttpAction.java:58)
at end2end.TestXML$UserAction.fire(TestXML.java:176)
at end2end.TestXML$FireAction.fire(TestXML.java:148)
at end2end.TestXML.multipleUsers(TestXML.java:120)
... 24 more
Caused by: com.sun.org.apache.xpath.internal.domapi.XPathStylesheetDOM3Exception: Prefix must resolve to a namespace:
at com.sun.org.apache.xpath.internal.compiler.XPathParser.errorForDOM3(XPathParser.java:653)
at com.sun.org.apache.xpath.internal.compiler.Lexer.mapNSTokens(Lexer.java:638)
at com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:265)
at com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:96)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.initXPath(XPathParser.java:110)
at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:176)
at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:264)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(XPathImpl.java:394)
at org.joox.Impl.xpath(Impl.java:486)
at org.joox.Impl.xpath(Impl.java:467)
at org.joox.Impl.xpath(Impl.java:93)
at end2end.http.HttpAction$XML.extractResponseData(HttpAction.java:181)
at end2end.http.XMLPostAction.extractResponseData(XMLPostAction.java:26)
at end2end.http.HttpAction.perform(HttpAction.java:58)
at end2end.TestXML$UserAction.fire(TestXML.java:176)
at end2end.TestXML$FireAction.fire(TestXML.java:148)
at end2end.TestXML.multipleUsers(TestXML.java:119)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:702)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:894)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1219)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1197)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1122)
at org.testng.TestNG.run(TestNG.java:1030)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
... 1 more
java.lang.RuntimeException:javax.xml.xpath.XPathExpressionException
位于org.joox.Impl.xpath(Impl.java:494)
位于org.joox.Impl.xpath(Impl.java:467)
位于org.joox.Impl.xpath(Impl.java:93)
位于end2end.http.HttpAction$XML.extractResponseData(HttpAction.java:181)
在end2end.http.xmlpastaction.extractResponseData(xmlpastaction.java:26)
在end2end.http.HttpAction.perform(HttpAction.java:58)
TestXML$UserAction.fire(TestXML.java:176)
TestXML$FireAction.fire(TestXML.java:148)
在end2end.TestXML.multipleUsers(TestXML.java:119)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
位于org.testng.internal.Invoker.invokeMethod(Invoker.java:702)
位于org.testng.internal.Invoker.invokeTestMethod(Invoker.java:894)
位于org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1219)
位于org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
位于org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
位于org.testng.TestRunner.privateRun(TestRunner.java:767)
位于org.testng.TestRunner.run(TestRunner.java:617)
位于org.testng.SuiteRunner.runTest(SuiteRunner.java:336)
在org.testng.SuiteRunner.runSequential上(SuiteRunner.java:329)
位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
运行(SuiteRunner.java:240)
位于org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:65)
位于org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:88)
在org.testng.testng.runSuitesSequentially上(testng.java:1198)
位于org.testng.testng.runSuitesLocally(testng.java:1122)
位于org.testng.testng.run(testng.java:1030)
位于org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
位于org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:215)
位于org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
原因:javax.xml.xpath.XPathExpressionException
位于com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(XPathImpl.java:402)
位于org.joox.Impl.xpath(Impl.java:486)
位于org.joox.Impl.xpath(Impl.java:467)
位于org.joox.Impl.xpath(Impl.java:93)
位于end2end.http.HttpAction$XML.extractResponseData(HttpAction.java:181)
在end2end.http.xmlpastaction.extractResponseData(xmlpastaction.java:27)
在end2end.http.HttpAction.perform(HttpAction.java:58)
TestXML$UserAction.fire(TestXML.java:176)
TestXML$FireAction.fire(TestXML.java:148)
在end2end.TestXML.multipleUsers(TestXML.java:120)
... 还有24个
原因:com.sun.org.apache.xpath.internal.domapi.XPathStylesheetDOM3Exception:前缀必须解析为命名空间:
位于com.sun.org.apache.xpath.internal.compiler.XPathParser.errorForDOM3(XPathParser.java:653)
位于com.sun.org.apache.xpath.internal.compiler.Lexer.mapNSTokens(Lexer.java:638)
位于com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:265)
位于com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:96)
位于com.sun.org.apache.xpath.internal.compiler.XPathParser.initXPath(XPathParser.java:110)
位于com.sun.org.apache.xpath.internal.xpath(xpath.java:176)
在com.sun.org.apache.xpath.internal.xpath.(xpath.java:264)
位于com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(XPathImpl.java:394)
位于org.joox.Impl.xpath(Impl.java:486)
位于org.joox.Impl.xpath(Impl.java:467)
位于org.joox.Impl.xpath(Impl.java:93)
位于end2end.http.HttpAction$XML.extractResponseData(HttpAction.java:181)
在end2end.http.xmlpastaction.extractResponseData(xmlpastaction.java:26)
在end2end.http.HttpAction.perform(HttpAction.java:58)
TestXML$UserAction.fire(TestXML.java:176)
TestXML$FireAction.fire(TestXML.java:148)
在end2end.TestXML.multipleUsers(TestXML.java:119)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
位于org.testng.internal.Invoker.invokeMethod(Invoker.java:702)
位于org.testng.internal.Invoker.invokeTestMethod(Invoker.java:894)
位于org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1219)
位于org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
位于org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
位于org.testng.TestRunner.privateRun(TestRunner.java:767)
位于org.testng.TestRunner.run(TestRunner.java:617)
位于org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
在org.testng.SuiteRunner.runSequential上(SuiteRunner.java:329)
位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
运行(SuiteRunner.java:240)
在org.testng.Sui
java.lang.RuntimeException: javax.xml.xpath.XPathExpressionException
at org.joox.Impl.xpath(Impl.java:494)
at org.joox.Impl.xpath(Impl.java:467)
at org.joox.Impl.xpath(Impl.java:93)
at end2end.http.HttpAction$XML.extractResponseData(HttpAction.java:181)
at end2end.http.XMLPostAction.extractResponseData(XMLPostAction.java:26)
at end2end.http.HttpAction.perform(HttpAction.java:58)
at end2end.TestXML$UserAction.fire(TestXML.java:176)
at end2end.TestXML$FireAction.fire(TestXML.java:148)
at end2end.TestXML.multipleUsers(TestXML.java:119)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:702)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:894)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1219)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:336)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:65)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:88)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1198)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1122)
at org.testng.TestNG.run(TestNG.java:1030)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:215)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)
Caused by: javax.xml.xpath.XPathExpressionException
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(XPathImpl.java:402)
at org.joox.Impl.xpath(Impl.java:486)
at org.joox.Impl.xpath(Impl.java:467)
at org.joox.Impl.xpath(Impl.java:93)
at end2end.http.HttpAction$XML.extractResponseData(HttpAction.java:181)
at end2end.http.XMLPostAction.extractResponseData(XMLPostAction.java:27)
at end2end.http.HttpAction.perform(HttpAction.java:58)
at end2end.TestXML$UserAction.fire(TestXML.java:176)
at end2end.TestXML$FireAction.fire(TestXML.java:148)
at end2end.TestXML.multipleUsers(TestXML.java:120)
... 24 more
Caused by: com.sun.org.apache.xpath.internal.domapi.XPathStylesheetDOM3Exception: Prefix must resolve to a namespace:
at com.sun.org.apache.xpath.internal.compiler.XPathParser.errorForDOM3(XPathParser.java:653)
at com.sun.org.apache.xpath.internal.compiler.Lexer.mapNSTokens(Lexer.java:638)
at com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:265)
at com.sun.org.apache.xpath.internal.compiler.Lexer.tokenize(Lexer.java:96)
at com.sun.org.apache.xpath.internal.compiler.XPathParser.initXPath(XPathParser.java:110)
at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:176)
at com.sun.org.apache.xpath.internal.XPath.<init>(XPath.java:264)
at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.compile(XPathImpl.java:394)
at org.joox.Impl.xpath(Impl.java:486)
at org.joox.Impl.xpath(Impl.java:467)
at org.joox.Impl.xpath(Impl.java:93)
at end2end.http.HttpAction$XML.extractResponseData(HttpAction.java:181)
at end2end.http.XMLPostAction.extractResponseData(XMLPostAction.java:26)
at end2end.http.HttpAction.perform(HttpAction.java:58)
at end2end.TestXML$UserAction.fire(TestXML.java:176)
at end2end.TestXML$FireAction.fire(TestXML.java:148)
at end2end.TestXML.multipleUsers(TestXML.java:119)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
at org.testng.internal.Invoker.invokeMethod(Invoker.java:702)
at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:894)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1219)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
at org.testng.TestRunner.privateRun(TestRunner.java:767)
at org.testng.TestRunner.run(TestRunner.java:617)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
at org.testng.SuiteRunner.run(SuiteRunner.java:240)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:87)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1197)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1122)
at org.testng.TestNG.run(TestNG.java:1030)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
... 1 more
$(document).namespace("b", "http://test").xpath("//b:menuBarItem[@label='Risk']")
$(document).namespace("b", "http://test").xpath("//b:menuBarItem[@label='Risk'/@id]")