Page Tree:

Child pages
  • CI Hub Service Contract Description - v0.9-alpha

This wiki space contains archival documentation of Project Bamboo, April 2008 - March 2013.

Skip to end of metadata
Go to start of metadata

Brief description

The Collection Interoperability (CI) Hub is an extended version of the Apache Chemistry OpenCMIS FileShare Repository. The Apache Chemistry OpenCMIS is typically deployed as a web application. Deploying the CI-Hub on the Bamboo Services Platform (BSP) required separating HTTP request processing and core service functionality into separate OSGi bundles functioning as BSP Resources Oriented Architecture (ROA) layer and Service Oriented Architecture (SOA) layer respectively.

See Collection Interoperability Hub (CI Hub) architecture and implementation for architectural and implementation detail.


This page describes the Collection Interoperability (CI) Hub service API, version 0.9

To discover the version and other metadata about deployed service code that fulfills this API, please utilize the Service Catalog Service.




The CI-Hub ROA layer defines a resource, exposing the OpenCMIS AtomPub binding. The ROA API, then is defined by the Restful AtomPub Binding of the OASIS CMIS Standard. Its specific URL syntax is defined by Apache Chemistry URLs for AtomPub documentation.

In addition to the above-referenced documentation, developers of clients to the CI Hub service may wish to study the Repository Browser client implemented by team members during the course of the Bamboo Technology Project. The code for this client is located in the Project Bamboo code repository at this directory location relative to the repository root: /work-space-drupal/repository_browser/ (at this location on Sourceforge). Description and webcasts of the usage of this client can be found on the wiki page User Experience - Repository Browser - Local Fedora Objects.

Note that the Repository Browser is implemented to interact with objects modeled as Bamboo Books (bamboo:book), cf. Bamboo Book Model - Context and Design.

The Repository Browser interacts with the Collections Interoperability Hub through the CMIS interface as implemented by the Apache Chemistry project, referenced above, and uses Chemistry’s PHP client. The CI Hub (and the local-to-client object repository, with which the Repository Browser also interacts via CMIS) use(es) the Chemistry project’s Java implementation of a CMIS server.

To assist client developers in exploring the Repository Browser codebase, here are several of the most common operations the implemented client performs, and how these operations are expressed in CMIS. GET and POST in the list below are HTTP verbs.  We do not show sample URLs: Chemistry’s CMIS implementation is bound to AtomPub; the interaction between the Repository Browser and the CI Hub is therefore working at a level several layers higher than the URL.

  • GET an object with a known identifier.  Assuming the object exists and is successfully returned in response, the client inspects the object to determine its type. For objects of a type inherited from cmis:folder such as bamboo:book, we can request the children of the object. For objects of a type inherited from cmis:document as bamboo:page-document, we can request the document’s content stream. For both classes of objects, we can inspect its properties to read its metadata.
  • GET a list of the children or descendants of a folder. Assume that the folder is of type bamboo:book and the client has requested descendents. The result of our request should be an unordered list of bamboo:page objects. Page number is a property of a bamboo:page; the list can be sorted locally to obtain a naturally ordered list of pages. bamboo:page inherits from cmis:folder. The children of a bamboo:page are subclassed from bamboo:page-document or correspond to the available manifestations of the page, e.g. HTML, TEI, page image, and so on.
  • GET the content stream of an object. The client requests the content stream of a bamboo:page-document, e.g. bamboo:page-image, as needed for display or some other purpose.
  • GET a list of a object’s parents. The client can request an object’s parents. This is useful when a user has requested an object that is part of bamboo:book and then wishes to learn which book is the object's parent.
  • POST a document. A Zotero bookmark file can be submitted to the CI Hub in order to request that an book be retrieved from an repository and normalized to a bamboo:book (described, and demonstrated in a webcast, on the wiki page User Experience - Repository Browser - Local Fedora Objects). Submission of the Zotero bookmark file is done by POSTing the document. A cmis:document is created, metadata is attached to it – title is set to the document’s name, for example – and the file’s content is included with the POST at its content stream.


The CI-Hub SOA layer defines a single method which is used to obtain an object supporting the CmisService interface. The  implementation CI-Hub provides is an override to the Apache Chemistry FileShareService class, which implements all the CMIS Service methods as defined in the OASIS CMIS Standard.

See Javadoc.