Maison >développement back-end >Golang >Comment puis-je gérer les requêtes et les réponses SOAP dans Go sans prise en charge directe de WSDL ?
Support WSDL/SOAP dans Go
Bien qu'il n'y ait pas de support direct pour WSDL dans Go, plusieurs options sont disponibles pour gérer SOAP requêtes et réponses.
Création de requêtes SOAP Manuellement
Le package standard encoding/xml peut être utilisé pour créer des requêtes SOAP manuellement, mais il ne dispose pas des fonctionnalités nécessaires pour gérer certains aspects de SOAP, tels que les espaces de noms et les préfixes.
Utilisation de la bibliothèque xmlutil
La bibliothèque github.com/webconnex/xmlutil fournit un solution plus robuste pour gérer les requêtes et les réponses SOAP. Il comprend des fonctionnalités telles que :
Décodage manuel de SOAP Réponses
Pour décoder les réponses SOAP, vous pouvez utiliser le package encoding/xml ou des bibliothèques comme xmlutil. Le processus implique l'utilisation du décodeur pour analyser la réponse XML et extraire les données souhaitées.
Exemple d'utilisation de xmlutil
Voici une version modifiée de l'exemple fourni dans la réponse :
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) }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!