Marklogic 清除集合在Java API中不起作用

Marklogic 清除集合在Java API中不起作用,marklogic,marklogic-9,Marklogic,Marklogic 9,我们使用的是MarkLogicv10和JavaAPIv4.1.0。 我们的要求是清除特定文件中的集合 我们使用下面的代码片段清除所有集合 XMLDocumentManager xmlDocumentManager = client.newXMLDocumentManager(); DocumentMetadataHandle metadataHandle = new DocumentMetadataHandle(); xmlDocumentManager.readMetadata("

我们使用的是MarkLogicv10和JavaAPIv4.1.0。 我们的要求是清除特定文件中的集合

我们使用下面的代码片段清除所有集合

XMLDocumentManager xmlDocumentManager = client.newXMLDocumentManager();

DocumentMetadataHandle metadataHandle = new DocumentMetadataHandle();
xmlDocumentManager.readMetadata("/test/inventory", metadataHandle);

DOMHandle domHandle = new DOMHandle();
xmlDocumentManager.read("/test/inventory", domHandle);

metadataHandle.getCollections().clear();
xmlDocumentManager.write("/test/inventory", metadataHandle, domHandle);
在运行上述代码段之后,它应该从文档中删除所有集合,但不会发生


请帮助我完成这项工作。

复制错误的解决方案,以防对其他人有用

Clear collections仅在REST API的Java API客户端中本地清除内存中的
DocumentMetadataHandle

Java API调用的REST API的行为取决于REST API服务器更新策略的配置:

  • MERGE\u METADATA
    为客户端未发送的任何元数据类别保留现有文档的当前元数据

  • OVERWRITE\u METADATA
    忽略现有文档的当前元数据

更改更新策略以覆盖\u元数据应该会产生预期的行为

下面是进行更改的Java API代码:

    ServerConfigurationManager configMgr = client.newServerConfigManager();
    configMgr.readConfiguration();
    configMgr.setUpdatePolicy(ServerConfigurationManager.UpdatePolicy.OVERWRITE_METADATA);
    configMgr.writeConfiguration();
注意

  • 服务器配置将保持有效,直到更改。通常,设置后,配置不会更改

  • 在MarkLogic server的最新版本中,默认更新策略从
    MERGE\u METADATA
    更改为
    OVERWRITE\u METADATA


感谢Shivling深入研究这个问题。

根据我对的阅读,这似乎是一个bug。你能打开一个漏洞吗?你上面的例子就足够了。