在Marklogic中将XCC呼叫替换为剩余呼叫

时间:2018-09-24 10:41:42

标签: xquery marklogic marklogic-8 marklogic-9

在应用程序.Net XCC中用于与marklogic模块数据库进行通信以执行模块,功能和特别查询等。 我想用REST调用替换相同的XCC调用,以便我们可以在marklogic 9中运行应用程序,因为Marklogic 9中已弃用.Net XCC。

我在marklogic中尝试了内置的rest api。它只允许执行模块数据库中退出的模块。

是否有任何在线资源或可以帮助我们的东西。

任何帮助将不胜感激。

谢谢, ArvindKr

3 个答案:

答案 0 :(得分:0)

/v1/invoke用来调用附加到要处理的REST应用服务器的模块数据库中的模块,还有/v1/eval允许运行临时查询。

HTH!

答案 1 :(得分:0)

如果要用RESTful调用替换XCC.NET,请尝试XQRS,它允许您以类似于Java的JAX-RS的方式在XQuery中构建服务。

答案 2 :(得分:0)

我仅在以下情况(例如您的情况)考虑以下情况:与旧代码的兼容性是有用的或必需的,并且其他选项也被采用。这不是优雅的方法,但在特殊情况下可能会有用。

XDBC协议(XCC所使用的)在与REST API公开的应用服务器和端口完全相同的本地支持。您可以在默认安装的端口8000上看到此内容。服务器实际上无法区分“ REST应用程序”和“ XCC应用程序”,除了请求中请求的URI(在某些情况下还包括其他标头,如cookie)之外。 REST和XDBC都基于HTTP,并且在HTTP层上它们可以共享相同的端口和配置非常相似。 XDBC通过XML重写器“通过” REST处理。 XDBC使用/ eval和/ invoke,而REST使用/ v1 / eval和/ vi / invoke。如果查看端口8000的默认rewriter.xml,则可以看到如何进行路由。虽然XDBC协议尚未正式发布,但通过查看XCC代码(公共Java源代码)和重写器,对其进行“逆向工程”并不困难。例如,构造URL和有效负载数据以进行基本评估或调用调用并不难。您应该能够通过使用/ eval和/ invoke端点来完全复制现有XCC.NET客户端行为(查找rewriter.xml中设置的xdbc属性,这将导致请求处理使用纯XDBC协议和行为。

如果无法解决外部变量问题,另一种替代方法是编写新的“ REST友好” api,然后在传递适当名称空间的旧式APIS上使用xdmp:invoke()。一种选择是将遗留代码放入完全独立的模块数据库中,然后使用新代码完全复制模块URI。如果您不需要维护共存版本,则可以修改旧代码以从参数中删除名称空间或分配局部变量别名。