Python中文
首页
教程
问答
标签
搜索
登录
注册
Python suds 错误的命名空间前缀在SOAP请求中
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我使用python/suds来实现一个客户机,在wsdl中由<code>element ref=</code>定义的特定类型的参数的发送SOAP头中,我得到了错误的名称空间前缀。</p> <p>wsdl引用的是数据类型.xsd文件,请参见下文。问题在于函数<code>GetRecordAttributes</code>及其类型<code>gbt:recordReferences</code>的第一个参数。</p> <p><strong>文件:browse2.wsdl</p> <pre><code><xsd:schema targetNamespace="http://www.grantadesign.com/10/10/Browse" xmlns="http://www.grantadesign.com/10/10/Browse" xmlns:gbt="http://www.grantadesign.com/10/10/GrantaBaseTypes" elementFormDefault="qualified" attributeFormDefault="qualified"> <xsd:import schemaLocation="grantabasetypes2.xsd" namespace="http://www.grantadesign.com/10/10/GrantaBaseTypes"/> <xsd:element name="GetRecordAttributes"> <xsd:complexType> <xsd:sequence> <xsd:element ref="gbt:recordReferences"> </xsd:element> </code></pre> <p><strong>引用文件:grantabasetypes2.xsd</strong></p> <pre><code><element name="recordReferences"> <complexType> <sequence> <element name="record" minOccurs="0" maxOccurs="unbounded" type="gbt:MIRecordReference"/> </sequence> </complexType> </element> </code></pre> <p><strong>由suds发送的SOAP请求:</strong></p> <pre><code><SOAP-ENV:Envelope xmlns:ns0="http://www.grantadesign.com/10/10/GrantaBaseTypes" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns2="http://www.grantadesign.com/10/10/Browse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <ns1:Body> <ns2:GetRecordAttributes> <ns2:recordReferences> <ns0:record> </ns0:record> </ns2:recordReferences> </ns2:GetRecordAttributes> </ns1:Body> </SOAP-ENV:Envelope> </code></pre> <p><strong>问题</strong>:<code><ns2:recordReferences></code>前缀错误,应该是<code><ns0:recordReferences></code>,因为它属于.xsd中定义的命名空间<code>...GrantaBaseTypes</code>。</p> <p>对于wsdl中由<code>ref=</code>定义的所有参数,都会发生这种情况。如何自动修复?</p> <p>注意:我通过curl手动发送xml SOAP请求来检查服务是否接受“good”前缀。</p> <p><strong>更新</strong></p> <p>我处理了SUDS源代码,下面的经验修正强制所有具有<code>ref=</code>属性的元素采用ref ed名称空间(以前,它们采用模式根名称空间或任何<code>tns</code>):</p> <p>文件:/suds/xsd/sxbase.py</p> <pre><code>class SchemaObject(object): .... def namespace(self, prefix=None): ns = self.schema.tns #FIX BEGIN if self.ref and self.ref in self.schema.elements.keys(): ns = self.ref #FIX END </code></pre> <p>对我的服务有效,但我不确定是否会破坏其他东西。我更喜欢不改变SUDS源代码的更聪明的解决方案。</p> <p>谢谢</p> <p>亚历克斯</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>您可以自己构建soap消息并使用<code>SoapClient</code>发送消息:</p> <pre><code>sc = SoapClient(cli.service.XXXMethod.client,cli.service.XXXMethod.method) sc.send(some_soap_doc) </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
尽管Python中的所有内容都是引用,为什么Python导师在没有指针的列表中绘制字符串和整数?
2 回答
尽管python中的表达式为false,但循环仍在运行
3 回答
尽管python代码正确,但从nifi ExecuteScript处理器获取语法错误
9 回答
尽管Python在Neovim中工作得很好,但插件不能识别Neovim中的Python主机
9 回答
尽管python字典包含了大量的条目,但它并没有增长
9 回答
尽管python说模块存在,为什么我会得到这个消息?
7 回答
尽管setuptools和控制盘是最新的,但无法识别singleversionexternallymanaged
8 回答
尽管stdout和stderr重定向,但未捕获错误消息
1 回答
尽管Tensorboard的事件太大,但Tensorboard的步骤太少了
10 回答
尽管tkinter上的变量已更改,但显示未更改
1 回答
尽管try/except使用Python进行单元测试时出现断言错误
7 回答
尽管URL是sam,但仍会抛出“达到最大重定向”
9 回答
尽管url有效,Pandas仍读取url的\u csv错误
5 回答
尽管while中存在时间延迟,但LINUX线程的CPU利用率为100%(1)
4 回答
尽管x0在范围内,Scipy优化仍会引发ValueError
9 回答
尽管xpath正确,但使用selenium单击链接仍不起作用
2 回答
尽管下载了ffmpeg并设置了路径变量python,但没有后端错误
2 回答
尽管下载了i,但找不到型号“fr”
5 回答
尽管下载了plotnine包,但未获取名为“plotnine”的模块时出错
5 回答
尽管为所有行指定了权重,网格(0)仍不起作用
9 回答