您知道SOAPUI如何为SOAP Web服务生成完整的XML模板吗?我想这样做,但是要使用Python模块Zeep。
我正在关注here中的第一个示例。我也指的是Zeep Documentation。
注意:我使用的Web服务是面向公众的Workday Web服务,没有客户数据。更多信息是here。
这是我的代码:
wsdl = "https://community.workday.com/sites/default/files/file-hosting/productionapi/Resource_Management/v33.1/Resource_Management.wsdl"
client = Client(wsdl)
message = client.create_message(client.service, "Get_Purchase_Items")
tree = ET.ElementTree(message)
xml = tree.write('test.xml',pretty_print=True)
问题:这不会像SOAPUI那样创建完整的XML模板。
这是我的代码创建的内容:
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Body>
<ns0:Get_Purchase_Items_Request xmlns:ns0="urn:com.workday/bsvc"/>
</soap-env:Body>
</soap-env:Envelope>
这是SOAPUI创建的(也是我从zeep中寻找的):
<soapenv:Header>
<bsvc:Workday_Common_Header>
<!--Optional:-->
<bsvc:Include_Reference_Descriptors_In_Response>?</bsvc:Include_Reference_Descriptors_In_Response>
</bsvc:Workday_Common_Header>
</soapenv:Header>
<soapenv:Body>
<bsvc:Get_Purchase_Items_Request bsvc:version="?">
<!--You have a CHOICE of the next 2 items at this level-->
<!--Optional:-->
<bsvc:Request_References>
<!--1 or more repetitions:-->
<bsvc:Purchase_Item_Reference bsvc:Descriptor="?">
<!--Zero or more repetitions:-->
<bsvc:ID bsvc:type="?">?</bsvc:ID>
</bsvc:Purchase_Item_Reference>
</bsvc:Request_References>
<!--Optional:-->
<bsvc:Request_Criteria>
<!--Zero or more repetitions:-->
<bsvc:Supplier_Reference bsvc:Descriptor="?">
<!--Zero or more repetitions:-->
<bsvc:ID bsvc:type="?">?</bsvc:ID>
</bsvc:Supplier_Reference>
<!--Zero or more repetitions:-->
<bsvc:Supplier_Contract_Reference bsvc:Descriptor="?">
<!--Zero or more repetitions:-->
<bsvc:ID bsvc:type="?">?</bsvc:ID>
</bsvc:Supplier_Contract_Reference>
<!--Optional:-->
<bsvc:Return_All_Advanced_Pricing>?</bsvc:Return_All_Advanced_Pricing>
<!--Optional:-->
<bsvc:Return_Active_Advanced_Pricing>?</bsvc:Return_Active_Advanced_Pricing>
<!--Optional:-->
<bsvc:Exclude_Pricing_Calculated_by_Conversion_Factor>?</bsvc:Exclude_Pricing_Calculated_by_Conversion_Factor>
</bsvc:Request_Criteria>
<!--Optional:-->
<bsvc:Response_Filter>
<!--Optional:-->
<bsvc:As_Of_Effective_Date>?</bsvc:As_Of_Effective_Date>
<!--Optional:-->
<bsvc:As_Of_Entry_DateTime>?</bsvc:As_Of_Entry_DateTime>
<!--Optional:-->
<bsvc:Page>?</bsvc:Page>
<!--Optional:-->
<bsvc:Count>?</bsvc:Count>
</bsvc:Response_Filter>
<!--Optional:-->
<bsvc:Response_Group>
<!--Optional:-->
<bsvc:Include_Reference>?</bsvc:Include_Reference>
</bsvc:Response_Group>
</bsvc:Get_Purchase_Items_Request>
</soapenv:Body>
</soapenv:Envelope>
问题
我发布了similar question two months ago,但是找到解决方法后继续前进。但是,我一直回到这个问题上,因为它确实困扰着我。因此,如果有人可以帮助我,我将非常感激!
答案 0 :(得分:0)
这里的问题似乎是第三行,您没有将任何参数传递给create_message
调用。
如果您参考文档,则会发现诸如Request_References
,Response_Filter
等XML元素。由于没有传递任何元素,因此它只是生成一个空XML。
以下示例代码可能适用于您的情况(未经测试):
wsdl = "https://community.workday.com/sites/default/files/file-hosting/productionapi/Resource_Management/v33.1/Resource_Management.wsdl"
client = Client(wsdl)
effective_date = datetime.datetime.strptime('2020-10-01', '%Y-%m-%d')
entry_date = datetime.datetime.strptime('2020-12-01', '%Y-%m-%d')
get_purchase_response_filter_type = client.get_type('ns0:Response_Filter')
response_filter_element = get_purchase_response_filter_type(
As_Of_Effective_Date=effective_date,
As_Of_Entry_DateTime=entry_date
)
message = client.create_message(client.service, "Get_Purchase_Items", Response_Filter=response_filter_element)
tree = ET.ElementTree(message)
xml = tree.write('test.xml',pretty_print=True)
如果您需要传递任何soap标头,则create_message
也接受一个_soapheader
参数。