\documentclass{article}
\usepackage{ulem}
\pagestyle{headings}
\begin{document}
\textbf{Colortext: NIThis is documentation for Horde 3.Colortext: NI}

\part{ 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\footnote{http://example.com/index.php?page=SyncML}.

(more details on this should go here or be linked here)

\section{ Complex Types}
You can define complex types in the \texttt{\$\_types} array in \texttt{app/lib/api.php} Here is an example:

\begin{verbatim}

$_types = array(
    'attrValues' => array('attr'   => 'string',
                          'values' => '{urn:horde}stringArray'),
    'attrValuesArray' => array(array('item' => '{urn:horde}serviceman_attrValues')),
);
\end{verbatim}

which automagically generates this WSDL:

\begin{verbatim}

<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>
\end{verbatim}

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:

\begin{verbatim}

$_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);
}
\end{verbatim}

\end{document}
