我正在使用suds-jurko(0.6)和python 2.7
生成当前的肥皂请求
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://xxxxx/A" xmlns:ns1="http://xxxxxx/B" xmlns:ns2="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope">
<SOAP-ENV:Header/>
<ns2:Body>
<ns1:Request>
<Parameter xsi:type="ns1:GetParameter">
<Identifier xsi:type="ns0:NumberIdentifier">
<Number>2</Number>
</Identifier>
</Parameter>
</ns1:Request>
</ns2:Body>
</SOAP-ENV:Envelope>
&#13;
所需的肥皂请求应为
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns1="http://xxxxxx/B" xmlns:ns2="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope">
<SOAP-ENV:Header/>
<ns2:Body>
<ns1:Request xmlns:ns0="http://xxxxx/A">
<Parameter xsi:type="ns1:GetParameter">
<Identifier xsi:type="ns0:NumberIdentifier">
<Number>2</Number>
</Identifier>
</Parameter>
</ns1:Request>
</ns2:Body>
</SOAP-ENV:Envelope>
&#13;
问题
我正在使用wsdl拨打电话。有没有办法在suds中使用set-options或其他方法,我可以通过它强制客户端在节点处创建soap信封namepsaces而不是soap:enevlope节点上的所有内容
答案 0 :(得分:0)
我找到了解决方案来移动namspaces。不确定它是否是最佳方式,但它的工作原理。
def marshalled(self, context):
context.envelope.normalizePrefixes()
remove = {'1': '1'}
for prefix, ns in context.envelope.nsprefixes.iteritems():
if ns != 'http://www.w3.org/2003/05/soap-envelope':
remove[prefix] = str(ns)
for prefix, ns in remove.iteritems():
if prefix != '1':
context.envelope.clearPrefix(prefix)
body = context.envelope.getChild('Body')
request = body[0]
request.addPrefix('xsi','http://www.w3.org/2001/XMLSchema-instance')
for prefix, ns in remove.iteritems():
if prefix != '1':
request.addPrefix(prefix,ns)