- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的 SOAP 服务将使用各种无效负载进行测试,以确认返回适当的响应。
在进行测试之前,我想对我的服务进行自己的测试。一些测试涉及删除必填字段。我想使用 zeep 模拟这些测试,但 zeep 不允许我发送请求,如果我想要的数据中不存在任何必填字段,就会给我一个 zeep.exceptions.ValidationError 错误发送。
我可以配置一些设置,以便 zeep 不会因缺少字段而引发错误并发送无效请求吗?
示例代码:
from zeep import Client
from datetime import datetime
wsdl_url = 'http://myservice.com/egservice?wsdl'
payload = {
'ServiceType': 'EgService',
'AvailabilityWindow': [
{'StartDateTime': datetime.now(),
'EndDateTime': datetime.now(),
'Validation': 'VALID'}],
'Confirmation': 'Confirmed',
'DateTimeStamp': datetime.now()
} # N.B No ContractID included
soap_client = Client(wsdl_url)
operation = 'myExampleOperation'
with soap_client.settings(raw_response=True):
response = soap_client.service[operation](**payload)
wsdl的相关部分:
<xs:complexType name="EgMessage">
<xs:sequence>
<xs:element name="ServiceType" type="tns:EgMessage_ServiceTypeType"/>
<xs:element name="ContractID" type="tns:EgMessage_ContractIDType"/>
<xs:element name="AUI" type="tns:EgMessage_AUIType" minOccurs="0"/>
<xs:element name="AvailabilityWindow" type="tns:AvailabilityWindowType" maxOccurs="unbounded"/>
<xs:element name="Confirmation" type="tns:EgMessage_ConfirmationType"/>
<xs:element name="FileReason" type="tns:EgMessage_FileReasonType" minOccurs="0"/>
<xs:element name="DateTimeStamp" type="xs:dateTime"/>
</xs:sequence>
</xs:complexType>
回溯:
Traceback (most recent call last):
File "C:/Users/Thomas.Gabereau/PycharmProjects/pas_rmq/pas_gateway/inbound/test_local_soap.py", line 157, in <module>
status, fault_field, fault = send_to_grid(soap_client, operation, payload)
File "C:/Users/Thomas.Gabereau/PycharmProjects/pas_rmq/pas_gateway/inbound/test_local_soap.py", line 129, in send_to_grid
response = soap_client.service[operation](**payload)
File "C:\Users\Thomas.Gabereau\PycharmProjects\pas_rmq\venv\lib\site-packages\zeep\proxy.py", line 45, in __call__
kwargs,
File "C:\Users\Thomas.Gabereau\PycharmProjects\pas_rmq\venv\lib\site-packages\zeep\wsdl\bindings\soap.py", line 119, in send
operation, args, kwargs, client=client, options=options
File "C:\Users\Thomas.Gabereau\PycharmProjects\pas_rmq\venv\lib\site-packages\zeep\wsdl\bindings\soap.py", line 68, in _create
serialized = operation_obj.create(*args, **kwargs)
File "C:\Users\Thomas.Gabereau\PycharmProjects\pas_rmq\venv\lib\site-packages\zeep\wsdl\definitions.py", line 215, in create
return self.input.serialize(*args, **kwargs)
File "C:\Users\Thomas.Gabereau\PycharmProjects\pas_rmq\venv\lib\site-packages\zeep\wsdl\messages\soap.py", line 74, in serialize
self.body.render(body, body_value)
File "C:\Users\Thomas.Gabereau\PycharmProjects\pas_rmq\venv\lib\site-packages\zeep\xsd\elements\element.py", line 231, in render
self._render_value_item(parent, value, render_path)
File "C:\Users\Thomas.Gabereau\PycharmProjects\pas_rmq\venv\lib\site-packages\zeep\xsd\elements\element.py", line 255, in _render_value_item
return self.type.render(node, value, None, render_path)
File "C:\Users\Thomas.Gabereau\PycharmProjects\pas_rmq\venv\lib\site-packages\zeep\xsd\types\complex.py", line 279, in render
element.render(parent, element_value, child_path)
File "C:\Users\Thomas.Gabereau\PycharmProjects\pas_rmq\venv\lib\site-packages\zeep\xsd\elements\indicators.py", line 242, in render
element.render(parent, element_value, child_path)
File "C:\Users\Thomas.Gabereau\PycharmProjects\pas_rmq\venv\lib\site-packages\zeep\xsd\elements\element.py", line 225, in render
self.validate(value, render_path)
File "C:\Users\Thomas.Gabereau\PycharmProjects\pas_rmq\venv\lib\site-packages\zeep\xsd\elements\element.py", line 280, in validate
"Missing element %s" % (self.name), path=render_path
zeep.exceptions.ValidationError: Missing element ContractID(myExampleOperation.ContractID)
最佳答案
我遇到了同样的问题,然后找到了解决该问题的方法。有一个选项可以跳过必填字段的验证。您必须将要跳过的属性的值设置为 xsd.skipvalue。在您的场景中,将contractId的值设置为有效负载对象中的xsd.skipvalue
from zeep import xsd
payload = {
'ServiceType': 'EgService',
'ContractID':xsd.SkipValue,
'AvailabilityWindow': [
{'StartDateTime': datetime.now(),
'EndDateTime': datetime.now(),
'Validation': 'VALID'}],
'Confirmation': 'Confirmed',
'DateTimeStamp': datetime.now()
}
关于python - Zeep 发送缺少强制标签的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57905715/
我想用 Zeep 解析一个 WSDL 文件并退出: 所有操作 为每个操作请求 xml 消息 有关解析 wsdl 的任何示例? 我想我应该使用 zeep.wsdl 和 parse_service 方法?
Python SOAP客户端库Zeep支持附件吗? 我在 documentation 中真的找不到任何东西. 想法是以 XML 格式发送带有一些附件的 SOAP 请求。我想这样做的常规方法是一条多部分
我正在使用 Python zeep发出 SOAP 请求。对于 SSL 验证,HostHeaderSSLAdapter添加为我的 URL https://dev_alias:8096/some_soap
我的 SOAP 服务将使用各种无效负载进行测试,以确认返回适当的响应。 在进行测试之前,我想对我的服务进行自己的测试。一些测试涉及删除必填字段。我想使用 zeep 模拟这些测试,但 zeep 不允许我
我一直在使用 python zeep 检查 WSDL 文档并生成相应的代码以使用 wsdl 文档中的服务和类型。 下面的代码是一个简短的例子。它部分起作用。问题是:这些参数并不是 web 服务正在等待
我正在尝试创建一个使用 WSDL 文件并生成适当的 SOAP 消息的客户端。这就是我创建客户端的方式: client = Client( wsdl=wsdl ,tran
我尝试使用 python-zeep 包来使用一些肥皂服务( ID3 Global ) 这似乎是可行的,对最近添加的功能(WSSE 身份验证和使用多个绑定(bind)的可能性)表示赞赏 现在,我尝试循环
我正在为一段使用 zeep 访问 SOAP API 的代码编写单元测试,因此我想模拟 zeep。在我的实际代码中,它看起来像这样: from zeep import Client def do_som
我有两个单独的 WSDL 文件提供给我以与服务交互,一个 WSDL 文件只提供一种登录和生成访问 token 的方法。另一个 WSDL 文件提供了与系统实际交互的方法。 如果我用要登录的第一个 WSD
我正在尝试连接到 SOAP 网络服务并使用 pandas 放在 table 上。 Zeep 给我这个列表: [{ 'ssPeca': '103', 'ssQtd': '1',
当我运行以下代码时,我不断收到以下错误:here is an error in XML document (113, 25)。 ---> 字符串 '' 不是有效的 bool 值。 我不明白为什么会这样
我有使用 zeep 创建肥皂客户端的代码。我的服务器没有返回 wsdl 文件,但我在本地有它。 同步版本的工作原理如下: import uuid from os import path import
我正在使用 zeep 调用 SOAP 网络服务。即使该方法存在于 WSDL 中,它也会抛出错误 client = Client(self.const.soap_url) client.service.
我需要实现 SPML接口(interface),最终通过 HTTP(s) 执行 SOAP 请求。我有一个 wsdl 可以归结为: [...] 如您所见,唯一定义的请求元
我是 zeep 的新手。 我有以下效果很好: import zeep from zeep.cache import SqliteCache from zeep.transports import Tr
我需要通过 wsdl 使用 API,并且我正在尝试弄清楚 zeep 模块是如何工作的。该模块是使用“pip install”安装的,每次都显示相同的错误。 导入错误:无法从“zeep”导入名称“Cli
我有以下 python 代码来设置 SOAP 请求的 header : ebsheader = xsd.Element( '{http://ebs.health.ontario.ca/}EBS
我正在尝试让 zeep 打开一个 WSDL,该 WSDL 在名称的开头具有带点的绑定(bind),并收到 ValueError: Invalid tag name '.USXMLWSSoapBindi
我正在尝试使用此处发布的特别神秘的 WSDL SOAP 服务: https://api.business.govt.nz/registry/resource/_system/governance/ap
我必须在项目中使用 SOAP API。对于特定方法,我必须发送复杂类型。 这个复杂类型的声明如下:
我是一名优秀的程序员,十分优秀!