我正在尝试获取Alfresco中存在的文档的内容流。为了达到同样的目的,我首先创建了cmis会话,如下所示(我使用的是CMIS 1.1)
SessionFactory factory = SessionFactoryImpl.newInstance();
Map<String, String> parameter = new HashMap<String, String>();
parameter.put(SessionParameter.ATOMPUB_URL, getAtomPublicURL(getRequestFactory()));
parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
parameter.put(SessionParameter.AUTH_HTTP_BASIC, "true");
parameter.put(SessionParameter.USER, mUserName);
parameter.put(SessionParameter.PASSWORD, mPassword);
List<Repository> repositories = factory.getRepositories(parameter);
cmisSession = repositories.get(0).createSession();
创建会话后,我尝试了两种不同的方法来访问文档
方法1 :(给定Alfresco文档的nodeRef)
String objectId = "f273be7c-9b70-44cf-880f-5945a7857b5d";
CmisObject cmisObject = cmisSession.getObject(objectId);
方法2 :(给定文档的路径)
String objectPath = "/Sites/testSite/documentLibrary/testFolder1/testFolder2/testDocument.pdf";
CmisObject cmisObject = cmisSession.getObjectByPath(objectPath);
注意:testSite是我的文档所在的站点名称。
不幸的是,这两种方法都给我一个CMIS运行时异常
(org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException:内部服务器错误)。
更新: 嘿Jeff我已经在创建文档之后做了REST api调用来添加标签。虽然添加了标签但我觉得它会对文档产生一些锁定。这就是为什么我无法从Alfresco获取Document对象(当我试图获取文档对象给我内部服务器错误时,我在问题中提到)。当我删除标签添加逻辑时,我能够从Alfresco中检索Document对象而没有问题。我的方法是向文档中添加标签
public void setTags(String documentId,ArrayList<String> Tags) throws Exception {
final String methodName = "setTags";
try{
GenericUrl containersUrl = new GenericUrl(getAlfrescoAPIUrl() +
getHomeNetwork() +
mNODES_URL +
documentId +
"/tags");
mLog.debug(containersUrl);
String tagName = "";
String appendTags = "";
for(int index=0;index<Tags.size();index++){
tagName = (String) Tags.get(index);
appendTags = appendTags+"{\"tag\": \""+tagName+"\"}";
if(index < Tags.size()-1){
appendTags = appendTags+",";
}
}
String finalTags = "["+appendTags+"]";
HttpContent body = new ByteArrayContent("application/json", finalTags.getBytes());
HttpRequest request = getRequestFactory().buildPostRequest(containersUrl, body);
try{
request.execute();
}
catch(IOException ioException){
mLog.error("Exception in :: "+mClassName+":: "+methodName+":: "+ioException.getMessage());
throw ioException;
}
}
catch(Exception exception){
mLog.error("Exception in :: "+mClassName+":: "+methodName+":: "+exception.getMessage());
throw exception;
}
}
答案 0 :(得分:1)
看起来您正在使用自定义方法来获取AtomPub网址。你可以输出它,以确保它看起来像这样: http://alfresco.local:8080/alfresco/api/-default-/public/cmis/versions/1.1/atom
此外,您可以转储cmisSession.getRepositoryInfo()。getProductName()和cmisSession.getRepositoryInfo()。getProductVersion()的值,以确保工作正常。我的节目:
Alfresco Community
5.2.0 (re21f2be5-b22)
假设这两个调试步骤都有效,那么您的两种方法都可以在我的机器上显示。
一个小的挑剔是你设置为objectId的值不是CMIS对象ID,而是Alfresco节点ref的一部分(一个完整的nodeRef包括&#34; workspace:// SpacesStore /&#34;)。假设节点实际存在,Alfresco将处理您传入的内容。
检查alfresco日志,看看抛出的异常是什么。该日志位于/opt/alfresco/tomcat/logs/catalina.out。