Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Memudahkan Pengendalian SOAP/WSDL dalam Go Menggunakan Pakej xmlutil?
Menyokong SOAP/WSDL dalam Go
Walaupun kekurangan sokongan asli untuk WSDL dalam Go, anda boleh mengekod dan menyahkod permintaan SOAP secara manual dan respons. Walau bagaimanapun, proses ini boleh menjadi rumit dan berbeza-beza merentas pelayan yang berbeza.
Pendekatan Alternatif dengan Pakej GitHub
Untuk menangani cabaran ini, pakej GitHub xmlutil (https:// github.com/webconnex/xmlutil) menawarkan penyelesaian. Ia memudahkan pengendalian SOAP dengan membenarkan anda menentukan bahawa pelayan memerlukan jenis xsi, menghapuskan keperluan untuk penyesuaian yang kompleks.
Contoh Pelaksanaan
Di bawah ialah contoh penggunaan xmlutil untuk mengendalikan SABUN:
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) }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memudahkan Pengendalian SOAP/WSDL dalam Go Menggunakan Pakej xmlutil?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!