gpt4 book ai didi

java - 获取 "XQueryException",意外的 token 语法错误

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:34 25 4
gpt4 key购买 nike

我已经创建了Xdbc数据库连接并运行示例程序,它是成功的。我创建了类 markLogics.java 并导入了 jar 文件 marklogic-xcc-4.0.1.jar

代码快照:

package com.marklogic;
import java.net.URI;
import java.net.URISyntaxException;
import com.marklogic.xcc.ContentSource;
import com.marklogic.xcc.ContentSourceFactory;
import com.marklogic.xcc.Session;
import com.marklogic.xcc.Request;
import com.marklogic.xcc.ResultSequence;
import com.marklogic.xcc.exceptions.RequestException;
import com.marklogic.xcc.exceptions.XccConfigException;**

class markLogics {
public static void main(String args[]) throws XccConfigException,
RequestException {
URI uri = null;
try {
uri = new URI("xcc://user:pwd@localhost:8008/Marklogics");
// uri=new URI("");
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String queryResult = "";
ContentSource contentSource = ContentSourceFactory
.newContentSource(uri);
Session session = contentSource.newSession();
String queryStr = "let $uri := xdmp:get-request-field(\"uri\")"
+ "return"
+ "if (empty($uri) or $uri eq\"\") then"
+ "("
+ " xdmp:set-response-content-type(\"\text/html\"),"
+ "<ul>"
+ "{for $i in collection()"
+ "let $doc := document-uri($i) return"
+ "<li>"
+ "<a href="
+ "\"view.xqy?uri={xdmp:url-encode($doc)}\""
+ " >{$doc}</a></li>"
+ "}</ul>)"
+ "else ( xdmp:set-response-content-type(\"text/xml\"), if (empty(doc($uri)))"
+ "then <error>No content" + "</error> else doc($uri) )";
// String
// queryStr="let $uri := xdmp:get-request-field(\"uri\")for $v in $doc//uri $a in $doc//play";
Request request = session.newAdhocQuery(queryStr);
try {
ResultSequence rs = session.submitRequest(request);
System.out.println(rs.asString());
} catch (Exception e) {
e.printStackTrace();
}
session.close();
}

}

执行代码时,出现异常:

com.marklogic.xcc.exceptions.XQueryException: XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error, unexpected QName_on line 1
expr:
at com.marklogic.xcc.impl.handlers.ServerExceptionHandler.handleResponse(ServerExceptionHandler.java:31)
at com.marklogic.xcc.impl.handlers.EvalRequestController.serverDialog(EvalRequestController.java:68)
at com.marklogic.xcc.impl.handlers.AbstractRequestController.runRequest(AbstractRequestController.java:72)
at com.marklogic.xcc.impl.SessionImpl.submitRequest(SessionImpl.java:280)
at com.marklogic.markLogics.main(test.java:34)

理解:

根据我对查询的理解,我调用了抛出异常的 view.xqy 文件。

方法如下:我尝试了以下方法来解决这个问题,方法是存档 view.xqy 并将其添加到项目的构建路径中,但这对我没有帮助。

您能给我一些克服困难的指导吗?

最佳答案

目前我怀疑您的问题与Java字符串连接有关:例如,queryStr中的“return”和“if...”之间没有空格。 queryStr 的每个组件可能需要以一些空格开始或结束。

但最好退后一步,尝试一种更简单的方法,使用 native HTTP 而不是 Java。在我看来,您正在尝试构建一个 Web 应用程序,其中包含一个呈现链接列表的索引页面。您可能会发现在纯 HTTP 中更容易做到这一点。

因此,我会将您的 queryStr XQuery 移动到 index.xqy 文件中,并将该文件放置在 HTTPServermodules root 中。将 view.xqy 放置在同一位置。使用普通网络浏览器连接http://HOSTNAME:PORT/,填写正确的HOSTNAMEPORT

稍后您可能需要集成 Java,但我认为如果您首先让一个简单的 HTTP 应用程序正常工作,这将有助于您增强信心。

更多阅读:

关于java - 获取 "XQueryException",意外的 token 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9055615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com