我正在编写一个基于OpenCMIS的应用程序,它从Alfresco 3.3中提取一些数据。
适用于标准 CMIS属性,例如cmis:name
或cmis:contentStreamMimeType
;但是,我无法访问Alfresco特定属性,这些属性在CMIS AtomPub提要中显示为“Alfresco扩展”:
<cmisra:object>
<cmis:properties>
<cmis:propertyString propertyDefinitionId="cmis:name" displayName="Name" queryName="cmis:name">
<cmis:value>test document</cmis:value>
</cmis:propertyString>
<cmis:propertyString propertyDefinitionId="cmis:contentStreamMimeType" displayName="Content Stream MIME Type" queryName="cmis:contentStreamMimeType">
<cmis:value>text/html</cmis:value>
</cmis:propertyString>
...
<alf:aspects>
...
<alf:properties>
<cmis:propertyString propertyDefinitionId="cm:description" displayName="Description" queryName="cm:description">
<cmis:value>This is just a test document</cmis:value>
</cmis:propertyString>
</alf:properties>
</alf:aspects>
</cmis:properties>
</cmisra:object>
使用OpenCMIS,我有什么方法可以获得cm:descripcion
的价值?
我的猜测是我需要使用DocumentType
界面而不是Document
,然后调用其getExtensions()
方法。但我不知道如何获取DocumentType的实例。
任何帮助都会非常感激。
此致
编辑:尽管弗洛里安的答案已经解决了,我刚刚意识到我也可以用CMIS SQL获取这些属性的值:
select d.*, t.*, a.*
from cmis:document d
join cm:titled t on d.cmis:objectid = t.cmis:objectid
join cm:author a on d.cmis:objectid = a.cmis:objectid
where t.cm:description like ...
答案 0 :(得分:3)
我担心OpenCMIS高级API无法访问所有扩展。这是我们的待办事项清单。目前,您必须使用低级API。 这样的事情应该有效:
ObjectData doc = session.getBinding().getObjectService().getObject(...);
org.w3c.dom.Node domNode = (org.w3c.dom.Node) doc.getProperties().getExtensions().get(0); // <alf:aspects>
domNode.getFirstChild() ...