spyne和soappy的模式验证错误

时间:2015-04-27 08:48:06

标签: django python-2.7 spyne soappy

我使用Spyne创建简单的webservie,当我调用该示例服务时出现以下错误:

class ServiceWsTest(ServiceBase):
    __namespace__ = "appname"

    @rpc(Unicode, _returns=Unicode)
    def testMethod(self, name):
        return "Hello {}" .format(name)

ws_test = csrf_exempt(DjangoApplication(Application([ServiceWsTest],
     'appname',
     in_protocol=Soap11(validator='lxml'),
     out_protocol=Soap11(cleanup_namespaces=True),
     #interface=Wsdl11(),
)))

SERVICE

views.py

 url(r'^sample/service', DjangoView.as_view(
            services=[ServiceWsTest], tns='appname',
            in_protocol=Soap11(validator='lxml'), 
            out_protocol=Soap11(cleanup_namespaces=True))),

urls.py

from SOAPpy import WSDL, SOAPProxy
server = SOAPProxy('http://IP ADDRESS/sandbox/sample/service/')
server.testMethod('john')

使用soappy进行服务呼叫

client = suds.client.Client("http://IP ADDRESS/sandbox/sample/service.wsdl", cache=None)
client.service.testMethod('jane')

Hello jane

如果我使用肥皂水,一切都运转正常。

preg_replace

请告知

1 个答案:

答案 0 :(得分:0)

Soappy的请求有两个问题:

  1. 它没有使用正确的命名空间。 testMethod代码必须位于" appname"命名空间。由于文档中没有空名称空间声明(xmlns="appname"),标记的实际名称空间是未定义的。

  2. 它使用rpc编码样式(有xsi:type个属性),而在Spyne生成的WSDL中,它明确表示要使用文档编码。

  3. 不要使用soappy,只需使用肥皂水。据我所知,soappy还没有维持多年。