有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

MarkLogic:将MapObject从Java传递到XQuery

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

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代码如下所示:

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);

此操作失败,但出现以下例外情况:

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之前转换它,或者使用一个处理程序类,但我无法解决它,也找不到任何这样的例子。以前有人这样做过吗


共 (1) 个答案

  1. # 1 楼答案

    将Jackson JSON对象传递给XQuery外部变量应该有用。XQuery中的值应该是XQuery映射或JSON节点。如果是JSON节点,^{}函数可以将该值转换为XQuery映射

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

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

    希望能有所帮助