Maison > développement back-end > Golang > Comment puis-je simplifier la gestion SOAP/WSDL en Go à l'aide du package xmlutil ?

Comment puis-je simplifier la gestion SOAP/WSDL en Go à l'aide du package xmlutil ?

DDD
Libérer: 2024-12-08 13:12:12
original
362 Les gens l'ont consulté

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

Prise en charge de SOAP/WSDL dans Go

Malgré le manque de support natif de WSDL dans Go, il est possible d'encoder et de décoder manuellement les requêtes SOAP et les réponses. Cependant, ce processus peut être complexe et varier selon les différents serveurs.

Approche alternative avec le package GitHub

Pour relever ces défis, le package GitHub xmlutil (https:// github.com/webconnex/xmlutil) propose une solution. Il simplifie la gestion de SOAP en vous permettant de spécifier qu'un serveur nécessite des types xsi, éliminant ainsi le besoin de personnalisations complexes.

Exemple d'implémentation

Vous trouverez ci-dessous un exemple d'utilisation de xmlutil pour gérer le SAVON :

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)
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal