CMIS版本控制无法按预期工作

时间:2015-07-08 21:51:19

标签: java versioning cmis

我使用以下代码使用CMIS API在我的文档服务上创建文件:

zipMapFile.put(PropertyIds.OBJECT_TYPE_ID, "sap:versioned");
zipMapFile.put(PropertyIds.NAME, "g" + g.getId() + ".zip");
Document versionedDocument = openCmisSession.getRootFolder().createDocument(zipMapFile, contentStream, VersioningState.MAJOR);
newZipFileId = versionedDocument.checkOut();
...

上面的代码正常工作,正在生成文件。当我运行以下代码时:

cmisSession.getObject(newZipFileId.getId());

我得到之前创建的文件,没有错误。

但是,当我尝试为此文件上传新版本时,我遇到了问题。

为此,我使用以下代码:

oldZipFileId = newZipFileId;
Document pwc = (Document) cmisSession.getObject(oldZipFileId);
pwc.setContentStream(contentStream, true);
newZipFileId = pwc.checkIn(false, null, null, null);

每当我执行此操作时,我都可以访问较新的版本,而无需运行以下代码:

cmisSession.getObject(newZipFileId.getId());

但是,我无法再访问旧版本了!如果我试着跑:

cmisSession.getObject(oldZipFileId);

我得到 CmisObjectNotFoundException

我失去对旧版本的访问权的那一刻正好是执行方法pwc.checkIn(false, null, null, null);的时候。在调用之后,尝试获取oldZipId引用的对象会给我一个CmisObjectNotFoundException。

我使用的是MongoDB。

任何帮助表示赞赏!谢谢!

3 个答案:

答案 0 :(得分:2)

工作代码应如下所示:

Document versionedDocument = openCmisSession.getRootFolder().createDocument(zipMapFile, contentStream, VersioningState.MAJOR);
oldZipFileId = versionedDocument.getId();

newZipFileId = versionedDocument.checkOut();
Document pwc = (Document) cmisSession.getObject(newZipFileId);
pwc.setContentStream(contentStream, true);
newZipFileId = pwc.checkIn(false, null, null, null);

// access last version
cmisSession.getObject(newZipFileId.getId());

// access old version
cmisSession.getObject(oldZipFileId);

答案 1 :(得分:1)

虽然我不是HCP文档服务版本的专家,但您编写的所有内容都是按照设计的AFAIK工作的。当你检查一个pwc时会有一个新的实际版本(历史上的最新版本),并且pwc消失了。因此,识别pwc的oldZipFileId变为无效。 pwc变成的新实际版本获得了新的对象id。这似乎正是你所观察到的。

答案 2 :(得分:0)

查看旧版本是否在document.getAllVersions()中。