Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/main/articles.php on line 18
Consumir un SOAP con WSDL
Tiempo de lectura: 1 minutos
Consumir un SOAP con WSDL utilizando la biblioteca gowsdl que provee de un cliente SOAP.
El servicio
Utilizamos un servicio de información sobre países. El servicio lo ponemos en una constante de Go:
const (
service string = "http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso"
) WSDL
Antes de empezar, debemos descargar el archivo WSDL del servicio web. El archivo WSDL contiene información sobre las funciones y las estructuras de datos del servicio web.
Instalar la biblioteca
Usaremos la biblioteca gowsdl para la integración de SOAP con Golang y poder utilizar el archivo de definición WSDL. Para instalar la biblioteca ejecutamos
go install github.com/hooklift/gowsdl/cmd/gowsdl@latest Generar la clase proxy
Podemos generar automáticamente códigos Golang a partir del archivo WSDL mediante el comando gowsdl. Para ello, ejecute el siguiente comando en la terminal y se creará un archivo llamado country_info_service_gen.go. Este archivo contiene códigos Golang que representan las funciones y las construcciones de datos del servicio web.
gowsdl -o country_info_service_gen.go ./wsdl/CountryInfoService.xml Estructura del proyecto
Una vez generada la clase proxy nombramos el paquete dentro del fichero country_info_service_gen.go y organizamos la estructura de proyecto:
wssoapwsdl
\\__ cmd
main.go
\\__pkg
\\__ wsdl
country_info-service_gen.go
\\__ wsdl
CountyInfoservice.xml
go.mod
go.sum Código completo
Para consultar los países que utilizan la moneda EUR, se crea un objeto de solicitud y se envía al servicio. El servicio recibe el objeto de solicitud creado y lo envía al servicio SOAP correspondiente. La respuesta que devuelve el servicio se almacena en el objeto fullCountryInfoResponse.
func main() {
// nuevo cliente
countryServiceClient := soap.NewClient(service)
// establecer la conexión al ws para usar los métodos
countryService := wsdl.NewCountryInfoServiceSoapType(countryServiceClient)
// envío y respuesta
fullCountryInfoRequest := &wsdl.CountriesUsingCurrency{SISOCurrencyCode: "EUR"}
fullCountryInfoResponse, err := countryService.CountriesUsingCurrency(fullCountryInfoRequest)
if err != nil {
log.Fatalf("error en la llamada: %v", err)
}
for i := range fullCountryInfoResponse.CountriesUsingCurrencyResult.TCountryCodeAndName {
fmt.Printf("País: %s, Nombre: %s\n",
fullCountryInfoResponse.CountriesUsingCurrencyResult.TCountryCodeAndName[i].SISOCode,
fullCountryInfoResponse.CountriesUsingCurrencyResult.TCountryCodeAndName[i].SName)
}
} Resultado
Realizamos las operaciones necesarias para que compile el programa y ejecutamos.
go run cmd/main.go
País: AD, Nombre: Andorra
País: AT, Nombre: Austria
País: AX, Nombre: Åland Islands
País: BE, Nombre: Belgium
País: BL, Nombre: Saint Barthélemy
País: DE, Nombre: Germany
País: ES, Nombre: Spain
País: FI, Nombre: Finland
País: FR, Nombre: France
País: GF, Nombre: French Guiana
País: GP, Nombre: Guadeloupe
País: GR, Nombre: Greece
País: IE, Nombre: Ireland
País: IT, Nombre: Italy
País: LU, Nombre: Luxembourg
País: MC, Nombre: Monaco
País: ME, Nombre: Montenegro
País: MF, Nombre: Collectivity of Saint Martin
País: MQ, Nombre: Martinique
País: NL, Nombre: Netherlands
País: PM, Nombre: Saint Pierre And Micquelon
País: PT, Nombre: Portugal
País: RE, Nombre: Reunion
País: SM, Nombre: San Marino
País: TF, Nombre: French Southern Territories
País: VA, Nombre: Vatican City
País: YT, Nombre: Mayotte - WSDL to Go
https://github.com