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 is CMIS 1.0 Committee Specification 01.
Outline of this document:
- Online demo
- Model mapping
- Nuxeo specific System Properties
- Source Code
- Additional Resources
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.
The Nuxeo OpenCMIS connector supports the full CMIS 1.0 starting with Nuxeo EP 5.4. (A previous version of the connector based on an earlier version of Apache Chemistry backend has been included by default in Nuxeo DM since Nuxeo EP 5.3.1.)
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
Nuxeo DM release
The Nuxeo DM 5.4 release includes the CMIS connector by default. You can get it from here:
Nuxeo Core Server release
We're now also providing an extra lightweight packaging of a Nuxeo repository that only includes CMIS access to the repository (no web UI at all).
You can grab it here: http://www.nuxeo.com/en/downloads/download-ep-form
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
You can use a CMIS 1.0 AtomPub client and point it at
If you want to check the AtomPub XML returned using the command line, this can be done using
To do a query you can do:
You should probably pipe this through
tidy if you want a readable output:
The above AtomPub URLs are correct for Nuxeo EP 5.4, but note that previous versions of Nuxeo (5.3.1 and 5.3.2) used different URLs (
Since Nuxeo 5.5 the
The following SOAP endpoints are available:
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:
Several free clients for CMIS 1.0 are available.
The best one is the CMIS Workbench, part of OpenCMIS.
Other older clients are available:
- http://code.google.com/p/cmisspaces/ is an Adobe AIR client (you will need to change the cmisUrl parameter in the file
CMISSpacesConfig.xmlto point it to your Nuxeo server),
- http://code.google.com/p/cmis-explorer/ is another Adobe AIR client,
A command-line shell is also available:
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 howtos.
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.
The Nuxeo OpenCMIS connector implements the following capabilities from the specification (in Nuxeo 5.4.2):
Get descendants supported
Get folder tree supported
Version-specific filing supported
Inner and outer
All versions searchable
Content stream updates
Object IDs only
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 (as of 5.4.1).
- Secondary content streams are not visible as renditions (as of 5.4.1).
- Documents in the Nuxeo trash (those whose
deleted) are not visible in CMIS, unless an explicit query using the
nuxeo:lifecycleStateproperty 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, Nuxeo EP adds a couple of additional properties under the
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 lifecycle state of a document: by default only document in non
deletedstate will be returned in CMISQL queries unless and explicit
nuxeo:lifecycleStatepredicate is specified in the
WHEREclause 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
BinaryManagercomponent of the Nuxeo repository.
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.
cmis:parentIdbut 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 (
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.