【发布时间】:2012-11-05 12:34:37
【问题描述】:
我们有一个相当简单的 XQuery 和 Groovy 代码,如下所示。 Xquery 代码:
declare variable $criteria as element(criteria) external ;
<scopedInterventions>{
$criteria/equals/field
}</scopedInterventions>
这是试图调用它的测试代码
def uri = new URI("xcc://admin:admin@localhost:8001")
def contentSource = ContentSourceFactory.newContentSource(uri)
def request = session.newModuleInvoke("ourQuery.xqy")
def criteria =
"""<criteria>
<equals>
<field>status</field>
<value>draft</value>
</equals>
</criteria>
"""
request.setNewVariable("criteria",ValueType.ELEMENT, criteria);
session.submitRequest(request).asString()
}
执行时出现此错误:
引起:com.marklogic.xcc.exceptions.XQueryException:XDMP-LEXVAL: xs:QName("element()") -- 无效的词法值 "element()" [会话: user=admin, cb={default} [内容来源:user=admin, cb={none} [提供者:地址=localhost/127.0.0.1:9001,池=1/64]]] [客户端: XCC/5.0-3, 服务器: XDBC/5.0-3] expr: xs:QName("element()") at com.marklogic.xcc.impl.handlers.ServerExceptionHandler.handleResponse(ServerExceptionHandler.java:34) 在 com.marklogic.xcc.impl.handlers.EvalRequestController.serverDialog(EvalRequestController.java:83) 在 com.marklogic.xcc.impl.handlers.AbstractRequestController.runRequest(AbstractRequestController.java:84) 在 com.marklogic.xcc.impl.SessionImpl.submitRequestInternal(SessionImpl.java:373) 在 com.marklogic.xcc.impl.SessionImpl.submitRequest(SessionImpl.java:356) 在 com.zynx.galen.dataaccess.MarkLogicUtilities.executeQueryWithMultipleXMLParameters(MarkLogicUtilities.groovy:52) 在 com.zynx.galen.repositories.ScopedInterventionService.getScopedInterventionsByCriteria(ScopedInterventionService.groovy:20) ... 1 更多
任何帮助将不胜感激。
【问题讨论】:
-
Irina,您确定 XQuery 代码与产生错误的代码相同吗?错误消息
XDMP-LEXVAL: xs:QName("element()") -- Invalid lexical value "element()"看起来完全来自其他地方。 8001也是正确的端口吗?这很奇怪,因为通常管理服务器是 8001。 -
嗨迈克尔,你是对的,端口是 9001(我替换了变量)。如果我将代码更改为接受字符串变量,错误就会消失,所以我很确定它是代码产生错误。