gpt4 book ai didi

python - 从 Spyne 响应变量中删除 namespace

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:48 27 4
gpt4 key购买 nike

根据特定的 WSDL 实现 WebService。客户无法更改。正确处理来自客户端的请求,但由于变量中的 namespace ,客户端提示响应。

我想要的(基于 WSDL 的 soapUI 响应):

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cal="http://callback.foo.com/">
<soapenv:Header/>
<soapenv:Body>
<cal:foo_statusResponse>
<result>SUCCESS</result>
<notify>Thanks!</notify>
</cal:foo_statusResponse>
</soapenv:Body>
</soapenv:Envelope>

我得到了什么(注意 tns: 关于导致验证问题的变量):

<senv:Envelope xmlns:tns="http://callback.foo.com/" xmlns:senv="http://schemas.xmlsoap.org/soap/envelope/">
<senv:Body>
<tns:foo_statusResponse>
<tns:result>SUCCESS</tns:result>
<tns:notify>Thanks!</tns:notify>
</tns:foo_statusResponse>
</senv:Body>
</senv:Envelope>

Java 客户端抛出此异常:

[com.sun.istack.SAXParseException2; lineNumber: 2; columnNumber: 162; unexpected element (uri:"http://callback.foo.com/", local:"result"). Expected elements are <{}result>,<{}notify>]

执行片段:

class fooStatusRS(ComplexModel):
result = Unicode()
notify = Unicode()

class foo_callback(ServiceBase):
@srpc(Unicode, Unicode, Unicode, Unicode, statusbarInfo, anotherResponse,
_out_header=None,
_out_variable_names=("result", "notify"),
_returns=(Unicode, Unicode),
_out_message_name="foo_statusResponse",
_operation_name="foo_status_rq")
def foo_status(foo_id, reply, ref, status, statusbar, another):
if foo_id:
print foo_id

return fooStatusRS(result="SUCCESS", notify="Foo received!")

最佳答案

这是不可能的(还),并且在类似的问题中得到了回答 here由维护者。

解决方法是为“method_return_string”向 event_manager 添加监听器,然后执行一些字符串操作。

def _method_return_string(ctx):
ctx.out_string[0] = ctx.out_string[0].replace("tns:result>", "result>")
ctx.out_string[0] = ctx.out_string[0].replace("tns:notify>", "notify>")

关于python - 从 Spyne 响应变量中删除 namespace ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28832969/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com