[cvs] [Wiki] created: Doc/Dev/SOAP

Chuck Hagenbuch chuck at horde.org
Thu Jun 21 15:41:48 UTC 2007


chuck  Thu, 21 Jun 2007 08:41:48 -0700

Created page: http://wiki.horde.org/Doc/Dev/SOAP

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

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

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


More information about the cvs mailing list