[%#
Standard WSDL template. In view.data, pass:
soap_name - prefix for all service specific names
location - URL relative to app_rootp where SOAP controller lives
operations - an array (ref) of hashes. Each hash has three keys:
name - method name
expects - array (ref) of hashes of input params with two keys:
name - name of parameter
type - a valid WSDL type including namespace prefix
returns - array (ref) of hashes of return values same as expects
%]
[% base_name = self.protocol _ view.data.namespace_base _ view.data.location %]
[% wsdl_url = base_name _ '/' _ 'wsdl' %]
<wsdl:definitions name='[% view.data.soap_name %]Service'
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
targetNamespace='[% base_name %]'
xmlns:tns='[% base_name %]' >
[% FOREACH op IN view.data.operations %]
<message name='[% op.name %]_request'>
[% FOREACH input IN op.expects %]
<part name='[% input.name %]' type='[% input.type %]' />
[% END %]
</message>
<message name='[% op.name %]_response'>
[% FOREACH output IN op.returns %]
<part name='[% output.name %]' type='[% output.type %]' />
[% END %]
</message>
[% END %]
<portType name='[% view.data.soap_name %]_PortType'>
[% FOREACH op IN view.data.operations %]
<operation name='[% op.name %]'>
<input message='tns:[% op.name %]_request' />
<output message='tns:[% op.name %]_response' />
</operation>
[% END %]
</portType>
<binding name='[% view.data.soap_name%]_Binding'
type='tns:[% view.data.soap_name %]_PortType'>
<soap:binding style='rpc'
transport='http://schemas.xmlsoap.org/soap/http' />
[% FOREACH op IN view.data.operations %]
<operation name='[% op.name %]'>
<soap:operation soapAction='[% base_name %]' />
<input>
<soap:body
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'
namespace='[% base_name %]'
uses='encoded' />
</input>
<output>
<soap:body
encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'
namespace='[% basename %]'
uses='encoded' />
</output>
</operation>
[% END %]
</binding>
<service name='[% view.data.soap_name %]_Service'>
<port binding='tns:[% view.data.soap_name %]_Binding'
name='[% view.data.soap_name %]_Port'>
<soap:address
location='[% base_name %]' />
</port>
</service>
</wsdl:definitions>