Heim >Backend-Entwicklung >Golang >Wie kann ich die SOAP/WSDL-Verarbeitung in Go mithilfe des xmlutil-Pakets vereinfachen?

Wie kann ich die SOAP/WSDL-Verarbeitung in Go mithilfe des xmlutil-Pakets vereinfachen?

DDD
DDDOriginal
2024-12-08 13:12:12359Durchsuche

How Can I Simplify SOAP/WSDL Handling in Go Using the xmlutil Package?

Unterstützung von SOAP/WSDL in Go

Trotz der fehlenden nativen Unterstützung für WSDL in Go ist es möglich, SOAP-Anfragen manuell zu kodieren und zu dekodieren und Antworten. Dieser Prozess kann jedoch kompliziert sein und je nach Server unterschiedlich sein.

Alternativer Ansatz mit GitHub-Paket

Um diese Herausforderungen zu bewältigen, wurde das GitHub-Paket xmlutil (https:// github.com/webconnex/xmlutil) bietet eine Lösung. Es vereinfacht die SOAP-Verarbeitung, indem es Ihnen ermöglicht, anzugeben, dass ein Server xsi-Typen benötigt, wodurch komplexe Anpassungen überflüssig werden.

Implementierungsbeispiel

Unten finden Sie ein Beispiel für die Verwendung von xmlutil um mit SOAP umzugehen:

package main

import (
    "bytes"
    "fmt"
    "github.com/webconnex/xmlutil"
    "log"
)

type Envelope struct {
    Body `xml:"soap:"`
}

type Body struct {
    Msg interface{}
}

type MethodCall struct {
    One string
    Two string
}

type MethodCallResponse struct {
    Three string
}

func main() {
    x := xmlutil.NewXmlUtil()
    x.RegisterNamespace("http://www.w3.org/2001/XMLSchema-instance", "xsi")
    x.RegisterNamespace("http://www.w3.org/2001/XMLSchema", "xsd")
    x.RegisterNamespace("http://www.w3.org/2003/05/soap-envelope", "soap")
    x.RegisterTypeMore(Envelope{}, xml.Name{"http://www.w3.org/2003/05/soap-envelope", ""},
        []xml.Attr{
            xml.Attr{xml.Name{"xmlns", "xsi"}, "http://www.w3.org/2001/XMLSchema-instance"},
            xml.Attr{xml.Name{"xmlns", "xsd"}, "http://www.w3.org/2001/XMLSchema"},
            xml.Attr{xml.Name{"xmlns", "soap"}, "http://www.w3.org/2003/05/soap-envelope"},
        })
    x.RegisterTypeMore("", xml.Name{}, []xml.Attr{
        xml.Attr{xml.Name{"http://www.w3.org/2001/XMLSchema-instance", "type"}, "xsd:string"},
    })

    buf := new(bytes.Buffer)
    buf.WriteString(`<?xml version="1.0" encoding="utf-8"?>`)
    buf.WriteByte('\n')
    enc := x.NewEncoder(buf)
    env := &Envelope{Body{MethodCall{
        One: "one",
        Two: "two",
    }}}
    if err := enc.Encode(env); err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%s\n\n", buf.Bytes())

    dec := x.NewDecoder(bytes.NewBufferString(`<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope>
    <soap:Body>
        <MethodCallResponse>
            <Three>three</Three>
        </MethodCallResponse>
    </soap:Body>
</soap:Envelope>`))
    var resp MethodCallResponse
    if err := dec.DecodeElement(&resp); err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%#v\n\n", resp)
}

Das obige ist der detaillierte Inhalt vonWie kann ich die SOAP/WSDL-Verarbeitung in Go mithilfe des xmlutil-Pakets vereinfachen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn