Hello,
I am currently trying to make SOAP call to Oracle Right Now(ORN) Enterprise. ORN provides WSDL however I was not able to connect to the WSDL via Web Service smart node, getting 'An error occurred while processing the WSDL. It may not be a valid WSDL 1.1 document. (APNX-1-4041-002)'. tried with third party SOAP test tool and it worked. I am guessing the WSDL is currently not supported by Appian.
Is there an another way to make SOAP call other than Web service smart node?
I was looking into 'Send HTTP Request Plug-in' plug in. The plug in description says it supports to send SOAP XML to a Web Service but didn't provide further instructions.
If someone can provide more high level details implementation direction or any other approach that I can try, I would really appreciated.
FYI, the following is the example SOAP XML provided ORN for the operation I want to use.
<soapenv:Envelope xmlns:soapenv='schemas.xmlsoap.org/.../'> <soapenv:Header xmlns:rnm='urn:messages.ws.rightnow.com/v1_3'> <rnm:ClientInfoHeader> <rnm:AppID>IncidentResponse001.xml</rnm:AppID> </rnm:ClientInfoHeader> <wsse:Security soapenv:mustUnderstand="false" xmlns:wsse="docs.oasis-open.org/.../oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wssu="docs.oasis-open.org/.../oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsse:UsernameToken> <wsse:Username>admin123</wsse:Username> <wsse:Password wsse:Type="docs.oasis-open.org/.../oasis-200401-wss-username-token-profile-1.0 </wsse:UsernameToken> </wsse:Security> </soapenv:Header> <soapenv:Body> <rnm:SendIncidentResponse xmlns:soapenc='schemas.xmlsoap.org/.../' xmlns:xs='www.w3.org/.../XMLSchema' xmlns:xsi='www.w3.org/.../XMLSchema-instance' xmlns:rnm='urn:messages.ws.rightnow.com/v1_3' xmlns:rno='urn:objects.ws.rightnow.com/v1_3' xmlns:rng='urn:generic.ws.rightnow.com/v1_3' xmlns:rnb='urn:base.ws.rightnow.com/v1_3' xmlns:rnok='urn:base.ws.rightnow.com/v1_3'> <rnm:IncidentResponse> <rno:Incident> <rno:PrimaryContact> <rno:Contact> <rnb:ID id="1"/> </rno:Contact> </rno:PrimaryContact> <rno:Subject>Overheating of the device</rno:Subject> <rno:Threads> <rno:ThreadList action='add'> <rno:Channel> <rnb:Name>Email</rnb:Name> </rno:Channel> <rno:EntryType> <rnb:ID id='2'/> </rno:EntryType> <rno:Text>Thank you for reaching out!</rno:Text> </rno:ThreadList> </rno:Threads> </rno:Incident> <rno:CC> <rno:EmailAddresses>bob@example.com</rno:EmailAddresses> </rno:CC> </rnm:IncidentResponse> </rnm:SendIncidentResponse> </soapenv:Body> </soapenv:Envelope>
Discussion posts and replies are publicly visible
Sure. The National Weather Service has some information accessible via a SOAP protocol:
The WSDL is
When you load the endpoint into SOAPUI, you get a list of available services. The one I used is LatLonListZipcode.
Here is the sample request:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ndf="https://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl"> <soapenv:Header/> <soapenv:Body> <ndf:LatLonListZipCode soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <zipCodeList xsi:type="dwml:zipCodeListType" xmlns:dwml="https://graphical.weather.gov/xml/DWMLgen/schema/DWML.xsd">20191</zipCodeList> </ndf:LatLonListZipCode> </soapenv:Body> </soapenv:Envelope>
and the response:
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:LatLonListZipCodeResponse xmlns:ns1="https://graphical.weather.gov/xml/DWMLgen/wsdl/ndfdXML.wsdl"> <listLatLonOut xsi:type="xsd:string"><?xml version='1.0'?><dwml version='1.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='https://graphical.weather.gov/xml/DWMLgen/schema/DWML.xsd'><latLonList>38.9521,-77.3452</latLonList></dwml></listLatLonOut> </ns1:LatLonListZipCodeResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Copying and pasting the request into Appian we have:
HI Josh,
My SOAP call is working correctly now, It didn't work first so I thought it was because of WS security header so I was looking into WS related appian function such as wsConfig(). It turns out I wasn't using correct 'soapAction' value. Once I have correct header it did work. Your direction was very very helpful. Thank you very much.
The step I followed;
1. Tried to use Web Service smart node, when I test connection WSDL URL, it did throw out not a valid WSDL error message.
2. Use SOAP UI to load WSDL and select the operation that i want to user. Set required values and test the operation and confirmed it was working in SOAP UI.
3. While SOAP UI testing, it did not required any header.
3. Copy the XML from SOAP UI and tested in Appian without header and it failed.
4. Added soapAction and content-Type header configuration it's working as expected.
FYI, I tested with 'Web And XML Extensions' Plug in and tested it in SAIL as well and confirmed it's working in SAIL as well.
load( local!endpoint: "payoneer--upgrade.custhelp.com/.../soap", /* the SOAP envelope */ local!Body: "<soapenv:Envelope xmlns:soapenv=""schemas.xmlsoap.org/.../"" xmlns:v1=""urn:messages.ws.rightnow.com/v1_4"" xmlns:v11=""urn:objects.ws.rightnow.com/v1_4"" xmlns:v12=""urn:base.ws.rightnow.com/v1_4"" xmlns:v13=""urn:generic.ws.rightnow.com/v1_4""> <soapenv:Header> <v1:ClientInfoHeader> <v1:AppID>IncidentResponse001.xml</v1:AppID> </v1:ClientInfoHeader> <wsse:Security xmlns:wsse=""docs.oasis-open.org/.../oasis-200401-wss-wssecurity-secext-1.0.xsd"" soapenv:mustUnderstand=""1""> <wsse:UsernameToken xmlns:wsu=""docs.oasis-open.org/.../oasis-200401-wss-wssecurity-utility-1.0.xsd"" wsu:Id=""UsernameToken-3902281""> <wsse:Username>YOURUSERNAME</wsse:Username> <wsse:Password Type=""docs.oasis-open.org/.../oasis-200401-wss-username-token-profile-1.0 </wsse:UsernameToken> </wsse:Security> </soapenv:Header> <soapenv:Body> <v1:SendIncidentResponse> <v1:IncidentResponse> <v11:Incident> <v11:PrimaryContact> <v11:Contact> <v12:ID id=""5518344""/> </v11:Contact> </v11:PrimaryContact> <v11:Subject>This Incident for email testing E</v11:Subject> <v11:Threads> <v11:ThreadList action=""add""> <v11:Channel> <v12:Name>Email</v12:Name> </v11:Channel> <v11:EntryType> <v12:ID id=""2""/> </v11:EntryType> <v11:MailHeader>This is mail Header for testing E</v11:MailHeader> <v11:Text>This is test email body E</v11:Text> </v11:ThreadList> </v11:Threads> </v11:Incident> </v1:IncidentResponse> </v1:SendIncidentResponse> </soapenv:Body></soapenv:Envelope>", local!misResponse: httppostwithresponse( endpoint: local!endpoint, paramNames: {}, paramValues: {}, headerNames: {"soapAction","Content-Type"}, headerValues: {"SendIncidentResponse","text/xml;charset=UTF-8"}, body: local!Body, user: "appian_client", password: "de@vGpp1h4tAn", domain: null, timeout: 25, proxyHost: null, proxyPort: null, socketTimeout: 25 ), { a!paragraphField( readOnly: true, value: local!misResponse ) } )
I could not find documents about "Web and XML extension Plug-in" on Appian.com. Would you send the links? thx.
Hi Josh, about a year ago I was able to call a SOAP service using integration object (as you explained above) and I had to manipulate the response using the plugin function xmltojson() and then converting the XML into JSON. I was wondering if you know of any other way to parse the XML response and convert to JSON?
Thanks Josh, this helped