我们有一个相当简单的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} [ContentSource:user = admin,cb = {none} [provider:address = localhost / 127.0.0.1:9001,pool = 1/64]] [客户: XCC / 5.0-3,服务器:XDBC / 5.0-3] expr:xs:QName(“element()”)at 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个
任何帮助都会受到高度赞赏。
答案 0 :(得分:7)
http://docs.marklogic.com/javadoc/xcc/overview-summary.html有答案:
使用查询传递变量
变量可能绑定到Request对象。当执行请求时 使用Session.submitRequest(Request)向服务器发出所有 当前绑定到Request对象的变量沿和发送 在服务器的执行上下文中定义为外部变量。
XCC允许您创建XdmNodes和XdmSequences以及XdmAtomic 值。但是,在这种类型的初始XCC版本中可能会有 不被绑定为外部变量,因为MarkLogic Server还不能 接受他们。预计此功能将在未来发布。
由于不支持XdmNode
,我认为它的子类XdmElement也不受支持。所以这些类只对响应有用,而不是请求。错误信息可能有待改进。
您可以使用setNewStringVariable
传递XML字符串,然后在XQuery模块中调用xdmp:unquote
。请注意xdmp:unquote
返回文档节点,因此/*
XPath步骤会生成其根元素。
declare variable $xml-string as xs:string external ;
declare variable $criteria as element(criteria) := xdmp:unquote($xml-string)/* ;
....