作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个请求,以在 Django 中使用 SUDS (4.0) 来使用 Web 服务。
然而,Suds 没有放置正确的命名空间。
我得到的肥皂信封:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:ns3="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns0="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://factura360.com/invoice_webservice"
xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header>
<ns2:LoginObject>
<soapusername>USER</soapusername>
<soappassword>PASSWORD</soappassword>
</ns2:LoginObject>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:generate_invoice>
<document xsi:type="xsd:string">
<?xml version="1.0" encoding="UTF-8"?><cfdi:Comprobante></cfdi:Comprobante>
</document>
<documenttype xsi:type="xsd:int">0</documenttype>
<filetype xsi:type="xsd:int">1</filetype>
<cer xsi:nil="true"></cer><key xsi:nil="true">
</key><password xsi:type="xsd:string">PASSWORD</password>
</ns1:generate_invoice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
SOAP 信封应该是什么:
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://factura360.com/invoice_webservice"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns2="namespace"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Header>
<ns2:LoginObject>
<soapusername>USER</soapusername>
<soappassword>PASSWORD</soappassword>
</ns2:LoginObject>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ns1:generate_invoice>
<document xsi:type="xsd:string">
<?xml version="1.0" encoding="UTF-8"?><cfdi:Comprobante> </cfdi:Comprobante>
</document>
<documenttype xsi:type="xsd:int">0</documenttype>
<filetype xsi:type="xsd:int">1</filetype>
<cer xsi:nil="true"></cer>
<key xsi:nil="true"></key>
<password xsi:type="xsd:string">PASSWORD</password>
</ns1:generate_invoice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
因此,根据所需的 SOAP Envelope,应该没有“xmlns:ns0”,没有“xmlns:ns3”,应该有值为“http://www.w3.org/2001/XMLSchema”的 xmlns:xsd 和'xmlns:ns2' 的值应该是 'namespace'。
class CorrectNamespace(MessagePlugin):
def marshalled(self, context):
soap_env_parent = context.envelope
soap_env_parent.set('xmlns:xsd', 'http://www.w3.org/2001/XMLSchema')
soap_env_parent.unset('xmlns:ns0')
soap_env_parent.unset('xmlns:ns3')
soap_env_parent.unset('xmlns:ns2')
soap_env_parent.set('xmlns:ns2', 'namespace')
factura_client = Client(settings.FACTURA360_URL, plugins=[CorrectNamespace()])
#Setting the Login Object
lg_element = Element('ns2:LoginObject')
soapuser_element = Element('soapusername').setText(settings.FACTURA360_USER)
soappass_element = Element('soappassword').setText(settings.FACTURA360_PASS)
lg_element.append(soapuser_element)
lg_element.append(soappass_element)
factura_client.set_options(soapheaders=lg_element)
#The call to the webservice
invoice = factura_client.service.\
generate_invoice(document, document_type, filetype,
cer, key, settings.FACTURA360_INVOICEPASSWORD)
不幸的是,我的插件函数添加了“xmlns:xsd”和“xmlns:ns2”,但并没有删除其他函数。
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:ns3="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns0="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns1="http://factura360.com/invoice_webservice"
xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:ns2="namespace">
如何删除其他命名空间?
最佳答案
class CorrectNamespace(MessagePlugin):
def marshalled(self, context):
del context.envelope.nsprefixes['ns3']
关于Python - 泡沫。如何编辑 SOAP-ENV :Envelope 的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27283788/
我正在尝试在 python Google App Engine 应用程序中使用 suds。这是回溯: client = Client(url) File "/base/data/home/apps
我在 Apache 下使用 ssl 提供肥皂服务,没有 ssl 的 suds 效果更好。 我有客户端证书(my.crt 和 user.p12 文件)。 我需要如何配置 suds 客户端以使其与 htt
我正在使用 django 开发一个网络,它处理 wsdl。我有一个处理它的示例代码,但它是用 PHP 编写的,我想为我的 django 将它转换为 python。这是 PHP 文件 ... SOAP
我有以下使用 Suds 的简单 python 测试脚本调用 SOAP 网络服务(该服务是用 ASP.net 编写的): from suds.client import Client url = 'ht
我正在创建一个请求,以在 Django 中使用 SUDS (4.0) 来使用 Web 服务。 然而,Suds 没有放置正确的命名空间。 我得到的肥皂信封:
我是一名优秀的程序员,十分优秀!