我想在现有数据库中启动XQuery。代码似乎很简单
String driver = "org.exist.xmldb.DatabaseImpl";
Database database = (Database) Class.forName(driver).newInstance();
DatabaseManager.registerDatabase(database);
Collection col = DatabaseManager.getCollection(mydburi, login, pass);
XQueryService service = (XQueryService) collection.getService("XQueryService", "3.0");
String query="xquery version \"1.0\";let $message := 'Hello World!'return <results><message>{$message}</message></results>";
ResourceSet result = service.query(query);`
问题是最后一行抛出了一个例外,例如
org.xmldb.api.base.XMLDBException:没有这样的处理程序:Default.queryPT 在org.exist.xmldb.RemoteXPathQueryService.query(RemoteXPathQueryService.java:115) 在org.exist.xmldb.RemoteXPathQueryService.query(RemoteXPathQueryService.java:72) 在server.DatabaseManagerExist.doQuery(DatabaseManagerExist.java:230) 在server.DatabaseManagerExist.main(DatabaseManagerExist.java:327)
引起:org.apache.xmlrpc.XmlRpcException:没有这样的处理程序:Default.queryPT 在org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:197) 在org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:156) 在org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:143) 在org.apache.xmlrpc.client.XmlRpcSunHttpTransport.sendRequest(XmlRpcSunHttpTransport.java:69) 在org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:56) 在org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:167) 在org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:158) 在org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:147) 在org.exist.xmldb.RemoteXPathQueryService.query(RemoteXPathQueryService.java:100) ......还有3个
我无法找到有关此异常的任何信息或它引用的Default.queryPT,我不知道它可能导致它。
集合存在,我可以访问给定的集合来执行其他操作,如存储或读取资源。我可以在Exide中复制查询,它可以正常工作。我也尝试了最基本的Hello World查询,结果相同。我也没有运气使用XQueryService 1.0。
我正在使用exists-db v4.0.0库来连接数据库。
知道什么是处理程序Default.queryPT以及如何/在哪里更改它?
答案 0 :(得分:1)
XmlRpcException
是eXist-db 4.0.0中更改的XML-RPC API的结果(由eXist开发团队的@adamretter确认)以及您使用4.0.0库的事实一些较旧的数据库。我认为最佳实践是始终使用数据库和相同版本的库,这样可以避免因其不连贯性而导致的问题,例如API中的可能更改。