Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61

Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61
Consumir un SOAP con WSDL
Source Code

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
Referencias

Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/navigation.inc.php on line 10

Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/navigation.inc.php on line 21
Xavier es un desarrollador senior full stack y opera desde la ciudad mediterránea de Barcelona. Le encantan las tecnologías de software y está convencido que el desarrollo de software es un proceso colaborativo y abierto.
Y es un apasionado de la astronomía y de la fotografía. Lo puedes encontrar en:
Comparte este post


Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/footer.inc.php on line 24