Icon

This documentation refers to the latest Fast Track version of the Nuxeo Platform (more information about Nuxeo release cycle).
Check if the page exists in the Nuxeo Platform LTS documentation.

Skip to end of metadata
Go to start of metadata

CMIS is the OASIS specification for content management interoperability. It allows client and servers to talk together in HTTP (SOAP or REST/AtomPub) using a unified domain model. The latest published version is CMIS 1.1.

Status

Nuxeo supports CMIS through the following modules:

  • The Apache Chemistry OpenCMIS library, maintained by Nuxeo and others, which is a general-purpose Java library allowing developers to easily write CMIS clients and servers,
  • Specific Nuxeo OpenCMIS connector bundles, allowing Nuxeo to be used as a CMIS server with the help of OpenCMIS.

Versions

The Nuxeo OpenCMIS connector support CMIS 1.1 starting with Nuxeo Platform 5.8.

Online Demo

A demo server has been set up for you to try Nuxeo with CMIS. You can try it here: http://cmis.demo.nuxeo.org/ (login: Administrator / password: Administrator).

The AtomPub service document is here: http://cmis.demo.nuxeo.org/nuxeo/atom/cmis (same credentials).
The SOAP WSDL for the repository service is here: http://cmis.demo.nuxeo.org/nuxeo/webservices/cmis/RepositoryService?wsdl

Downloads

The latest LTS and Fast Track releases include the CMIS connector by default. You can get them from here:
http://www.nuxeo.com/downloads

Usage

Make sure that the Nuxeo server is started: check that there are no ERRORs in the startup logs and that you can normally connect to your server using a browser, at http://localhost:8080/nuxeo.

In this section

 

AtomPub

You can use a CMIS 1.1 AtomPub client and point it at http://localhost:8080/nuxeo/atom/cmis.

If you want to check the AtomPub XML returned using the command line, this can be done using curl or wget:

To do a query you can do:

You should probably pipe this through tidy if you want a readable output:

Icon

Since Nuxeo 5.5 the searchAllVersions=true part is mandatory if you want something equivalent to what you see in Nuxeo (which often contains mostly private working copies).

Icon

In order to fetch custom metadata, you must restrict the selection to document types that contain the metadata. For example, if you have a metadata "custom" in a document type "mytype", then your query would be someting like:

curl -u Administrator:Administrator "http://localhost:8080/nuxeo/atom/cmis/default/query?q=SELECT+cmis:objectId,+mytype:custom+FROM+mytype+&searchAllVersions=true"

SOAP

The following SOAP endpoints are available:

  • http://localhost:8080/nuxeo/webservices/cmis/RepositoryService
  • http://localhost:8080/nuxeo/webservices/cmis/DiscoveryService
  • http://localhost:8080/nuxeo/webservices/cmis/ObjectService
  • http://localhost:8080/nuxeo/webservices/cmis/NavigationService
  • http://localhost:8080/nuxeo/webservices/cmis/VersioningService
  • http://localhost:8080/nuxeo/webservices/cmis/RelationshipService
  • http://localhost:8080/nuxeo/webservices/cmis/MultiFilingService
  • http://localhost:8080/nuxeo/webservices/cmis/ACLService
  • http://localhost:8080/nuxeo/webservices/cmis/PolicyService

Note that most SOAP CMIS clients are configured by using just the first URL (the one about RepositoryService), the others are derived from it by changing the suffix.

Authentication is done using Web Services Security (WSS) UsernameToken.

Here is a working example of a SOAP message to the DiscoveryService:

CMIS Clients

Several free clients for CMIS 1.1 are available.

The best one is the CMIS Workbench, part of OpenCMIS.

And of course you can use the Chemistry libraries to produce your own client (Java, Python, PHP, .NET). Documentation and sample for using OpenCMIS libraries can be found on the OpenCMIS developer wiki with also example code and how-tos.

From Java Code Within a Nuxeo Component

To create, delete or modify documents, folders and relations just use the regular CoreSession API of Nuxeo. To perform CMISQL queries (for instance to be able to perform JOIN that are not supported by the default NXQL query language, have a look at the following entry in the Knowledge Base: How to make CMISQL queries from Nuxeo.

Documentation

You can browse the CMIS 1.1 HTML version or download CMIS 1.1 (PDF) (1.3 MB).

Capabilities

The Nuxeo OpenCMIS connector implements the following capabilities from the specification:

Navigation Capabilities
 

Get descendants supported

Yes

 

Get folder tree supported

Yes

 Order By supportedCustom
Object Capabilities
 Content stream updatesPWC only
 ChangesObject IDs only
 RenditionsRead
Filing Capabilities
 Multifiling supportedNo
 

Unfiling supported

No

 

Version-specific filing supported

No

Versioning Capabilities

 PWC updatableYes
 PWC searchableYes
 All versions searchableYes
Query Capabilities
 

Query

Both combined

 

Joins

Inner and outer

Type Capabilities
 Create property typesNo
 New type settable attributesNone
ACL Capabilities
 

ACLs

None

Model Mapping

The following describes how Nuxeo documents are mapped to CMIS objects and vice versa.

  • Only Nuxeo documents including the "dublincore" schema are visible in CMIS.
  • Complex properties are not visible in CMIS, as this notion does not exist in CMIS.
  • Proxy documents are not visible in CMIS.
  • Secondary content streams are not visible as renditions.
  • Documents in the Nuxeo trash (those whose nuxeo:lifecycleState is deleted) are not visible in CMIS, unless an explicit query using the nuxeo:lifecycleState property is done.

This mapping may change to be more comprehensive in future Nuxeo versions.

Nuxeo-Specific System Properties

In addition to the system properties defined in the CMIS specification under the cmis: prefix, the Nuxeo Platform adds a couple of additional properties under the nuxeo: prefix:

Since Nuxeo 5.4.2

  • nuxeo:isVersion: to distinguish between archived (read-only revision) and live documents (that can be edited);
  • nuxeo:lifecycleState: to access the life cycle state of a document: by default only document in non deleted state will be returned in CMISQL queries unless and explicit nuxeo:lifecycleState predicate is specified in the WHERE clause of the query;
  • nuxeo:secondaryObjectTypeIds: makes it possible to access the facets of a document. Those facet can be static (as defined in the type definitions) or dynamic (each document instance can have declared facets);
  • nuxeo:contentStreamDigest: the low level, MD5 or SHA1 digest of blobs stored in the repository. The algorithm used to compute the digest is dependent on the configuration of the BinaryManager component of the Nuxeo repository.

nuxeo:isVersion, nuxeo:lifecycleState and nuxeo:secondaryObjectTypeIds are properties that can be queried upon: they can be used in the WHERE clause of a CMISQL query. This is not yet the case for nuxeo:contentStreamDigest that can only be read in query results or by introspecting the properties of the ObjectData description of a document.

Since Nuxeo 5.5

  • nuxeo:isCheckedIn: for live documents, distinguishes between the checked-in and checked-out state.
  • nuxeo:parentId: like cmis:parentId but also available on Document objects (which is possible because Nuxeo does not have direct multi-filing).

Since Nuxeo 5.6

  • nuxeo:pathSegment: the last path segment of the document (ecm:name in NXQL).

Source Code

The Nuxeo OpenCMIS connector source code is available on GitHub: https://github.com/nuxeo/nuxeo-chemistry.

The Apache Chemistry OpenCMIS source code is available on Apache's Subversion server: https://svn.apache.org/repos/asf/chemistry/opencmis/trunk.

Additional Resources