我想通过nuxeo 8.10从Java应用程序获取具有“动态”属性的请求。
我的NuxeoDocument声明如下:
<schema name="TestDocumentProperties" src="data/TestDocumentProperties.xsd" prefix="test" />
<doctype name="TestDocument" extends="Document">
<schema name="dublincore"/>
<schema name="TestDocumentProperties"/>
</doctype>
有模式:
<xs:schema ...>
<xs:element name="summary" type="xs:string"/>
<xs:element name="content" type="xs:string"/>
</xs:schema>
我的Nuxeo服务器有一个“获取”请求:
https:xxx/nuxeo/site/api/v1/search/lang/NXQL/execute?query=SELECT * FROM Document WHERE ecm:fulltext = 'test'&properties=TestDocumentProperties, dublincore
当我直接从浏览器执行此请求时,结果包含“ dublincore”和“ TestDocumentProperties”的所有属性:
{
"entity-type": "document",
"type": "TestDocument",
...
"properties": {
"test:summary": "test text to search in summary",
"test:content": "test text to search in content",
"dc:description": null,
"dc:language": null,
"dc:coverage": null,
"dc:valid": null,
"dc:creator": "xxx",
"dc:modified": "2017-12-13T16:28:38.44Z",
...
},...
}
因此,我想使用相同的参数从我的Java应用程序执行nuxeo nxql请求。
在此之前,我只执行来自Java应用程序的请求,而没有使用以下代码的“ properties”参数:
return this.nuxeoClient.repository().query("SELECT * FROM Document WHERE ecm:fulltext = 'test'");
但是,通过存储库中的“查询”方法,无法指定要获取的属性。因此,今天,我尝试使用以下代码:
Map<String, Object> parameters = new HashMap<>();
parameters.put("query", "SELECT * FROM Document WHERE ecm:fulltext = 'test'");
parameters.put("properties", "TestDocumentProperties, dublincore");
return this.nuxeoClient.automation("Repository.Query").parameters(parameters).execute();
不幸的是,结果无法正确获取,我的响应中没有“ dublincore”属性,但有“ TestDocumentProperties”。如果删除获取属性参数列表中的“ TestDocumentProperties”,则响应没有任何变化。
您可以帮助我更正此代码或指示我替代方法吗?
谢谢
最佳答案
根据nuxeo doc,您可以使用setHeader(Constants.HEADER_NX_SCHEMAS方法选择返回的架构:
return this.nuxeoClient.setHeader(Constants.HEADER_NX_SCHEMAS, "TestDocumentProperties,dublincore").automation("Repository.Query").parameters(parameters).execute();
对于属性。如果我没记错的话,可以设置特定的属性以返回:
parameters.put("properties", "dc:title,dc:description");
也许您需要这样做:
import org.nuxeo.ecm.automation.client.model.Document;
// Instantiate a new Document with the simple constructor
Document document = new Document("myDocument", "File");
document.set("dc:title", "My File");
document.set("dc:description", "My Description");
parameters.put("properties", document);
我不确定后者,希望对您有所帮助。