2010-01-02 127 views
11

这个问题是有关: Python SOAP server/clientPython的肥皂使用soaplib(服务器)和泡沫(客户端)

与蟒蛇肥皂的情况下,也有使用soaplib(http://wiki.github.com/jkp/soaplib)作为SOAP服务器和泡沫(推荐作为肥皂客户端。 我的目标是在python中创建soap服务,可以被几个客户端(java等)使用。 我试过soaplib的HelloWorld例子(http://trac.optio.webfactional.com/wiki/HelloWorld)。 当客户端也使用soaplib时,它工作得很好。

然后,我尝试使用泡沫客户端消费HelloWorld服务,它失败。 - 为什么发生这种情况? soaplib服务器是否有问题要由不同的客户端使用?

这里为服务器的代码:

from soaplib.wsgi_soap import SimpleWSGISoapApp 
from soaplib.service import soapmethod 
from soaplib.serializers.primitive import String, Integer, Arraycode 
class HelloWorldService(SimpleWSGISoapApp): 
@soapmethod(String,Integer,_returns=Array(String)) 
def say_hello(self,name,times): 
    results = [] 
    for i in range(0,times): 
     results.append('Hello, %s'%name) 
    return results 

if __name__=='__main__': 
from cherrypy.wsgiserver import CherryPyWSGIServer 
#from cherrypy._cpwsgiserver import CherryPyWSGIServer 
# this example uses CherryPy2.2, use cherrypy.wsgiserver.CherryPyWSGIServer for CherryPy 3.0 
server = CherryPyWSGIServer(('localhost',7789),HelloWorldService()) 
server.start() 

这是soaplib客户端:

from soaplib.client import make_service_client 
from SoapServerTest_1 import HelloWorldService 
client = make_service_client('http://localhost:7789/',HelloWorldService()) 
print client.say_hello("Dave",5) 

结果:

>>> ['Hello, Dave', 'Hello, Dave', 'Hello, Dave', 'Hello, Dave', 'Hello, Dave'] 

这是泡沫客户端:

from suds.client import Client 
url = 'http://localhost:7789/HelloWordService?wsdl' 
client1 = Client(url) 
client1.service.say_hello("Dave",5) 

结果:

>>> Unhandled exception while debugging... 
Traceback (most recent call last): 
    File "C:\Python25\Lib\site-packages\RTEP\Sequencing\SoapClientTest_1.py", line 10, in <module> 
    client1.service.say_hello("Dave",5) 
    File "c:\python25\lib\site-packages\suds\client.py", line 537, in __call__ 
    return client.invoke(args, kwargs) 
    File "c:\python25\lib\site-packages\suds\client.py", line 597, in invoke 
    result = self.send(msg) 
    File "c:\python25\lib\site-packages\suds\client.py", line 626, in send 
    result = self.succeeded(binding, reply.message) 
    File "c:\python25\lib\site-packages\suds\client.py", line 658, in succeeded 
    r, p = binding.get_reply(self.method, reply) 
    File "c:\python25\lib\site-packages\suds\bindings\binding.py", line 158, in get_reply 
    result = unmarshaller.process(nodes[0], resolved) 
    File "c:\python25\lib\site-packages\suds\umx\typed.py", line 66, in process 
    return Core.process(self, content) 
    File "c:\python25\lib\site-packages\suds\umx\core.py", line 48, in process 
    return self.append(content) 
    File "c:\python25\lib\site-packages\suds\umx\core.py", line 63, in append 
    self.append_children(content) 
    File "c:\python25\lib\site-packages\suds\umx\core.py", line 140, in append_children 
    cval = self.append(cont) 
    File "c:\python25\lib\site-packages\suds\umx\core.py", line 61, in append 
    self.start(content) 
    File "c:\python25\lib\site-packages\suds\umx\typed.py", line 77, in start 
    found = self.resolver.find(content.node) 
    File "c:\python25\lib\site-packages\suds\resolver.py", line 341, in find 
    frame = Frame(result, resolved=known, ancestry=ancestry) 
    File "c:\python25\lib\site-packages\suds\resolver.py", line 473, in __init__ 
    resolved = type.resolve() 
    File "c:\python25\lib\site-packages\suds\xsd\sxbasic.py", line 63, in resolve 
    raise TypeNotFound(qref) 
TypeNotFound: Type not found: '(string, HelloWorldService.HelloWorldService,)' 
+1

我只是今天用现有资源尝试,并得到与原始海报完全相同的问题。添加导入语句并没有帮助(事实上,您可以查看原始代码并查看导入的基元)。 – user343574 2010-06-04 01:27:01

回答

1

尝试导入元到类:

class HelloWorldService(SimpleWSGISoapApp): 
    from soaplib.serializers.primitive import String, Integer, Arraycode 
    @soapmethod(String,Integer,_returns=Array(String))