Send SOAP message
This guide describes how to send a SOAP message to an endpoint and process the result.
We will use the https://www.dataaccess.com/webservicesserver/NumberConversion.wso to demo this use case and convert 500 to text and make that into an issue.
Step 1.
Create a new Action, do not select any template to leave the content type blank.
Step 2
On the headers section add
Key | Value |
---|---|
Content-Type | text/xml |
For some system it requires you to add SOAPAction header example below how it may look like for MS SQL server soap action.
Key |
|
---|---|
Content-Type | text/xml |
SOAPAction |
ref https://learn.microsoft.com/en-us/openspecs/sql_server_protocols/ms-ssnws/bb3d9ea3-6f43-4c72-afc2-c873b304dcde
Step 3
Add the envelope XML as body
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<NumberToDollars xmlns="http://www.dataaccess.com/webservicesserver/">
<dNum>500</dNum>
</NumberToDollars>
</soap:Body>
</soap:Envelope>
The body can be formatted to fit the envelope of the target system. In our case we will send in 500 as params. You may use https://rixter.atlassian.net/wiki/spaces/RIFJ/pages/1090682914 to send issue data or any calculated groovy data.
Step 4 - Process the result
The result will come back as XML and need to be parsed to be accessible by iHub, this is done by adding a .
Below is our example Groovy that parse the xml to json and picks the result and returns that.
We will name this {{SOAP}} and access it in our child action.
import org.json.JSONObject
import org.json.XML
JSONObject xmlJSONObj = XML.toJSONObject(response)
xmlJSONObj["soap:Envelope"]["soap:Body"]["m:NumberToDollarsResponse"]["m:NumberToDollarsResult"]
Step 5 - create an issue named the same as the result
Create a new Action, select the Jira Core template category and the Create Issue template.
Add a name to the action and select the SOAP - Number to Dollar action created in Step 1 as parent. This will pass the response down to the child. Optional you may create a Group to make a more logical sturctue.
Below is the body that we POST to {{baseUrl}}/rest/api/2/issue
Notice the {{SOAP}} variable being referenced in the body
{
"fields": {
"project": {
"id": "12000"
},
"summary": "{{SOAP}}",
"issuetype": {
"id": "10004"
},
"labels": [
"from_soap"
]
}
}