6.0.0-git
2019-11-19

Diff for Doc/Dev/SOAP between 4 and 5

**##red|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:

<code type="php">
$_types = array(
    'attrValues' => array('attr'   => 'string',
                          'values' => '{urn:horde}stringArray'),
    'attrValuesArray' => array(array('item' => '{urn:horde}serviceman_attrValues')),
);
</code>

which automagically generates this WSDL:

<code>
<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>
</code>

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:

<code type="php">
$_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);
}
</code>