6.0.0-git
2024-03-19
Last Modified 2015-12-09 by Michael Rubinsky

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.

(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:

<complexType name="serviceman_attrValues">
        <all>
                <element name="attr" type="xsd:string"/>
                <element name="values" type="tns:stringArray"/>
        </all>
</complexType>
<complexType name="serviceman_attrValuesArray">
        <complexContent>
                <restriction base="SOAP-ENC:Array">
                        <attribute ref="SOAP-ENC:arrayType" wsdl:arrayType="tns:serviceman_attrValues[]"/>
                </restriction>
        </complexContent>
</complexType>

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);
}