This repository has been archived.
📚 Archived Status: This repository is no longer actively maintained or updated. It is being preserved for historical reference or potential future use. Issues, pull requests, and contributions are no longer accepted.
SOAP client for Elixir programming language
- Add
soap
to your deps:
def deps do
[{:soap, "~> 1.0"}]
end
- Add
soap
to the list of application dependencies(or just use extra_applications):
def application do
[applications: [:logger, :soap]]
end
Configure version of SOAP protocol. Supported versions 1.1
(default) and 1.2
.
config :soap, :globals, version: "1.1"
The documentation is available on HexDocs.
Parse WSDL file for execution of actions on its basis:
iex(1)> {:ok, wsdl} = Soap.init_model(wsdl_path, :url)
{:ok, parsed_wsdl}
Get list of available operations:
iex(2)> Soap.operations(wsdl)
[
%{
input: %{body: nil, header: nil},
name: "Add",
soap_action: "http://tempuri.org/Add"
},
%{
input: %{body: nil, header: nil},
name: "Subtract",
soap_action: "http://tempuri.org/Subtract"
},
%{
input: %{body: nil, header: nil},
name: "Multiply",
soap_action: "http://tempuri.org/Multiply"
},
%{
input: %{body: nil, header: nil},
name: "Divide",
soap_action: "http://tempuri.org/Divide"
}
]
Call action:
wsdl_path = "http://www.dneonline.com/calculator.asmx?WSDL"
action = "Add"
params = %{intA: 1, intB: 2}
iex(3)> {:ok, response} = Soap.call(wsdl, action, params)
{:ok,
%Soap.Response{
body: "<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body><AddResponse xmlns=\"http://tempuri.org/\"><AddResult>3</AddResult></AddResponse></soap:Body></soap:Envelope>",
headers: [
{"Cache-Control", "private, max-age=0"},
{"Content-Length", "325"},
{"Content-Type", "text/xml; charset=utf-8"},
{"Server", "Microsoft-IIS/7.5"},
{"X-AspNet-Version", "2.0.50727"},
{"X-Powered-By", "ASP.NET"},
{"Date", "Thu, 14 Feb 2019 07:52:04 GMT"}
],
request_url: "http://www.dneonline.com/calculator.asmx",
status_code: 200
}}
Parse response:
iex(4)> Soap.Response.parse(response)
%{AddResponse: %{AddResult: "3"}}
To add SOAP headers, pass in a {headers, params}
tuple instead of just params:
{:ok, %Soap.Response{}} = Soap.call(wsdl, action, {%{Token: "foo"}, params})
We appreciate any contribution and open to future requests.
You can find a list of features and bugs in the issue tracker.
Soap is released under the MIT license, see the LICENSE file.