ホームページ > バックエンド開発 > Golang > xmlutil パッケージを使用して Go での SOAP/WSDL 処理を簡素化するにはどうすればよいですか?

xmlutil パッケージを使用して Go での SOAP/WSDL 処理を簡素化するにはどうすればよいですか?

DDD
リリース: 2024-12-08 13:12:12
オリジナル
372 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート