Popularity
6.9
Declining
Activity
0.0
Declining
486
13
171

Programming language: Go
License: MIT License
Tags: API     Web Frameworks     Client     SOAP    
Latest version: v1.4.4

Go Soap alternatives and similar packages

Based on the "Web Frameworks" category.
Alternatively, view Go Soap alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of Go Soap or a related project?

Add another 'Web Frameworks' Package

README

Go Soap Build Status GoDoc Go Report Card Coverage Status patreon Known Vulnerabilities

package to help with SOAP integrations (client)

Install

go get github.com/tiaguinho/gosoap

Examples

Basic use

package main

import (
    "encoding/xml"
    "log"
    "net/http"
    "time"

    "github.com/tiaguinho/gosoap"
)

// GetIPLocationResponse will hold the Soap response
type GetIPLocationResponse struct {
    GetIPLocationResult string `xml:"GetIpLocationResult"`
}

// GetIPLocationResult will
type GetIPLocationResult struct {
    XMLName xml.Name `xml:"GeoIP"`
    Country string   `xml:"Country"`
    State   string   `xml:"State"`
}

var (
    r GetIPLocationResponse
)

func main() {
    httpClient := &http.Client{
        Timeout: 1500 * time.Millisecond,
    }
    soap, err := gosoap.SoapClient("http://wsgeoip.lavasoft.com/ipservice.asmx?WSDL", httpClient)
    if err != nil {
        log.Fatalf("SoapClient error: %s", err)
    }

    // Use gosoap.ArrayParams to support fixed position params
    params := gosoap.Params{
        "sIp": "8.8.8.8",
    }

    res, err := soap.Call("GetIpLocation", params)
    if err != nil {
        log.Fatalf("Call error: %s", err)
    }

    res.Unmarshal(&r)

    // GetIpLocationResult will be a string. We need to parse it to XML
    result := GetIPLocationResult{}
    err = xml.Unmarshal([]byte(r.GetIPLocationResult), &result)
    if err != nil {
        log.Fatalf("xml.Unmarshal error: %s", err)
    }

    if result.Country != "US" {
        log.Fatalf("error: %+v", r)
    }

    log.Println("Country: ", result.Country)
    log.Println("State: ", result.State)
}

Set Custom Envelope Attributes

package main

import (
    "encoding/xml"
    "log"
    "net/http"
    "time"

    "github.com/tiaguinho/gosoap"
)

// GetIPLocationResponse will hold the Soap response
type GetIPLocationResponse struct {
    GetIPLocationResult string `xml:"GetIpLocationResult"`
}

// GetIPLocationResult will
type GetIPLocationResult struct {
    XMLName xml.Name `xml:"GeoIP"`
    Country string   `xml:"Country"`
    State   string   `xml:"State"`
}

var (
    r GetIPLocationResponse
)

func main() {
    httpClient := &http.Client{
        Timeout: 1500 * time.Millisecond,
    }
    // set custom envelope
    gosoap.SetCustomEnvelope("soapenv", map[string]string{
        "xmlns:soapenv": "http://schemas.xmlsoap.org/soap/envelope/",
        "xmlns:tem": "http://tempuri.org/",
    })

    soap, err := gosoap.SoapClient("http://wsgeoip.lavasoft.com/ipservice.asmx?WSDL", httpClient)
    if err != nil {
        log.Fatalf("SoapClient error: %s", err)
    }

    // Use gosoap.ArrayParams to support fixed position params
    params := gosoap.Params{
        "sIp": "8.8.8.8",
    }

    res, err := soap.Call("GetIpLocation", params)
    if err != nil {
        log.Fatalf("Call error: %s", err)
    }

    res.Unmarshal(&r)

    // GetIpLocationResult will be a string. We need to parse it to XML
    result := GetIPLocationResult{}
    err = xml.Unmarshal([]byte(r.GetIPLocationResult), &result)
    if err != nil {
        log.Fatalf("xml.Unmarshal error: %s", err)
    }

    if result.Country != "US" {
        log.Fatalf("error: %+v", r)
    }

    log.Println("Country: ", result.Country)
    log.Println("State: ", result.State)
}

Set Header params

    soap.HeaderParams = gosoap.SliceParams{
        xml.StartElement{
            Name: xml.Name{
                Space: "auth",
                Local: "Login",
            },
        },
        "user",
        xml.EndElement{
            Name: xml.Name{
                Space: "auth",
                Local: "Login",
            },
        },
        xml.StartElement{
            Name: xml.Name{
                Space: "auth",
                Local: "Password",
            },
        },
        "P@ssw0rd",
        xml.EndElement{
            Name: xml.Name{
                Space: "auth",
                Local: "Password",
            },
        },
    }