rest-api中的DELETE方法抛出异常:args太少,预期3但得到2

时间:2013-06-14 17:01:57

标签: rest marklogic

我在ML 6.0-3.2中创建了一个资源服务扩展,如下所示:

使用delete方法创建了一个名为export-customer.xqy的xquery模块(省略了其他方法):

    declare function expctrl:delete(
        $context as map:map,
        $params as map:map,
        $input as document-node()?
    ) as document-node()? {
        let $customer := map:get($params, "customer")
        let $_ := exp:customer-node-delete(xs:int($customer))
        return ( xdmp:set-response-code(200, "OK"), () )
    };

使用以下命令安装:

curl --anyauth --user user:pass -X PUT -d@/opt/export-customer.xqy -HContent-Type:application/xquery "http://server1:8020/v1/config/resources/exportCustomer?title=exportCustomer&method=get&method=put&method=post&method=delete&get:customer=xs:string&delete:customer=xs:string"

使用以下命令调用:

curl --anyauth --user user:pass -X DELETE "http://server1:8020/v1/resources/exportCustomer?rs:customer=105"

此调用的结果如下:

<rapi:error xmlns:rapi="http://marklogic.com/rest-api"><rapi:status-code>500</rapi:status-code><rapi:status>INTERNAL ERROR</rapi:status><rapi:message-code>XDMP-TOOFEWARGS</rapi:message-code><rapi:message>XDMP-TOOFEWARGS: (err:XPST0017) xdmp:function(fn:QName("http://marklogic.com/rest-api/resource/exportCustomer", "delete"))($context, $resource-params) -- Too few args, expected 3 but got 2.  See the MarkLogic server error log for further detail.</rapi:message></rapi:error>

堆栈跟踪指向resource-model-update.xqy模块的第410行:

        if (empty($tx-ids))
->      then rsrcmodupd:exec-delete-impl($headers,$endpoint-params,$responder)
        else

我不知道采取什么方法来尝试和调试它。它还没有成为我的代码。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

错误消息说该函数需要三个参数,但REST API使用两个参数调用它。它还说要查看ErrorLog.txt以获取更多详细信息。

我看到您在文档中的http://docs.marklogic.com/guide/rest-dev/extensions#id_75991处的示例上建模了您的函数声明。只是一个猜测,但也许文档是错的?尝试从函数声明中删除$ input参数。如果你考虑一下,为什么DELETE会包含它呢?