Thanks for the insight. the problem is solved. the code below can work well.


def test_tornadows_sum2():
    """test for tornadows
    """
     url = "http://localhost:8000/SumService";
    server = SOAPProxy(url, noroot=1)
    server.config.debug=1
    server.config.typed=0
    print server.sum(a=200,b=10)


#NOTE: do you find a funny phenomenon?

if local programming, we can define a function "def test(a=1,b=2):  return
a+b" can invoke it using "test(200,10)" successfully.

while, in "SOAPProxy", we must write code as "print server.sum(a=200,b=10)".
when use "print server.sum(200,10)", it returns an exception.

#detail information:

# server end:

    def sum(self, a, b):
        print 'a', a
        print 'b', b
        result = a + b
        print 'result',

client end:

part 1:
print server.sum(200,10)

failed:

*** Outgoing HTTP headers **********************************************
POST /SumService HTTP/1.0
Host: localhost:8000
User-agent: SOAPpy 0.12.0 (http://pywebsvcs.sf.net)
Content-type: text/xml; charset="UTF-8"
Content-length: 282
SOAPAction: "sum"
************************************************************************
*** Outgoing SOAP ******************************************************
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
>
<SOAP-ENV:Body>
<sum>
<v1>200</v1>
<v2>10</v2>
</sum>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
************************************************************************
code= 200
msg= OK
headers= Content-Length: 516
Content-Type: text/xml
Server: TornadoServer/2.1.1

content-type= text/xml
data= <?xml version="1.0" ?><soapenv:Envelope

xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";

xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/

http://schemas.xmlsoap.org/soap/envelope/
"><soapenv:Header/><soapenv:Body><soapenv:Fault

xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope";>
<faultcode/>
<faultstring>Error in web service : sum() takes exactly 3 arguments (1
given)</faultstring>
</soapenv:Fault></soapenv:Body></soapenv:Envelope>
*** Incoming HTTP headers **********************************************
HTTP/1.? 200 OK
Content-Length: 516
Content-Type: text/xml
Server: TornadoServer/2.1.1
************************************************************************
*** Incoming SOAP ******************************************************
<?xml version="1.0" ?><soapenv:Envelope

xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";

xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/

http://schemas.xmlsoap.org/soap/envelope/
"><soapenv:Header/><soapenv:Body><soapenv:Fault

xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope";>
<faultcode/>
<faultstring>Error in web service : sum() takes exactly 3 arguments (1
given)</faultstring>
</soapenv:Fault></soapenv:Body></soapenv:Envelope>
************************************************************************
<SOAPpy.Types.structType Fault at 144746668>: {'faultcode': '',
'faultstring': 'Error in web

service : sum() takes exactly 3 arguments (1 given)'}


part 2:

print server.sum(a=200,b=10)

okay:

*** Outgoing HTTP headers **********************************************
POST /SumService HTTP/1.0
Host: localhost:8000
User-agent: SOAPpy 0.12.0 (http://pywebsvcs.sf.net)
Content-type: text/xml; charset="UTF-8"
Content-length: 278
SOAPAction: "sum"
************************************************************************
*** Outgoing SOAP ******************************************************
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
  SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/";
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
>
<SOAP-ENV:Body>
<sum>
<a>200</a>
<b>10</b>
</sum>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
************************************************************************
code= 200
msg= OK
headers= Content-Length: 344
Content-Type: text/xml
Server: TornadoServer/2.1.1
Set-Cookie: _xsrf=bd30bb2d55624f8e99409b061fe4bb74; Path=/

content-type= text/xml
data= <?xml version="1.0" ?><soapenv:Envelope

xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";

xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/

http://schemas.xmlsoap.org/soap/envelope/
"><soapenv:Header/><soapenv:Body><returns>210</returns>

</soapenv:Body></soapenv:Envelope>
*** Incoming HTTP headers **********************************************
HTTP/1.? 200 OK
Content-Length: 344
Content-Type: text/xml
Server: TornadoServer/2.1.1
Set-Cookie: _xsrf=bd30bb2d55624f8e99409b061fe4bb74; Path=/
************************************************************************
*** Incoming SOAP ******************************************************
<?xml version="1.0" ?><soapenv:Envelope

xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";

xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/

http://schemas.xmlsoap.org/soap/envelope/
"><soapenv:Header/><soapenv:Body><returns>210</returns>

</soapenv:Body></soapenv:Envelope>
************************************************************************
210

if idle, hope to get a response. Thanks again for the help.

-- Jia Xiaolei



On Fri, Dec 2, 2011 at 4:45 AM, Rodrigo Ancavil <[email protected]> wrote:

> Hi Jia.
>
> SOAPpy generates default XML SOAP messaging a bit confusing for web
> services.
>
> If you set server.config.debug = 1, you can see the messages generated by
> default.
>
> Below I send you a code that worked for me.
>
>
> Here the code:
> ===========
>
> from SOAPpy import SOAPProxy
>
> def test_tornadows_sum():
>     """test for tornadows
>     """
>     #TODO:in this way, invoking tornadows is also failed, what a pity.
>     url = "http://localhost:8000/SumService";
>
>     # noroot = 0 generate <sum SOAP-ENC:root="1">
>     # noroot = 1 ommit SOAP-ENC:root="1", <sum>
>
>     server = SOAPProxy(url,noroot=1)
>     # With debug = 1 show the communication and messages soap xml.
>     server.config.debug = 1
>
>     # typed = 0 generates the types into the elements
>     # <a xsi:type="xsd:int">2</a>
>     # <b xsi:type="xsd:int">1</b>
>     # with typed = 1 omits the types into the elements
>     # <a>2</a>
>     # <a>1</b>
>     server.config.typed = 0
>
>     print
>     # sending the parameters a=val1, b=val2, make that respect the
> elements
>     # defined in the schema of the wsdl.
>     print "Result is : "+server.sum(a=200,b=10)
>
> test_tornadows_sum()
>
> I hope help you.
>
> Rodrigo.
>
>
>
>
>
> 2011/12/1 贾晓磊 <[email protected]>
>
>> Hi, all:
>>
>> Is someone familiar to SOAPpy?
>>
>> First of all, I will admire I'm a newbie to soap, and SOAPpy can run
>> successfully in some occasions.
>>
>> Now, my problem is:
>>
>> # server_sum.py
>> import logging
>>
>> import tornado.httpserver
>> import tornado.ioloop
>> import tornado.web
>> from tornadows import soaphandler
>> from tornadows import webservices
>> from tornadows import xmltypes
>> from tornadows.soaphandler import webservice
>> from tornado.options import define, options
>>
>> define('mode', default='deploy')
>> define('port', type=int, default=8000)
>> options['logging'].set('warning')
>>
>>
>> class SumService(soaphandler.SoapHandler):
>>
>> @webservice(_params=[xmltypes.Integer,xmltypes.Integer],_returns=xmltypes.Integer)
>>     def sum(self, a=1, b=1):
>>         result = a + b
>>         return result
>>
>> if __name__ == '__main__':
>>     service = [('SumService',SumService)]
>>     app = webservices.WebService(service)
>>     ws  = tornado.httpserver.HTTPServer(app)
>>     ws.listen(options.port)
>>     logging.warn("SumService running on: localhost:%d", options.port)
>>     tornado.ioloop.IOLoop.instance().start()
>>
>> # sum_client.py
>>
>> from SOAPpy import SOAPProxy
>>
>> def test_tornadows_sum():
>>     """test for tornadows
>>     """
>>     #TODO:in this way, invoking tornadows is also failed, what a pity.
>>     url = "http://localhost:8000/SumService";
>>     server = SOAPProxy(url)
>>     print dir(server)
>>     a = 22
>>     b = 44
>>     print server.sum(a,b)
>>
>>
>> ------
>> The server is okay.when I invoke the method in this way, it return the
>> sum of 10 and 2.:
>> import suds
>> def test_tornadows_sum():
>>     # it's okay, while the server provide a method.
>>     url = "http://localhost:8000/SumService?wsdl";
>>     client = suds.client.Client(url)
>>     print 'client', client
>>     a = 10
>>     b = 2
>>     output = client.service.sum(a,b)
>>
>> While, when i use SOAPProxy (sum_client.py), it failed. the errror
>> message is :
>>
>> ['_SOAPProxy__Method', '_SOAPProxy__call', '__doc__', '__getattr__',
>> '__init__', '__module__', '_callWithBody', 'config', 'encoding', 'header',
>> 'http_proxy', 'invoke', 'methodattrs', 'namespace', 'noroot', 'proxy',
>> 'simplify_objects', 'soapaction', 'throw_faults', 'transport',
>> 'unwrap_results']
>> <SOAPpy.Types.structType Fault at 141277356>: {'faultcode': '',
>> 'faultstring': 'Error in web service : unbound prefix: line 1, column 0'}
>>
>> What should I do next ?
>>
>> #NOTE: the wsdl for the server is:
>> http://172.16.2.46:8000/SumService?wsdl    # url is in my personal
>> computer, you can read the wsdl below.
>> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
>> xmlns:tns="http://127.0.1.1:8000/SumService/sum"; xmlns:wsdl="
>> http://schemas.xmlsoap.org/wsdl/"xmlns:xsd=";
>> http://www.w3.org/2001/XMLSchema"; xmlns:xsi="
>> http://www.w3.org/2001/XMLSchema-instance"; name="SumService"
>> targetNamespace="http://127.0.1.1:8000/SumService/sum";>
>> <wsdl:types>
>> <xsd:schema targetNamespace="http://127.0.1.1:8000/SumService/sum";>
>> <xsd:complexType name="paramsTypes">
>> <xsd:sequence>
>> <xsd:element name="a" type="xsd:integer"/>
>> <xsd:element name="b" type="xsd:integer"/>
>> </xsd:sequence>
>> </xsd:complexType>
>> <xsd:element name="params" type="tns:paramsTypes"/>
>> <xsd:element name="returns" type="xsd:integer"/>
>> </xsd:schema>
>> </wsdl:types>
>> <wsdl:message name="SumServiceRequest">
>> <wsdl:part element="tns:params" name="parameters"/>
>> </wsdl:message>
>> <wsdl:message name="SumServiceResponse">
>> <wsdl:part element="tns:returns" name="parameters"/>
>> </wsdl:message>
>> <wsdl:portType name="SumServicePortType">
>> <wsdl:operation name="sum">
>> <wsdl:input message="tns:SumServiceRequest"/>
>> <wsdl:output message="tns:SumServiceResponse"/>
>> </wsdl:operation>
>> </wsdl:portType>
>> <wsdl:binding name="SumServiceBinding" type="tns:SumServicePortType">
>> <soap:binding style="document" transport="
>> http://schemas.xmlsoap.org/soap/http"/>
>> <wsdl:operation name="sum">
>> <soap:operation soapAction="http://127.0.1.1:8000/SumService"; style="
>> document"/>
>> <wsdl:input>
>> <soap:body use="literal"/>
>> </wsdl:input>
>> <wsdl:output>
>> <soap:body use="literal"/>
>> </wsdl:output>
>> </wsdl:operation>
>> </wsdl:binding>
>> <wsdl:service name="SumService">
>> <wsdl:port binding="tns:SumServiceBinding" name="SumServicePort">
>> <soap:address location="http://127.0.1.1:8000/SumService"/>
>> </wsdl:port>
>> </wsdl:service>
>> </wsdl:definitions>
>>
>> Any help will be highly appreciated. Thanks for your time and
>> concentration again!
>>
>> -- Jia Xiaolei
>>
>>
>


-- 
NAME: 贾晓磊/Jia Xiaolei
MOBILE: 13011292217
QQ: 281304051
MICRO-BLOG:  http://weibo.com/2183890715
GMAIL: [email protected] <gmail%[email protected]>
_______________________________________________
Soap mailing list
[email protected]
http://mail.python.org/mailman/listinfo/soap

Reply via email to