• Stars
    star
    134
  • Rank 270,967 (Top 6 %)
  • Language
    Elixir
  • License
    MIT License
  • Created almost 7 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

SOAP client for Elixir programming language

Soap

Build Status Code coverage Module Version Hex Docs Total Download License Last Updated

SOAP client for Elixir programming language.

Installation

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

Configuration

Configure version of SOAP protocol. Supported versions 1.1(default) and 1.2:

config :soap, :globals, version: "1.1"

Usage

The documentation is available on HexDocs.

Parse WSDL file for execution of actions on its basis:

iex> {:ok, wsdl} = Soap.init_model(wsdl_path, :url)
{:ok, parsed_wsdl}

Get list of available operations:

iex> 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> {: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> 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})

Contributing

We appreciate any contribution and open to future requests.

You can find a list of features and bugs in the issue tracker.

Copyright and License

Copyright (c) 2017 Petr Stepchenko

This work is free. You can redistribute it and/or modify it under the terms of the MIT License. See the LICENSE.md file for more details.