[Soap-Python] [Patch] Improve soaplib to expose properly multiple services

Chris Austin chris at sydneysys.com
Fri Mar 25 20:34:38 CET 2011


Hi Raphaël,

Thank you very much for the patch.   It is possible for you to submit
a pull request via github.  Either way I am happy, but we've been
using the github workflow for sometime now and I liked to stick with
it if possible. Either way, I'll test and apply the patch shortly.

Thanks Again

Chris

2011/3/25 Raphaël Barrois <raphael.barrois at polyconseil.fr>:
> Hi,
>
> I have found a minor issue with soaplib, which doesn't handle properly the definition of an Application with multiple Services
>
> If I define a soap Application with three services (DefinitionBase) :
>
>
>
> class Service1(DefinitionBase):
>    @soap(String, _returns=String)
>    def my_method(self, hello):
>        return 'world'
>
> class Service2(DefinitionBase):
>    @soap(String, _returns=String)
>    def my_other_method(self, guten):
>        return 'tag'
>
> class Service3(DefinitionBase):
>    @soap(String, _returns=String)
>    def my_last_method(self, bonjour):
>        return 'monde'
>
> app = soaplib.core.Application([Service1, Service2, Service3], 'tns', name='ExampleService')
>
>
> The WSDL will only contain one <service> entry :
>
>    <wsdl:service name="ExampleWebService">
>        <wsdl:port name="ExampleWebService" binding="tns:ExampleWebService">
>            <soap:address location="http://127.0.0.1:7003/ws/test/?wsdl"/>
>        </wsdl:port>
>        <wsdl:port name="ExampleWebService" binding="tns:ExampleWebService">
>            <soap:address location="http://127.0.0.1:7003/ws/test/?wsdl"/>
>        </wsdl:port>
>        <wsdl:port name="ExampleWebService" binding="tns:ExampleWebService">
>            <soap:address location="http://127.0.0.1:7003/ws/test/?wsdl"/>
>        </wsdl:port>
>    </wsdl:service>
>
>
> I have attached a patch which fixes this issue ; let me know if I need to improve it one way or the other.
>
>    <wsdl:portType name="Service1">
>        <wsdl:operation name="my_method" parameterOrder="my_method">
>            <wsdl:input name="my_method" message="tns:my_method"/>
>            <wsdl:output name="my_methodResponse" message="tns:my_methodResponse"/>
>        </wsdl:operation>
>    </wsdl:portType>
>    <wsdl:binding name="Service1" type="tns:Service1">
>        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
>        <wsdl:operation name="my_method">
>            <soap:operation soapAction="my_method" style="document"/>
>            <wsdl:input name="my_method">
>                <soap:body use="literal"/>
>            </wsdl:input>
>            <wsdl:output name="my_methodResponse">
>                <soap:body use="literal"/>
>            </wsdl:output>
>        </wsdl:operation>
>    </wsdl:binding>
>    <wsdl:service name="Service1">
>        <wsdl:port name="Service1" binding="tns:Service1">
>            <soap:address location="http://127.0.0.1:7003/ws/test/?wsdl"/>
>        </wsdl:port>
>    </wsdl:service>
>    <wsdl:portType name="Service2">
>        <wsdl:operation name="my_other_method" parameterOrder="my_other_method">
>            <wsdl:input name="my_other_method" message="tns:my_other_method"/>
>            <wsdl:output name="my_other_methodResponse" message="tns:my_other_methodResponse"/>
>        </wsdl:operation>
>    </wsdl:portType>
>    <wsdl:binding name="Service2" type="tns:Service2">
>        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
>        <wsdl:operation name="my_other_method">
>            <soap:operation soapAction="my_other_method" style="document"/>
>            <wsdl:input name="my_other_method">
>                <soap:body use="literal"/>
>            </wsdl:input>
>            <wsdl:output name="my_other_methodResponse">
>                <soap:body use="literal"/>
>            </wsdl:output>
>        </wsdl:operation>
>    </wsdl:binding>
>    <wsdl:service name="Service2">
>        <wsdl:port name="Service2" binding="tns:Service2">
>            <soap:address location="http://127.0.0.1:7003/ws/test/?wsdl"/>
>        </wsdl:port>
>    </wsdl:service>
>    <wsdl:portType name="Service3">
>        <wsdl:operation name="my_last_method" parameterOrder="my_last_method">
>            <wsdl:input name="my_last_method" message="tns:my_last_method"/>
>            <wsdl:output name="my_last_methodResponse" message="tns:my_last_methodResponse"/>
>        </wsdl:operation>
>    </wsdl:portType>
>    <wsdl:binding name="Service3" type="tns:Service3">
>        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
>        <wsdl:operation name="my_last_method">
>            <soap:operation soapAction="my_last_method" style="document"/>
>            <wsdl:input name="my_last_method">
>                <soap:body use="literal"/>
>            </wsdl:input>
>            <wsdl:output name="my_last_methodResponse">
>                <soap:body use="literal"/>
>            </wsdl:output>
>        </wsdl:operation>
>    </wsdl:binding>
>    <wsdl:service name="Service3">
>        <wsdl:port name="Service3" binding="tns:Service3">
>            <soap:address location="http://127.0.0.1:7003/ws/test/?wsdl"/>
>        </wsdl:port>
>    </wsdl:service>
>
> --
> Raphaël Barrois
>
>
> _______________________________________________
> Soap mailing list
> Soap at python.org
> http://mail.python.org/mailman/listinfo/soap
>
>


More information about the Soap mailing list