【问题标题】:Marklogic excute Xquery code using java APIMarklogic 使用 java API 执行 Xquery 代码
【发布时间】:2017-01-17 19:40:56
【问题描述】:

有没有办法使用marklogic java api执行xquery代码。基本上我想获取给定文件的大小,在xquery中我可以执行以下操作

return xdmp:binary-size(fn:doc($uri)/binary())

有没有一种使用 Java API 的简单方法来做到这一点?或者我们可以使用 java API 执行随机 xquery 代码吗?

【问题讨论】:

    标签: marklogic marklogic-8


    【解决方案1】:

    是的,您有ServerEvaluationCall,它同时启用了eval 和invoke。但是,它们需要特殊权限。 eval 特别危险,因为当您从客户端发送可能包含注入攻击的临时代码时,它会带来安全风险。

    我们建议您安装并使用自定义 resource extension

    【讨论】:

      【解决方案2】:

      您可能正在寻找这个: 在服务器上执行 ad-hoc 代码,数据自动映射到 MarkLogic 或从 MarkLogic 映射。 https://docs.marklogic.com/guide/java/resourceservices#id_47102

      试驾一下 - 看起来它适合您的需求。

      您还拥有强大的资源服务扩展选项: https://docs.marklogic.com/guide/java/resourceservices#id_27702

      我最喜欢的是这个: https://docs.marklogic.com/guide/java/resourceservices#id_84134 使用注入变量在 MarkLogic 上执行完整的模块 - 数据自动映射到 MarkLogic 或从 MarkLogic 映射

      我们使用这个选项如下:

      • 我们在 Java 中有一个包装函数。
      • 它在 MarkLogic 中执行一个主模块,它也是一个包装函数
      • markLogic 函数是任何其他模块的精美调用程序。 因此,在 java 层调用 exec("a.b.c") 将实际执行 MarkLogic 服务器上目录 A 中模块 B 中的函数 C - 但结果在调用 java 代码中无缝可用。

      它在现实生活中要复杂一些(包括安全性和每次/执行后审计),但肯定是一种模式可以帮助您保持对 xQuery/JS 代码的控制并且不允许注入任意代码执行(因为您仅执行连接用户有权使用的功能)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-03
        • 2022-08-12
        • 1970-01-01
        • 1970-01-01
        • 2011-11-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多