6.0.0-git
2024-04-23
Last Modified 2007-06-21 by Chuck Hagenbuch

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 <code>$_types</code> array in <code>app/lib/api.php</code>. 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 servers 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);

}