- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
All,
I am trying to build a SOAP API. The API requires one of the inputs to be a table of information. Can anyone kindly provide an example of the correct format to read in a table as an input from XML Soap invocation call. Appreciate your help.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
I never used SOAP, but have you seen this?
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
@ChrisNZ,
Thank you for your response. Yes, I have seen this. It only covers single parameters, however I am trying to look into passing a table as input.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
I am afraid I am out of my depth, but maybe @ArvAmundson or @MagnusGustavsson or @BrunoMueller would be able to help?
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Just to clarify. Are you trying to take one or more columns from a SAS table and populate fields in the request XML file that you submit with the PROC SOAP?
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
@ArvAmundson,
No. I am trying to just pass a table from another application for e.g. say C# pass a table in its XML soap request to the service
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Have you already defined the Stored Process with Input/Output data source definitions and looked at the WSDL coming back from the webservice, this should reflect how to provide the data.
Here is sample code on how to access the XML data passed in:
libname ws_ixml xmlv2;
proc copy in=ws_ixml out=work;
run;
proc contents data=work._all_ ;
run;
proc print data=work.t1;
run;
The definition of the WS_IXML looks like this:
The Web Service request looks like this:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:biw="http://www.sas.com/xml/namespace/biwebservices"> <soapenv:Header/> <soapenv:Body> <biw:ws_input_data> <biw:streams> <biw:ws_ixml contentType="?"> <biw:Value> <!--You may enter ANY elements at this point--> <root> <t1> <c1>r1c1</c1> <c2>r1c2</c2> <c3>123</c3> <c4>2018-09-05</c4> </t1> <t1> <c1>r2c1</c1> <c2>r2c2</c2> <c3>456</c3> <c4>2018-09-05</c4> </t1> </root> </biw:Value> </biw:ws_ixml> </biw:streams> </biw:ws_input_data> </soapenv:Body> </soapenv:Envelope>
The request xml was taken from SoapUI.
So the XML between the <biw:Value></biw:Value> tags can be read using the XMLV2 libname engine.
The XML data passed in to the WS_IXML libref can be read without using a XML Map file.
<root> is the root tag, <t1> is the table name, each repeating <t1> ... </t1> is treated as an observation. The <c4> column is an example how to pass in a date.
You can get the WSDL of a Stored process called as a SAS Webservice like this:
http://host:port/SASBIWS/services/<metadata folder name>/<stored process name>?WSDL
Hope this helps