我正在为Alfresco社区版编写我的第一个支持java的webscript。我正在实现文档属性/预览服务,我采用的参数是相关文档的cmis:objectId。我无法入门,因为我无法根据cmis id访问该文档。
在Web脚本控制器中操作服务器端时,基于cmis:objectId获取文档(NodeRef?)的最佳方法是什么?我看到了Jeff Potts关于如何实现Web脚本的很好的例子,但是Java API和CMIS概念的混合使我陷入困境。我应该只使用搜索服务并根据cmis:objectId属性查找对象吗?任何指针都赞赏。
答案 0 :(得分:1)
嗯,答案有点难看,但希望这对某人有帮助......
使用' opaque'查找NodeRef的好方法。 objectId 应该使用从java支持的Web脚本中的注册表获得的CMISServices,即
docRef = registry.getCMISService().getLatestVersion(docIdStr, false);
不幸的是,Alfresco代码中存在一个错误(或者对我来说似乎是一个新手)。露天的CMISServicesImpl.getLatestVersion()在封面下使用了一个getObject()方法。该方法将objectId String作为参数,然后在最后剥离版本信息(即&#34 ;; 1.0" objectId的一部分),然后检查剩余的字符串是否有效NodeRef。在这样做时,它会根据此模式(在NodeRef.java中)检查它:
private static final Pattern nodeRefPattern = Pattern.compile(".+://.+/.+");
如果验证失败,则会收到CMISInvalidArgumentException,并显示xxxxx"不是对象ID"的消息。
所以,总而言之,当我使用objectId的参数调用web脚本时,这样:
29ea5a16-12a8-497d-aad3-f43969e8a672;1.0
我得到了CMIS例外。但是,如果我使用objectId参数调用该方法,如下所示:
workspace://SpacesStore/29ea5a16-12a8-497d-aad3-f43969e8a672;1.0
...然后," CMIS"查找成功,我得到了我想要的NodeRef。当然,CMIS服务所做的一切都是剥离&#34 ;; 1.0"从对象ID,将其视为NodeRef字符串,并使用它进行查找 换句话说,你不能在4.2中以正确的方式做到这一点。最好的办法是@Gagravarr说并调整你自己的objectId字符串,把它变成NodeRef。希望它已在5.x中修复。