gpt4 book ai didi

python - 解码错误 : For input string: ""

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:51 24 4
gpt4 key购买 nike

获取 unmarshalling Error: For input string: "" 。这可能意味着 wsdl 无法反序列化数据。但我的 xml 格式正确。为什么 wsdl 服务在此 xml 上阻塞?

我正在使用 Suds + python。这是 soap 服务的 wsdl:

<xs:element name="parameters">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="entry">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="key" type="xs:string"/>
<xs:element minOccurs="0" name="value" type="xs:anyType"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>

Python代码:

client = Client(url)
query = client.factory.create('query')
listval1 = {"key":"*:*","value":"*:*"}
query.parameters.entry = [listval1]
response = client.service.search(query)

由 suds 创建的 XML 消息:

<query>
<parameters>
<entry>
<key>*:*</key>
<value>*:*</value>
</entry>
</parameters>
</query>

我继续收到解码错误。这是因为 xsi:type="ns0:string" 没有被 suds 添加到 keyvalue 吗?如果是那么如何添加呢?

最佳答案

我使用 a MessagePlugin 解决了这个问题概念。

from suds.client import Client
from suds.plugin import MessagePlugin

class AnyTypePlugin(MessagePlugin):
mapping = {
'id': 'xsd:int',
'title': 'xsd:string',
}
def marshalled(self, context):
modified = False

body = context.envelope.getChild('Body')
query = body.getChild("query")
if query:
params = query.getChild("parameters")
if params:
entries = params.getChildren("entry")
if entries:
for entry in entries:
key = entry.getChild("key").getText()
if key in self.mapping:
attr = Attribute('xsi:type', self.mapping[key])
entry.getChild("value").append(attr)
modified = True
if modified:
xsd_attr = Attribute('xmlns:xsd', 'http://www.w3.org/2001/XMLSchema')
context.envelope.append(xsd_attr)

url = "some wsdl url"
client = Client(url, plugins=[AnyTypePlugin()])

通过这种方式,您可以根据作为条目传递的键进行控制,您可以正确设置类型。

关于python - 解码错误 : For input string: "",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8211783/

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