【问题标题】:Java - processing Marklogic eval response giving JSON DocumentsJava - 处理提供 JSON 文档的 Marklogic 评估响应
【发布时间】:2017-03-09 20:04:02
【问题描述】:

我有一个返回字符串列表的 MarkLogic XQuery eval 调用。我使用下面的代码来处理结果。我有另一个返回 Json 文档列表的调用,但我看不到如何让 EvalResult 给我一个 JsonDocument 文档。如何更改以下代码以处理 Json 文档?

   public static ArrayList<String> getStringList(DatabaseClient client, String query)
   {
      ArrayList<String> strings = new ArrayList<String>();
      ServerEvaluationCall eval = client.newServerEval();
      EvalResultIterator eri = eval.xquery(query).eval();
      while (eri.hasNext())
      {
         EvalResult er = eri.next();
         String s = er.getString();
         strings.add(s);
      }
      return strings;
   }

【问题讨论】:

    标签: java marklogic


    【解决方案1】:

    首先,我建议您仅将 eval 用作最后的手段,因为它可能会打开一个安全漏洞。如果您从不从客户端发送代码以在服务器上执行,则注入攻击是不可能的。首先从开箱即用的功能开始,如果这些还不够,请考虑编写 resource extension 而不是使用 eval。两个例子是ResourceExtensionJavascriptResourceExtension

    但要回答您的问题,请更改以下内容:

         String s = er.getString();
    

    到这里:

         JacksonHandle handle = er.get(new JacksonHandle());
         JsonNode json = handle.get();
    

    或者这个快捷方式:

         JsonNode json = er.getAs(JsonNode.class);
    

    有关完整示例,请参阅处理 myArray 和 myObject EvalTest.evalAndInvokeXQuery(当然还有 runAndTestXQuery)和 evaltest.xqy

    无论您是从文档读取、搜索还是评估中获取 JSON 结果,这些 Jackson 句柄的工作方式都是一样的。您可以阅读有关 io 快捷方式 here 的更多信息。有关 Jackson 的更多示例代码,请参阅 JacksonHandleExampleJacksonHandleTestJacksonStreamTestJacksonDatabindTest

    【讨论】:

    • 非常感谢 - 我会试试的。
    • 是的,有效!仅供参考 - 我是如此接近 - 我尝试过(除其他外)是 er.getAs(JacksonHandle.class) 但这只是一个例外。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多