**This is documentation for Horde 3.**
==============================
Using Horde as a SOAP server
==============================
Horde applications can have their APIs automatically served through SOAP, XML-RPC, and with the right API methods implemented, WebDAV and `SyncML`_.
.. _`SyncML`: https://wiki.horde.org/SyncML?referrer=Doc%2FDev%2FSOAP
(more details on this should go here or be linked here)
---------------
Complex Types
---------------
You can define complex types in the $_types array in app/lib/api.php Here is an example:
::
$_types = array(
'attrValues' => array('attr' => 'string',
'values' => '{urn:horde}stringArray'),
'attrValuesArray' => array(array('item' => '{urn:horde}serviceman_attrValues')),
);
which automagically generates this WSDL:
::
The application which uses these types serves several thousand SOAP transactions a day, with a J2EE/Axis application on the other end.
Here is another example including both the $_types and $_services definitions for an application which checks ADSL coverage areas:
::
$_types['coverageResults'] = array(
'number' => 'string',
'initial_range' => 'string',
'final_range' => 'string',
'miga' => 'string',
'final_range' => 'string',
'miga' => 'string',
'central' => 'string',
'demarcacion' => 'string',
'services' => 'string',
);
$_types['coverageResultsArray'] = array(
array('item' => '{urn:horde}coverage_coverageResults')
);
$_services['check'] = array(
'args' => array('numbers' => '{urn:horde}stringArray'),
'checkperms' => false,
'type' => '{urn:horde}coverage_coverageResultsArray'
);
function _coverage_check($numbers) {
// code that returns an array of results
return array($return);
}