首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MarkLogic:将Map-Object从Java传递到XQuery

MarkLogic:将Map-Object从Java传递到XQuery
EN

Stack Overflow用户
提问于 2018-08-20 22:02:29
回答 1查看 232关注 0票数 2

我想通过MarkLogic Java API将一个简单的Java传递给一个XQuery脚本。该脚本已部署到服务器上的/ext目录,并按如下方式启动:

代码语言:javascript
复制
xquery version "1.0-ml";

declare variable $dr as xs:string external;
declare variable $en as xs:string external;
declare variable $fi as map:map external;
...

我使用的是MarkLogic站点上描述的模式:https://docs.marklogic.com/guide/java/resourceservices#id_70532 (“模块调用的基本步骤”)。

我的Java代码如下所示:

代码语言:javascript
复制
Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", "value2");

ServerEvaluationCall invoker = client.newServerEval();
invoker.addVariable("dr", "foo");
invoker.addVariable("en", "bar");
invoker.addVariableAs("fi", map);
String response = invoker.evalAs(String.class);

此操作将失败,并出现以下异常:

代码语言:javascript
复制
java.lang.IllegalArgumentException: No factory for class java.util.HashMap
    at com.marklogic.client.impl.HandleFactoryRegistryImpl.makeHandle(HandleFactoryRegistryImpl.java:98) ~[marklogic-client-api-4.0.3.jar:?]
    at com.marklogic.client.impl.ServerEvaluationCallImpl.addVariableAs(ServerEvaluationCallImpl.java:123) ~[marklogic-client-api-4.0.3.jar:?]

我认为我需要在将映射发送到ML之前转换它,或者可能使用某个处理程序类,但我无法解决它,也找不到任何这样的示例。以前有人这么做过吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-21 00:32:31

它应该可以将Jackson JSON对象传递给XQuery外部变量。XQuery中的值应该是XQuery映射或JSON节点。如果是JSON节点,xdmp:from-json()函数可以将该值转换为XQuery映射。

对于Java部分,查找作为“以下代码使用Jackson对象映射器将外部变量值设置为JSON对象”介绍的示例:

https://docs.marklogic.com/guide/java/resourceservices#id_21827

希望这能有所帮助,

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51932451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档