Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengendalikan Permintaan dan Respons SOAP dengan Berkesan dalam Pergi Tanpa Sokongan WSDL Asli?

Bagaimanakah Saya Boleh Mengendalikan Permintaan dan Respons SOAP dengan Berkesan dalam Pergi Tanpa Sokongan WSDL Asli?

DDD
DDDasal
2024-12-09 22:41:14658semak imbas

How Can I Effectively Handle SOAP Requests and Responses in Go Without Native WSDL Support?

Sokongan WSDL/SOAP dalam Go

Walaupun Go tidak mempunyai sokongan yang jelas untuk WSDL, ia menyediakan pilihan untuk bekerja secara langsung dengan permintaan SOAP.

Pengekodan SABUN dan Penyahkodan

Pakej pengekodan/xml standard dalam Go mungkin tidak mencukupi untuk SOAP. Ini kerana SOAP memerlukan atribut XML khusus, seperti xsi:type="xsd:string" pada tag rentetan.

Untuk menangani had ini, pakej github.com/webconnex/xmlutil telah dibangunkan. Ia menyediakan keupayaan pengekodan dan penyahkodan yang dipertingkatkan untuk SOAP, termasuk sokongan untuk ruang nama dan atribut XML tersuai.

Contoh Pelaksanaan SOAP

Coretan kod berikut menggambarkan cara menggunakan xmlutil untuk mengekod dan menyahkod permintaan SOAP:

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()
    // Register namespaces and types
    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")

    // Encode the SOAP request
    env := &Envelope{Body{MethodCall{
        One: "one",
        Two: "two",
    }}}
    buf := new(bytes.Buffer)
    enc := x.NewEncoder(buf)
    if err := enc.Encode(env); err != nil {
        log.Fatal(err)
    }

    // Decode the SOAP response
    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.Println(resp)
}

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Permintaan dan Respons SOAP dengan Berkesan dalam Pergi Tanpa Sokongan WSDL Asli?. 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