在MarkLogic的StructuredQueryDefinition中为range字段使用rangeConstraint时出错

时间:2014-04-28 09:59:00

标签: marklogic java-api

我正在尝试使用以下内容获取创建日期(已创建字段)的值大于"2014-04-25T02:11:10-07:00"的文档:

qb.rangeConstraint("created", Operator.GT, "2014-04-25T02:11:10-07:00")

但我得到了

  

[致命错误]:9:102:字符引用"&#17"是一个无效的XML字符。

我也试过这个:

qb.rangeConstraint("created", Operator.GT, "2014-02-25")

完整堆栈跟踪供您参考:

[Fatal Error] :9:102: Character reference "&#17" is an invalid XML character.
Exception in thread "main"
com.marklogic.client.MarkLogicIOException: Could not construct search results: parser error
at com.marklogic.client.io.SearchHandle.receiveContent(SearchHandle.java:160)
at com.marklogic.client.io.SearchHandle.receiveContent(SearchHandle.java:75)
at com.marklogic.client.impl.QueryManagerImpl.search(QueryManagerImpl.java:177)
at com.marklogic.client.impl.QueryManagerImpl.search(QueryManagerImpl.java:140)
at com.marklogic.client.example.tutorial.SearchProperties.main(SearchProperties.java:52)
Caused by: org.xml.sax.SAXParseException: Character reference "&#17" is an invalid XML character.
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at com.marklogic.client.io.SearchHandle.receiveContent(SearchHandle.java:157)
... 4 more

我在数据库的最后修改字段中添加了元素范围索引。 所以请告诉我这个错误的可能原因。谢谢:))

1 个答案:

答案 0 :(得分:1)

堆栈跟踪令人费解。解析搜索响应时会抛出错误,因为找到了非法字符。

如果您使用StringHandle将响应作为字符串获取并打印出来,那么输出可能会为您提供一些有关响应错误的线索。

您还可以打印出从查询构建器获取的结构化查询,以查看Java客户端发送给服务器的内容。

只是为了确认:您是否创建了与约束相对应的查询选项?如果没有,您应该首先创建查询选项,或者直接在元素上使用范围查询,如下所述:

http://docs.marklogic.com/javadoc/client/com/marklogic/client/query/StructuredQueryBuilder.html#range%28com.marklogic.client.query.StructuredQueryBuilder.RangeIndex,%20java.lang.String,%20java.lang.String[],%20com.marklogic.client.query.StructuredQueryBuilder.Operator,%20java.lang.Object...%29

希望有帮助,

Erik Hennum