\documentclass{article}
\usepackage{ulem}
\usepackage{graphicx}
\usepackage{hyperref}
\pagestyle{headings}
\begin{document}
\textbf{This is documentation for Horde 3.}

\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 <a href="https://wiki.horde.org/SyncML">SyncML</a>.

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

<pre><code class="language-php">
\$\_types = array(
    'attrValues' => array('attr'   => 'string',
                          'values' => '\{urn:horde\}stringArray'),
    'attrValuesArray' => array(array('item' => '\{urn:horde\}serviceman\_attrValues')),
);
</code></pre>
which automagically generates this WSDL:

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

<pre><code class="language-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></pre>
\end{document}
