有没有办法使用将elementFormDefault =“不合格”的服务器架构类型与Spyne服务器? 现在我的所有审判结束与方法响应结果:
<senv:Envelope xmlns:tns="http://test.com/remoteService/"
xmlns:senv="http://schemas.xmlsoap.org/soap/envelope/">
<senv:Body>
<tns:testResponse>
<tns:status>ok</tns:status>
</tns:testResponse>
</senv:Body>
并产生以“合格”的将elementFormDefault WSDL片段:
<xs:schema targetNamespace="http://test.com/remoteService/" elementFormDefault="qualified"></xs:schema>
如何配置方法或参数模型来获得结果是这样的:
<senv:Envelope xmlns:tns="http://test.com/remoteService/"
xmlns:senv="http://schemas.xmlsoap.org/soap/envelope/">
<senv:Body>
<tns:testResponse>
<status>ok<status>
</tns:testResponse>
</senv:Body>
我的目标是产生的结果,其中子元素:
<tns:status>ok</tns:status>
会出现没有命名空间前缀 - 是这样的:
<status>ok<status>
如果你想知道如何监听器添加到event_manager为method_return_string
或其他事件,看到波纹管一个完整的例子:
from spyne import Application, rpc, ServiceBase, Iterable, Integer, Unicode
from spyne.protocol.soap import Soap11
from spyne.server.wsgi import WsgiApplication
class HelloWorldService(ServiceBase):
@rpc(Unicode, Integer, _returns=Iterable(Unicode))
def say_hello(ctx, name, times):
for i in range(times):
yield u'Hello, %s' % name
def on_method_return_string(ctx):
ctx.out_string[0] = ctx.out_string[0].replace(b'Hello>', b'Good by')
HelloWorldService.event_manager.add_listener('method_return_string',
on_method_return_string)
application = Application([HelloWorldService], 'spyne.examples.hello.soap',
in_protocol=Soap11(validator='lxml'),
out_protocol=Soap11())
wsgi_application = WsgiApplication(application)
if __name__ == '__main__':
import logging
from wsgiref.simple_server import make_server
server = make_server('127.0.0.1', 8000, wsgi_application)
server.serve_forever()
作为Spyne 2.12这仍然是从响应变量删除命名空间的唯一途径。
截至2.10,Spyne不支持此。
这个补丁将是一个有点毛。 在soap@python.org附和如果你愿意在这方面努力。
一种解决方法就是,从输出文档的手动删除命名空间前缀method_return_document
钩。 如果您需要强制执行相同的传入的文件,以及,你要么必须修改WSDL以及在document_built
事件,或者在所有使用软验证(验证软不关心命名空间)或无验证。
文章来源: Qualified element/attribute forms and unqualified forms with Spyne soap server