Transferring property values using a WSDL
Hello,
I using SOAPUI to test a suite of CICS webservices. I have the corresponding WSDLs.
But I can't find the way to transfer values from a response to a request.
Here is a samble of the wsdl. In the response, there is a table (here 2 occurs/lignes)
<SOAP-ENV:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:gdox="http://www.GDOXBAZ.GDOXBAZI.Request.com" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<GDOXBAZOperationResponse xmlns="http://www.GDOXBAZ.GDOXBAZO.Response.com">
<data_appli>
<exports>
<export_appli_document>
<export_tab_doc>
<export_tab_doc_lig>
<export_id_doc_stk>80</export_id_doc_stk>
</export_tab_doc_lig>
</export_tab_doc>
<export_tab_doc>
<export_tab_doc_lig>
<export_id_doc_stk>81</export_id_doc_stk>
</export_tab_doc_lig>
</export_tab_doc>
</export_appli_document>
</exports>
</data_appli>
</GDOXBAZOperationResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:gdox="http://www.GDOXBA0.GDOXBA0I.Request.com">
<soapenv:Header/>
<soapenv:Body>
<gdox:GDOXBA0Operation>
<gdox:data_appli>
<gdox:imports>
<gdox:import_id_doc_stk>80</gdox:import_id_doc_stk>
</gdox:imports>
</gdox:data_appli>
</gdox:GDOXBA0Operation>
</soapenv:Body>
</soapenv:Envelope>
Based on what I have seen before I've tried :
declare namespace SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/";
//SOAP-ENV:Body/GDOXBAZOperationResponse/data_appli/exports/export_appli_document/export_tab_doc[1]/export_tab_doc_lig/export_id_doc_stk
moving the [1] to different lvels and without it also. But also "missing match". For now I'm trying to move it to a tempory variable (property?) until I can access the source. But in fine I want to move it directly in the import variable.
Anyone can help me? Thank you very much.
Hi Aksingia,
You can use inline property expansion:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:gdox="http://www.GDOXBA0.GDOXBA0I.Request.com"> <soapenv:Header/> <soapenv:Body> <gdox:GDOXBA0Operation> <gdox:data_appli> <gdox:imports> <gdox:import_id_doc_stk>${Previous Step Name#Response#(//*:export_id_doc_stk)[1]}</gdox:import_id_doc_stk> </gdox:imports> </gdox:data_appli> </gdox:GDOXBA0Operation> </soapenv:Body> </soapenv:Envelope>or the Property Transfer step with this config:
Source: the source step
Property: Response or ResponseAsXml
Path language: XPath
Expression:(//*:export_id_doc_stk)[1]
(meaning: find all "export_id_doc_stk" nodes and take the first match)
Target: the target step
Property: Request
Path language: XPath
Expression://*:import_id_doc_stk
In XPath, "//" means "find the element on any level" and "*" matches any namespace prefix, allowing for shorter and simpler notation.