1

テストには OpenCmisインメモリを使用します。しかし、ドキュメントを作成するときに、versioningState を versioningState.NONE 以外に設定することはできません。

作成されたドキュメントは何らかの方法でバージョン管理できません... http://chemistry.apache.org/java/examples/example-create-update.htmlのコードを使用しました

テスト方法:

public void test() {
    String filename = "test123";
    Folder folder = this.session.getRootFolder();

    // Create a doc
    Map<String, Object> properties = new HashMap<String, Object>();
    properties.put(PropertyIds.OBJECT_TYPE_ID, "cmis:document");
    properties.put(PropertyIds.NAME, filename);
    String docText = "This is a sample document";
    byte[] content = docText.getBytes();
    InputStream stream = new ByteArrayInputStream(content);
    ContentStream contentStream = this.session.getObjectFactory().createContentStream(filename, Long.valueOf(content.length), "text/plain", stream);

    Document doc = folder.createDocument(
            properties,
            contentStream,
            VersioningState.MAJOR);
}

私が得る例外:

org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException: The versioning state flag is imcompatible to the type definition.

私は何が欠けていますか?

4

1 に答える 1

1

その理由が分かった...

次のコードを実行すると、OBJECT_TYPE_ID 'cmis:document' でバージョン管理が許可されていないことがわかりました。

利用可能なすべての OBJECT_TYPE_ID を表示するコード ( source ):

    boolean includePropertyDefintions = true;
      for (t in session.getTypeDescendants(
            null, // start at the top of the tree
            -1, // infinite depth recursion
            includePropertyDefintions // include prop defs
            )) {
         printTypes(t, "");
      }

   static void printTypes(Tree tree, String tab) {          
      ObjectType objType = tree.getItem();
      println(tab + "TYPE:" + objType.getDisplayName() +
            " (" + objType.getDescription() + ")");
      // Print some of the common attributes for this type
      print(tab + " Id:" + objType.getId());                            
      print(" Fileable:" + objType.isFileable());
      print(" Queryable:" + objType.isQueryable());

      if (objType instanceof DocumentType) {                            
         print(" [DOC Attrs->] Versionable:" +
            ((DocumentType)objType).isVersionable());
         print(" Content:" +
            ((DocumentType)objType).getContentStreamAllowed());
      }
      println(""); // end the line
      for (t in tree.getChildren()) {
         // there are more - call self for next level
         printTypes(t, tab + " ");
      }
   }

これにより、次のようなリストが得られました。

TYPE:CMIS Folder (CMIS フォルダータイプの説明) Id:cmis:folder Fileable:true Queryable:true

TYPE:CMIS Document (CMIS Document Type の説明) Id:cmis:document Fileable:true Queryable:true [DOC Attrs->] Versionable:false Content:ALLOWED

TYPE:My Type 1 Level 1 (My Type 1 Level 1 Type の説明)
Id:MyDocType1 Fileable:true Queryable:true [DOC Attrs->] Versionable:false Content:ALLOWED

TYPE:VersionedType (VersionedType タイプの説明)
Id:VersionableType Fileable:true Queryable:true [DOC Attrs->] Versionable:true Content:ALLOWED

ご覧のとおり、最後の OBJECT_TYPE_ID には versionable: true ... があり、それを使用すると機能します。

于 2013-05-23T12:46:26.033 に答える