【问题标题】:Getting com.marklogic.client.FailedRequestException Invalid parameter: Invalid query structure (check namespace)获取 com.marklogic.client.FailedRequestException 无效参数:无效的查询结构(检查命名空间)
【发布时间】:2015-08-26 09:30:47
【问题描述】:

我是 Marklogic 的新手,可能遗漏了一些东西。我正在使用 MarkLogic 7.0、java-client-api 2.0.5。创建了一个新的 REST 实例后,我正在尝试运行 Marklogic 提供的示例代码:

DatabaseClient client = 
  DatabaseClientFactory.newClient("some.host.com", 8006, "user", "****", 
    DatabaseClientFactory.Authentication.DIGEST);
JSONDocumentManager doc = client.newJSONDocumentManager();
doc.write(
  "hello.json", 
  new StringHandle("{\"recipient\": \"world\", \"message\": \"Hello, world!\"}"));

QueryManager query = client.newQueryManager();
StructuredQueryBuilder b = query.newStructuredQueryBuilder();
SearchHandle results = 
  query.search(
    b.and(b.term("hello"), b.value(b.jsonKey("recipient"), "world")), 
    new SearchHandle());  
for (MatchDocumentSummary summary : results.getMatchResults()) {
    System.out.println(doc.read(summary.getUri(), new StringHandle()).toString());
}

但我收到以下错误

com.marklogic.client.FailedRequestException: Local message: search failed: Bad Request. Server Message: REST-INVALIDPARAM: (err:FOER0000) Invalid parameter: Invalid query structure (check namespace): <query xmlns:search="http://marklogic.com/appservices/search" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><and-query><term-query><text>hello</text></term-query><value-query><json-key>recipient</json-key><text>world</text></value-query></and-query></query>
at com.marklogic.client.impl.JerseyServices.search(JerseyServices.java:1893)
at com.marklogic.client.impl.JerseyServices.search(JerseyServices.java:1703)
at com.marklogic.client.impl.QueryManagerImpl.search(QueryManagerImpl.java:199)
at com.marklogic.client.impl.QueryManagerImpl.search(QueryManagerImpl.java:162)

这是什么原因?那是因为某些服务器配置,我需要以某种方式调整代码吗?(我没有管理员权限并且已经配置了 MarkLogic 服务器)

附:在我在另一台机器上安装 MarkLogic 并在那里运行相同的代码后,它运行良好。

谢谢, Hlib

更新:

  1. 服务器日志不提供任何其他信息
  2. 如果我将“搜索”命名空间放在每个标签中,一切正常。

【问题讨论】:

  • 什么版本的 MarkLogic 7.0? java-client-api 2.0.5 只能用于 MarkLogic Server 7.0-5。对于它的价值,当我使用 java-client-api 2.0.5 对 MarkLogic Server 7.0-5 尝试您的代码时,它对我有用。
  • 另外,如何在每个标签中放置“搜索”命名空间?您的意思是直接针对 REST 端点吗?还是使用 RawStructuredQueryDefintion?该错误肯定是缺少 XML 上的命名空间,但我无法理解它是如何从 StructuredQueryBuilder 中获得的,也无法理解如何通过 StructuredQueryBuilder 在每个标记中放置一个命名空间。
  • 您是否尝试过使用最小的类路径?我在想你的类路径中可能有一些东西导致 XMLStreamWriter(由 StructuredQueryBuilder 使用)行为不端并且不使用默认命名空间github.com/marklogic/java-client-api/blob/2.0-develop/src/main/…
  • @Sam,谢谢。使用最小的类路径运行后,我发现导致问题的是 woodstox 库

标签: java marklogic nosql


【解决方案1】:

我从类路径中删除了 woodstox 库。正如@SamMefford 所提到的,它导致 XMLStreamWriter 行为不端。之后一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-19
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    相关资源
    最近更新 更多