>백엔드 개발 >Golang >xmlutil 패키지를 사용하여 Go에서 SOAP/WSDL 처리를 어떻게 단순화할 수 있습니까?

xmlutil 패키지를 사용하여 Go에서 SOAP/WSDL 처리를 어떻게 단순화할 수 있습니까?

DDD
DDD원래의
2024-12-08 13:12:12356검색

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

Go에서 SOAP/WSDL 지원

Go에서 WSDL에 대한 기본 지원이 부족함에도 불구하고 SOAP 요청을 수동으로 인코딩 및 디코딩하는 것이 가능합니다. 그리고 응답. 그러나 이 프로세스는 복잡할 수 있으며 서버마다 다를 수 있습니다.

GitHub 패키지를 사용한 대체 접근 방식

이러한 문제를 해결하기 위해 GitHub 패키지 xmlutil(https:// github.com/webconnex/xmlutil)에서 솔루션을 제공합니다. 서버에 xsi 유형이 필요하도록 지정하여 복잡한 사용자 정의가 필요하지 않도록 하여 SOAP 처리를 단순화합니다.

구현 예

다음은 xmlutil 사용 예입니다. 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()
    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)
}

위 내용은 xmlutil 패키지를 사용하여 Go에서 SOAP/WSDL 처리를 어떻게 단순화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.