SOAP
OpenKM has a limited API exposed via REST. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.
Java samples
Section titled “Java samples”Create the client stuff:
$ wsimport -p com.openkm.ws.client -keep http://localhost:8080/OpenKM/services/OKMAuth?wsdlYou can use the following script to generate a complete OpenKM webservices client library:
wsimport -p com.openkm.ws.client.auth -keep http://localhost:8080/OpenKM/services/OKMAuth?wsdlwsimport -p com.openkm.ws.client.bookmark -keep http://localhost:8080/OpenKM/services/OKMBookmark?wsdlwsimport -p com.openkm.ws.client.document -keep http://localhost:8080/OpenKM/services/OKMDocument?wsdlwsimport -p com.openkm.ws.client.folder -keep http://localhost:8080/OpenKM/services/OKMFolder?wsdlwsimport -p com.openkm.ws.client.mail -keep http://localhost:8080/OpenKM/services/OKMMail?wsdlwsimport -p com.openkm.ws.client.note -keep http://localhost:8080/OpenKM/services/OKMNote?wsdlwsimport -p com.openkm.ws.client.notification -keep http://localhost:8080/OpenKM/services/OKMNotification?wsdlwsimport -p com.openkm.ws.client.propertyGroup -keep http://localhost:8080/OpenKM/services/OKMPropertyGroup?wsdlwsimport -p com.openkm.ws.client.property -keep http://localhost:8080/OpenKM/services/OKMProperty?wsdlwsimport -p com.openkm.ws.client.repository -keep http://localhost:8080/OpenKM/services/OKMRepository?wsdlwsimport -p com.openkm.ws.client.search -keep http://localhost:8080/OpenKM/services/OKMSearch?wsdlwsimport -p com.openkm.ws.client.workflow -keep http://localhost:8080/OpenKM/services/OKMWorkflow?wsdl
jar cvf okm-ws-client-6.2.jar com
rm -rf comChange address dynamically from a request
Section titled “Change address dynamically from a request”OKMAuth okmAuth = new OKMAuth_Service(new URL(url + "/services/OKMAuth?wsdl"), new QName("http://ws.openkm.com", "OKMAuth")).getOKMAuthPort();or
((BindingProvider) port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "192.168.1.64");Authentication
Section titled “Authentication”package com.openkm.ws.test;
import com.openkm.ws.client.auth.OKMAuth;import com.openkm.ws.client.auth.OKMAuth_Service;
public class Authentication { public static void main(String[] args) { try { OKMAuth okmAuth = new OKMAuth_Service().getOKMAuthPort();
// Login String token = okmAuth.login("okmAdmin", "admin"); System.out.println("Token: " + token);
// Logout okmAuth.logout(token); } catch (Exception e) { e.printStackTrace(); } }}Metadata groups
Section titled “Metadata groups”package com.openkm.ws.test;
import java.util.ArrayList;import java.util.List;
import com.openkm.ws.client.auth.OKMAuth;import com.openkm.ws.client.auth.OKMAuth_Service;import com.openkm.ws.client.PropertyGroup;import com.openkm.ws.client.PropertyGroup_Service;import com.openkm.ws.client.StringPair;
public class PropertyGroups { public static void main(String[] args) throws Exception { OKMAuth okmAuth = new OKMAuth_Service().getOKMAuthPort(); OKMPropertyGroup okmPg = new OKMPropertyGroup_Service().getOKMPropertyGroupPort();
// login String token = okmAuth.login("okmAdmin", "admin");
// property groups List<StringPair> spList = new ArrayList<StringPair>(); StringPair sp = new StringPair(); sp.setKey("okp:technology.comment"); sp.setValue("Other comment from PHP"); spList.add(sp); okmPg.setPropertiesSimple(token, "/okm:root/test/hosts.txt", "okg:technology", spList);
// logout okmAuth.logout(token); }}Create a single webservice
Section titled “Create a single webservice”$ wsdl.exe http://localhost:8080/OpenKM/services/OKMAuth?wsdl /out:AuthService.csCreate all webservices in one library package
Section titled “Create all webservices in one library package ”Create file called openkm.wsdl with contents:
<wsdlParameters xmlns="http://microsoft.com/webReference/"> <nologo>true</nologo> <parsableerrors>true</parsableerrors> <sharetypes>true</sharetypes> <documents> <document>http://localhost:8080/OpenKM/services/OKMAuth?wsdl</document> <document>http://localhost:8080/OpenKM/services/OKMBookmark?wsdl</document> <document>http://localhost:8080/OpenKM/services/OKMDocument?wsdl</document> <document>http://localhost:8080/OpenKM/services/OKMFolder?wsdl</document> <document>http://localhost:8080/OpenKM/services/OKMMail?wsdl</document> <document>http://localhost:8080/OpenKM/services/OKMNote?wsdl</document> <document>http://localhost:8080/OpenKM/services/OKMNotification?wsdl</document> <document>http://localhost:8080/OpenKM/services/OKMPropertyGroup?wsdl</document> <document>http://localhost:8080/OpenKM/services/OKMProperty?wsdl</document> <document>http://localhost:8080/OpenKM/services/OKMRepository?wsdl</document> <document>http://localhost:8080/OpenKM/services/OKMSearch?wsdl</document> <document>http://localhost:8080/OpenKM/services/OKMWorkflow?wsdl</document> <document>http://localhost:8080/OpenKM/services/OKMDashboard?wsdl</document> </documents> <webReferenceOptions> <verbose>false</verbose> <codeGenerationOptions>properties newAsync enableDataBinding</codeGenerationOptions> <style>client</style> </webReferenceOptions></wsdlParameters>Execute the command:
$ wsdl.exe /par:openkm.wsdl /out:Webservice.cs /n:OpenKM.wsWill be create a file named Webservice.cs with namespace OpenKM.ws into.
Suggested changes in generated classes
Section titled “Suggested changes in generated classes”Pay attention in public AuthService class ( like others ), it’ll be generated some AuthService() constructor that you should like to change to take advantatge of host variable:
public AuthService() { this.Url = http://127.0.0.1:8080/OpenKM/services/OKMAuth;}change to (or create another method with this parameter):
public AuthService(String host) { this.Url = host + "/OKMAuth";}Remote method info
Section titled “Remote method info”<?php // Register WSDL $OKMAuth = new SoapClient('http://localhost:8080/OpenKM/services/OKMAuth?wsdl');
// Disable WSDL cache ini_set('soap.wsdl_cache_enabled', 0); ini_set('soap.wsdl_cache_ttl', 0); ini_set('soap.wsdl_cache', 0);
echo "<br>**** FUNCTIONS ****<br>"; foreach ($OKMAuth->__getFunctions() as $function) { echo $function."<br>"; }
echo "<br>**** TYPES ****<br>"; foreach ($OKMAuth->__getTypes() as $types) { echo $types."<br>"; }?>Authentication
Section titled “Authentication”<?php // Register WSDL $OKMAuth = new SoapClient('http://localhost:8080/OpenKM/services/OKMAuth?wsdl');
// Login $loginResp = $OKMAuth->login(array('user' => 'okmAdmin', 'password' => 'admin')); $token = $loginResp->return; echo "Token: ".$token;
// Logout $OKMAuth->logout(array('token' => $token));?>List folders and documents
Section titled “List folders and documents”<?php function printFolder($folder) { echo "[FOLDER] Path: ".$folder->path.", Author: ".$folder->author."<br>"; }
function printDocument($document) { echo "[DOCUMENT] Path: ".$document->path.", Author: ".$document->author.", Size: ".$document->actualVersion->size."<br>"; }
// Register WSDL $OKMAuth = new SoapClient('http://localhost:8080/OpenKM/services/OKMAuth?wsdl'); $OKMDocument = new SoapClient('http://localhost:8080/OpenKM/services/OKMDocument?wsdl'); $OKMFolder = new SoapClient('http://localhost:8080/OpenKM/services/OKMFolder?wsdl'); $path = '/okm:root';
// Login $loginResp = $OKMAuth->login(array('user' => 'okmAdmin', 'password' => 'admin')); $token = $loginResp->return; echo "Token: ".$token."<br>"; echo "Path: ".$path."<br>";
// List folders $getChildrenResp = $OKMFolder->getChildren(array('token' => $token, 'fldId' => $path)); if (isset($getChildrenResp->return)) { $folderArray = $getChildrenResp->return;
if ($folderArray) { if (is_array($folderArray)) { foreach ($folderArray as $folder) { printFolder($folder); } } else { printFolder($folderArray); } } }
// List documents $getChildrenResp = $OKMDocument->getChildren(array('token' => $token, 'dstId' => $path)); if (isset($getChildrenResp->return)) { $documentArray = $getChildrenResp->return;
if ($documentArray) { if (is_array($documentArray)) { foreach ($documentArray as $document) { printDocument($document); } } else { printDocument($documentArray); } } }
// Logout $OKMAuth->logout(array('token' => $token));?>Create document
Section titled “Create document”<?php // Register WSDL $OKMAuth = new SoapClient('http://localhost:8080/OpenKM/services/OKMAuth?wsdl'); $OKMDocument = new SoapClient('http://localhost:8080/OpenKM/services/OKMDocument?wsdl'); $file = '/etc/hosts';
// Login $loginResp = $OKMAuth->login(array('user' => 'okmAdmin', 'password' => 'admin')); $token = $loginResp->return; echo "Token: ".$token."<br>";
// Create document $doc = array('path' => '/okm:root/hosts.txt', 'mimeType' => null, 'actualVersion' => null, 'author' => null, 'checkedOut' => false, 'created' => null, 'keywords' => 'test', 'language' => null, 'lastModified' => null, 'lockInfo' => null, 'locked' => false, 'permissions' => 0, 'size' => 0, 'subscribed' => false, 'uuid' => null, 'convertibleToPdf' => false, 'convertibleToSwf' => false, 'compactable' => false, 'training' => false, 'convertibleToDxf' => false, 'signed' => false, 'cipherName' => null, 'subscriptors'=>null, 'title'=>null, 'description'=>null, 'categories'=>null, 'notes'=>null);
$createResp = $OKMDocument->create(array('token' => $token, 'doc' => $doc, 'content' => file_get_contents($file))); $newDoc = $createResp->return; echo "[DOCUMENT] Path: ".$newDoc->path.", Author: ".$newDoc->author.", Size: ".$newDoc->actualVersion->size."<br>";
// Logout $OKMAuth->logout(array('token' => $token));?>Create document and set a category
Section titled “Create document and set a category”<?php // Register WSDL $OKMAuth = new SoapClient('http://localhost:8080/OpenKM/services/OKMAuth?wsdl'); $OKMDocument = new SoapClient('http://localhost:8080/OpenKM/services/OKMDocument?wsdl'); $OKMProperty = new SoapClient('http://localhost:8080/OpenKM/services/OKMProperty?wsdl'); $OKMRepository = new SoapClient('http://localhost:8080/OpenKM/services/OKMRepository?wsdl'); $file = '/etc/hosts';
// Login $loginResp = $OKMAuth->login(array('user' => 'okmAdmin', 'password' => 'admin')); $token = $loginResp->return; echo "Token: ".$token."<br>";
// Create document $createResp = $OKMDocument->createSimple(array('token' => $token, 'docPath' => '/okm:root/hosts.txt', 'content' => file_get_contents($file))); $newDoc = $createResp->return; echo "[DOCUMENT] Path: ".$newDoc->path.", Author: ".$newDoc->author.", Size: ".$newDoc->actualVersion->size."<br>";
// Category assign $getNodeUuid = $OKMRepository->getNodeUuid(array('token' => $token, 'path' => '/okm:categories/invoice')); $catId = $getNodeUuid->return; $OKMProperty->addCategory(array('token' => $token, 'nodeId' => $newDoc->path, 'catId' => $catId));
// Logout $OKMAuth->logout($token);?>Search by content
Section titled “Search by content”<?php // Register WSDL $OKMAuth = new SoapClient('http://localhost:8080/OpenKM/services/OKMAuth?wsdl'); $OKMSearch = new SoapClient('http://localhost:8080/OpenKM/services/OKMSearch?wsdl');
// Login $loginResp = $OKMAuth->login(array('user' => 'okmAdmin', 'password' => 'admin')); $token = $loginResp->return; echo "Token: ".$token."<br>";
$findByContentResp = $OKMSearch->findByContent(array('token' => $token, 'content' => 'test')); if (isset($getChildrenResp->return)) { $queryResultArray = $findByContentResp->return;
if ($queryResultArray) { if (is_array($queryResultArray)) { foreach ($queryResultArray as $queryResult) { echo "-> ".$queryResult->document->path." (".$queryResult->score.")<br>"; } } else { echo "-> ".$queryResultArray->document->path." (".$queryResultArray->score.")<br>"; } } }
// Logout $OKMAuth->logout(array('token' => $token));?>Search with parameters
Section titled “Search with parameters”<?php // Register WSDL $OKMAuth = new SoapClient('http://localhost:8080/OpenKM/services/OKMAuth?wsdl'); $OKMSearch = new SoapClient('http://localhost:8080/OpenKM/services/OKMSearch?wsdl');
// Login $loginResp = $OKMAuth->login(array('user' => 'okmAdmin', 'password' => 'admin')); $token = $loginResp->return; echo "Token: ".$token."<br>\n";
$qp = new QueryParams(); $qp->domain = 1; // DOCUMENT = 1; FOLDER = 2; MAIL = 4; DOCUMENT & FOLDER = 3; etc.. $qp->content = 'test'; $findResp = $OKMSearch->find(array('token' => $token, 'params' => $qp)); if (isset($getChildrenResp->return)) { $queryResultArray = $findResp->return;
if ($queryResultArray) { if (is_array($queryResultArray)) { foreach ($queryResultArray as $queryResult) { echo "-> ".$queryResult->document->path." (".$queryResult->score.")<br>\n"; } } else { echo "-> ".$queryResultArray->document->path." (".$queryResultArray->score.")<br>"; } } }
// Logout $OKMAuth->logout(array('token' => $token));
class QueryParams { var $content = ''; var $dashboard = false; var $domain = 0; var $id = 0; var $properties = array(); }?>Set metadata group values
Section titled “Set metadata group values”The metadata group definition used:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE property-groups PUBLIC "-//OpenKM//DTD Property Groups 2.0//EN" "http://www.openkm.com/dtd/property-groups-2.0.dtd"><property-groups> <property-group label="Technology" name="okg:technology"> <select label="Type" name="okp:technology.type" type="multiple"> <option label="Alfa" value="t1"/> <option label="Beta" value="t2" /> <option label="Omega" value="t3" /> </select> <select label="Language" name="okp:technology.language" type="simple"> <option label="Java" value="java"/> <option label="Python" value="python"/> <option label="PHP" value="php" /> </select> <input label="Comment" name="okp:technology.comment"/> <textarea label="Description" name="okp:technology.description"/> <input label="Link" type="link" name="okp:technology.link"/> </property-group></property-groups><?php $OKMAuth = new SoapClient('http://localhost:8080/OpenKM/services/OKMAuth?wsdl'); $OKMPropertyGroup = new SoapClient('http://localhost:8080/OpenKM/services/OKMPropertyGroup?wsdl');
$loginResp = $OKMAuth->login(array('user' => 'okmAdmin', 'password' => 'admin')); $token = $loginResp->return; echo "Token: ".$token;
$docPath = "/okm:root/hosts.txt"; $entry['key'] = 'okp:technology.comment'; $entry['value'] = 'Other comment from PHP 3'; $properties = array($entry); $OKMPropertyGroup->setPropertiesSimple(array('token' => $token, 'nodeId' => $docPath, 'grpName' => 'okg:technology', 'properties' => $properties)); $OKMAuth->logout($token);?>Exception handling
Section titled “Exception handling”<?php // Register WSDL $OKMAuth = new SoapClient('http://localhost:8080/OpenKM/services/OKMAuth?wsdl'); $OKMDocument = new SoapClient('http://localhost:8080/OpenKM/services/OKMDocument?wsdl');
function format_exception($e) { if (isset($e->detail)) { $reflectionObject = new ReflectionObject($e->detail); $properties = $reflectionObject->getProperties(); $exceptionName = $properties[0]->name; } else { $exceptionName = "Exception"; } return $exceptionName.": ".$e->faultstring; }
try { $loginResp = $OKMAuth->login(array('user' => 'okmAdmin', 'password' => 'admin')); $token = $loginResp->return; $getPropertiesResp = $OKMDocument->getProperties(array('token' => $token, 'docPath' => '/okm:root/nofile.txt')); $docProps = $getPropertiesResp->return; print_r($docProps); } catch (Exception $e) { echo format_exception($e); }
$OKMAuth->logout(array('token' => $token));?>Proxy configuration
Section titled “Proxy configuration”$client = new SoapClient("some.wsdl", array('proxy_host' => "https://example.org", 'proxy_port' => 443);