Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Memudahkan Pengendalian SOAP/WSDL dalam Go Menggunakan Pakej xmlutil?

Bagaimanakah Saya Boleh Memudahkan Pengendalian SOAP/WSDL dalam Go Menggunakan Pakej xmlutil?

DDD
DDDasal
2024-12-08 13:12:12359semak imbas

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

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn