OpenCMIS Client API
The OpenCMIS Client API is under development and not working yet.
You can check the OpenCMIS Commons JavaDoc and OpenCMIS Client API JavaDoc for a first impression.
...
Info | ||
---|---|---|
| ||
|
The OpenCMIS client layer provides an object oriented interface for easy consumption of the underlying CMIS related layers. In addition to the CMIS specification the OpenCMIS client layer introduces a session concept which easily enables applications to get control on the client side cache behavior.
The client layer consists of a client interface, common interfaces and a runtime implementation. The runtime maps the client interface to the bindings layer and implements the session cache. All parts are exposed by following packages:
Package | Artifact | Description |
---|---|---|
org.apache.chemistry.opencmis.client.api | chemistry-opencmis-client-api | Main interfaces of the client API |
org.apache.chemistry.opencmis.commons.api | chemistry-opencmis-commons-api | Interfaces and classes shared by client and client bindings API |
org.apache.chemistry.opencmis.client.runtime | chemistry-opencmis-client-impl | Implementation classes of client API including a default implementation of the SessionFactory |
The following UML diagram illustrates the main classes of the client API:
- SessionFactory This interface provides the entry point into the client API and is responsible to create a session object. Additionally it gives access to all repository info exposed by a CMIS client binding. The runtime provides a default implementation for the SessionFactory interface.
- Session This is the main interface an application has to work with. A session object is related to a CMIS service client binding and is attached to exact one repository. All data that is received through the session interface can be cached in the session object in dependency of the concrete implementation which is behind.
- Repository Wrapper interface for the CMIS RepositoryInfo service.
- CmisObject The CmisObject interface represents the CMIS domain object.
- ObjectType This interface is base for all CMIS domain types like FolderType, DocumentType, PolicyType and RelationshipType. The derived interfaces are not shown in the diagram.
- Folder This interface represents the CMIS folder object.
- Document This interface represents the CMIS document object.
- ContentStream this interface wraps the content stream of a CMIS document.
- Policy This interface represents the CMIS policy object.
- Relationship This interface represents the CMIS relationship object.
Sessions
OpenCMIS' central entry point to a CMIS repository is a session. A session controls settings and caches that used across multiple calls and provides access to all CMIS operations and objects.
In order to create a session, the SessionFactory needs a set parameters (see OpenCMIS Session Parameters).
Example Code
Session Creation - AtomPub Binding
Code Block | ||
---|---|---|
| ||
// default factory implementation of client runtime
SessionFactory f = SessionFactoryImpl.newInstance();
Map<String, String> parameter = new HashMap<String, String>();
// user credentials
parameter.put(SessionParameter.USER, "Otto");
parameter.put(SessionParameter.PASSWORD, "****");
// connection settings
parameter.put(SessionParameter.ATOMPUB_URL, "http://<host>:<port>/cmis/atom");
parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
parameter.put(SessionParameter.REPOSITORY_ID, "myRepository");
// session locale
parameter.put(SessionParameter.LOCALE_ISO3166_COUNTRY, "");
parameter.put(SessionParameter.LOCALE_ISO639_LANGUAGE, "de");
// create session
Session s = f.createSession(parameter);
|
Session Creation - Web Services Binding
Code Block | ||
---|---|---|
| ||
// default factory implementation of client runtime
SessionFactory f = SessionFactoryImpl.newInstance();
Map<String, String> parameter = new HashMap<String, String>();
// user credentials
parameter.put(SessionParameter.USER, "Otto");
parameter.put(SessionParameter.PASSWORD, "****");
// connection settings
parameter.put(SessionParameter.BINDING_TYPE, BindingType.WEBSERVICES.value());
parameter.put(SessionParameter.REPOSITORY_ID, "myRepository");
parameter.put(SessionParameter.WEBSERVICES_ACL_SERVICE, "http://<host>:<port>/cmis/services/ACLService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_DISCOVERY_SERVICE, "http://<host>:<port>/cmis/services/DiscoveryService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_MULTIFILING_SERVICE, "http://<host>:<port>/cmis/services/MultiFilingService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_NAVIGATION_SERVICE, "http://<host>:<port>/cmis/services/NavigationService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_OBJECT_SERVICE, "http://<host>:<port>/cmis/services/ObjectService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_POLICY_SERVICE, "http://<host>:<port>/cmis/services/PolicyService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_RELATIONSHIP_SERVICE, "http://<host>:<port>/cmis/services/RelationshipService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_REPOSITORY_SERVICE, "http://<host>:<port>/cmis/services/RepositoryService?wsdl");
parameter.put(SessionParameter.WEBSERVICES_VERSIONING_SERVICE, "http://<host>:<port>/cmis/services/VersioningService?wsdl");
// session locale
parameter.put(SessionParameter.LOCALE_ISO3166_COUNTRY, "");
parameter.put(SessionParameter.LOCALE_ISO639_LANGUAGE, "de");
parameter.put(SessionParameter.LOCALE_VARIANT, "");
// create session
Session s = f.createSession(parameter);
|
Reading Objects - Root Collection
Code Block | ||
---|---|---|
| ||
Folder root = this.session.getRootFolder();
ItemIterable<CmisObject> pl = root.getChildren();
for (CmisObject o : pl) {
System.out.println(o.getName());
}
|
Reading Properties - Single Property
Code Block | ||
---|---|---|
| ||
ObjectId id = this.session.createObjectId("4711");
Document document = (Document) this.session.getObject(id);
Property<String> p = document.getProperty(PropertyIds.OBJECT_ID);
String s = p.getValue();
|
Reading Properties - All Properties
Code Block | ||
---|---|---|
| ||
ObjectId id = this.session.createObjectId("4711");
Document document = (Document) this.session.getObject(id);
List<Property<?>> l = document.getProperties();
Iterator<Property<?>> i = l.iterator();
while (i.hasNext()) {
Property<?> p = i.next();
Object value = p.getValue();
PropertyType t = p.getType();
switch (t) {
case INTEGER:
Integer n = (Integer) value;
System.out.println(p.getName() + " = " + n);
break;
case STRING:
[...]
}
|