从MarkLogic 8中的rest端点调用具有依赖项的xquery库

从MarkLogic 8中的rest端点调用具有依赖项的xquery库,rest,xquery,marklogic,Rest,Xquery,Marklogic,我们正在从MarkLogic 6升级到8,在调用库模块时遇到了一些问题。我们有从自定义REST扩展和非REST xquery调用的xquery库模块 MarkLogic说REST端点可以使用与新的/ext端点一起安装的库,也可以使用以旧方式安装的库(放在模块数据库的其他地方)。但是,当库模块使用MarkLogic附带的functx包时,我无法实现转换 假设我有两个相同的库模块,一个是通过/ext安装的,另一个不是: xquery version "1.0-ml"; module namespac

我们正在从MarkLogic 6升级到8,在调用库模块时遇到了一些问题。我们有从自定义REST扩展和非REST xquery调用的xquery库模块

MarkLogic说REST端点可以使用与新的/ext端点一起安装的库,也可以使用以旧方式安装的库(放在模块数据库的其他地方)。但是,当库模块使用MarkLogic附带的functx包时,我无法实现转换

假设我有两个相同的库模块,一个是通过
/ext
安装的,另一个不是:

xquery version "1.0-ml";
module namespace test = "test/lib";
import module namespace functx = "http://www.functx.com" at "/MarkLogic/functx/functx-1.0-nodoc-2007-01.xqy";
declare function test:stuff() { 
    <foo/>
};
我有使用每个模块的rest端点(唯一的区别是名称空间和导入):

使用
/ext
安装的库的一个可以工作。使用简单放置在模块数据库中的模块的安装没有错误,但在被非管理员用户调用时给我一个错误(在被管理员调用时它工作):

我只想使用
/ext
安装它们,但是使用
xdmp:invoke
的xquery会中断。这是一个不同的错误,但似乎是相同的根本问题。使用模块数据库中的库调用模块是可行的。使用通过
/ext
安装的库调用模块失败,出现以下错误:

XDMP-MODNOTFOUND: (err:XQST0059) xdmp:invoke("/test/test-module-to-ext.xqy", (), ()) -- Module C:\Program Files\MarkLogic\Modules\MarkLogic\functx\functx-1.0-nodoc-2007-01.xqy not found
如果我将
admin
角色添加到调用用户,则所有角色都可以工作。如果我取出functx导入,即使没有管理员角色,它们也可以工作

这看起来像是权限问题,但我找不到可以解决此问题的角色或权限。用户有一个角色,每个复选框中都有一个复选框,但管理员本身除外。选中最后一个复选框是我发现的唯一可以使这项工作正常的方法,而这显然不是一个可行的解决方案


我们并不真正关心库是如何安装的,但我们不想重复代码。如何使这些导入同时在REST和非REST xquery中工作?

要使权限工作,依赖关系链中的主模块和每个库必须至少由分配给用户的一个角色执行(其中分配包括继承和放大)

REST API在它在
/ext
下安装的模块上设置
REST扩展用户
角色

因此,具有
rest扩展用户
角色的用户应该能够调用restapi在
/ext
下安装的模块


更一般地说,
rest扩展用户
角色可执行的任何模块(无论其安装方式如何)都应该能够依赖于rest API在
/ext
下安装的库(当然,假设所有路径都正确)。

用户拥有rest扩展用户。问题不在于/ext下的模块本身。一般来说,这些都很好用。是在依赖模块中导入functx(MarkLogic提供的)破坏了它。很抱歉,我不清楚。我想问“简单地放在模块数据库中的模块”是否可由rest-extension-user执行。因此,与rest无关的主模块需要rest扩展用户执行权限。这确实有效。奇怪,但还好:)谢谢!
xquery version "1.0-ml";
module namespace te = "http://marklogic.com/rest-api/resource/test-ext-to-ext";
import module namespace test = "test/lib" at "/ext/test/testlib-ext.xqy";
declare function te:get($context as map:map, $params as map:map) as document-node()* {
    document { test:stuff() }
};
RESTAPI-INVALIDREQ: (err:FOER0000) Invalid request:  reason: Extension test-ext-to-lib does not exist.
XDMP-MODNOTFOUND: (err:XQST0059) xdmp:invoke("/test/test-module-to-ext.xqy", (), ()) -- Module C:\Program Files\MarkLogic\Modules\MarkLogic\functx\functx-1.0-nodoc-2007-01.xqy not found