Heim >Backend-Entwicklung >Golang >Wie kann ich SOAP-Anfragen und -Antworten ohne direkte WSDL-Unterstützung verarbeiten?
WSDL/SOAP-Unterstützung in Go
Während es in Go keine direkte Unterstützung für WSDL gibt, stehen mehrere Optionen für den Umgang mit SOAP zur Verfügung Anfragen und Antworten.
Erstellen von SOAP-Anfragen Manuell
Das Standardpaket „coding/xml“ kann zum manuellen Erstellen von SOAP-Anfragen verwendet werden, es fehlt jedoch die erforderliche Funktionalität, um bestimmte Aspekte von SOAP zu verarbeiten, wie z. B. Namespaces und Präfixe.
Verwenden der xmlutil-Bibliothek
Die Bibliothek github.com/webconnex/xmlutil bietet mehr robuste Lösung für die Verarbeitung von SOAP-Anfragen und -Antworten. Es umfasst Funktionen wie:
Manuelles Dekodieren von SOAP Antworten
Um SOAP-Antworten zu dekodieren, können Sie das Paket „encoding/xml“ oder Bibliotheken wie xmlutil verwenden. Der Prozess beinhaltet die Verwendung des Decoders, um die XML-Antwort zu analysieren und die gewünschten Daten zu extrahieren.
Beispiel für die Verwendung von xmlutil
Hier ist eine modifizierte Version des in der Antwort bereitgestellten Beispiels :
package main import ( "bytes" "github.com/webconnex/xmlutil" "log" "strings" "encoding/xml" ) 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(`<soap:Envelope><soap:Body><MethodCall><One>one</One><Two>two</Two></MethodCall></soap:Body></soap:Envelope>`) enc := x.NewEncoder(buf) env := &Envelope{Body{MethodCall{ One: "one", Two: "two", }}} if err := enc.Encode(env); err != nil { log.Fatal(err) } response := `<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Body> <MethodCallResponse> <Three>three</Three> </MethodCallResponse> </soap:Body> </soap:Envelope>` dec := x.NewDecoder(strings.NewReader(response)) var resp Envelope if err := dec.DecodeElement(&resp, nil); err != nil { log.Fatal(err) } fmt.Printf("%#v\n", resp) }
Das obige ist der detaillierte Inhalt vonWie kann ich SOAP-Anfragen und -Antworten ohne direkte WSDL-Unterstützung verarbeiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!