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
Lepaskan: 2024-12-08 13:12:12
asal
395 orang telah melayarinya

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)
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan