2

我正在尝试在我的存在数据库应用程序中使用 RESTXQ - 我们称之为“超级应用程序”。我将restxq触发器添加到/db/apps/superapp/collection.xconf:

<collection xmlns="http://exist-db.org/collection-config/1.0">
    <index xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <fulltext default="none" attributes="false"/>
    </index>
    <triggers>
        <trigger class="org.exist.extensions.exquery.restxq.impl.RestXqTrigger"/>
    </triggers>
</collection>

然后我在文件夹 /db/apps/superapp/modules 中添加了一个文件“restxq-test.xql”:

xquery version "3.0";

module namespace test="http://exist-db.org/apps/restxq/test";


declare namespace rest="http://exquery.org/ns/restxq";
declare namespace output="http://www.w3.org/2010/xslt-xquery-serialization";


declare
    %rest:GET
    %rest:path("/super")
    %output:media-type("text/html")
    %output:method("html5")
    %rest:query-param("user", "{$user}", "Guest")
function test:hello($user as xs:string*) {
    let $title := 'Hello '
    return
        <html xmlns="http://www.w3.org/1999/xhtml">
            <head>
                <title>{$title}</title>
            </head>
            <body>
                <h1>{$title , $user}</h1>
            </body>
        </html>
};

但是我如何让restxq“知道”这个新模块的存在呢?它显然不会自动这样做。如果我打电话给“xyz.com:8080/exist/restxq/super?user=John”,我会得到

HTTP ERROR 405

Problem accessing /exist/restxq/super. Reason:

    HTTP method GET is not supported by this URL

我重新启动了 eXist 并检查了 /var/www/exist/webapp/WEB-INF/logs/restxq.log 但那里没有条目......我很确定函数和属性映射是正确的。如果我将相同的功能添加到“/db/apps/demo/examples/templating/restxq-demo.xql”(显然已注册),它就完美了。所以我猜新模块只是没有注册。我怎样才能做到这一点?

4

2 回答 2

2

我会发表评论,但我没有足够的积分。我不确定这是否会解决您使用 RESTXQ 的整个问题,因为我没有在我的应用程序中使用它,但您似乎将collection.xconf文件放在了错误的集合中。它应该放在系统集合中:/db/system/config. 这意味着您的配置文件应该在/db/system/config/db/apps/superapp集合中。有关文档页面上存在数据库网站上的触发器的更多信息:配置数据库触发器

于 2017-11-10T18:09:50.440 回答
0

至少在 eXist-db 5 中有一个带有此触发器的默认 /db/system/config/db/apps/collection.xconf。除非您通过删除此文件或在 /db/system/config/db/apps 下的某处添加不同的配置来覆盖该默认设置,否则您无需执行任何操作。我的猜测是,由于您没有看到在 restxq.log 中加载了您的代码,因此您在某处进行了覆盖,这就是为什么您还需要在 /db/system 下显式添加 conf 的原因。

由于您的问题是 3 年前的问题,因此它可能不再对您产生影响,但是在自己寻找信息时,我偶然发现了这个问题。

于 2020-05-03T10:34:37.730 回答