Hoy me ha entrado curiosidad por ver si existía alguna librería en Groovy para el consumo de webservices. Había leído algo sobre GroovyWS, pero desde la documentación oficial no lo aconsejan por estar un poco abandonado. Así que he seguido su recomendación de hacer unas pequeñas pruebas con groovy-wslite.

Cómo no, he realizado las pruebas con los webservices del Catastro. Prometo cambiar a la próxima, ahora que he encontrado una buena cantidad de servicios a los que hincar el diente.

El único pero que se le puede achacar a groovy-wslite es que te obliga a conocer el formato de los mensajes a intercambiar, pero lo bueno es que provee de un MarkupBuilder para la creación de mensajes de petición. Así, con un script como el siguiente podemos realizar una consulta de todos los municipios de la provincia de Alicante:

@Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='0.7.0')
import wslite.soap.*

def client = new SOAPClient('https://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?WSDL')
def response = client.send(SOAPAction:'http://tempuri.org/OVCServWeb/OVCCallejero/ConsultaMunicipio') {
    body{
        Provincia(xmlns:'http://www.catastro.meh.es/', 'ALACANT')
    }
}

response.envelope.Body.Municipios.consulta_municipiero.municipiero.muni.each{
    println "--------- ${it.nm} ---------"
    println "Cartografía: ${it.carto}"
    println "Código MHAP: ${it.locat}"
    println "Código INE: ${it.loine}"
    println "----------------------------"
    println ""
}

En caso de ser un poco vagos y querer copiar y pegar los mensajes tal y como están definidos en la documentación del servicio, la librería también nos lo permite:

@Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='0.7.0')
import wslite.soap.*

def client = new SOAPClient('http://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx')
def response = client.send(
        SOAPAction:'http://tempuri.org/OVCServWeb/OVCCallejero/ConsultaMunicipio',
        """<?xml version="1.0" encoding="utf-8"?>
                <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                  <soap:Body>
                    <Provincia xmlns="http://www.catastro.meh.es/">ALACANT</Provincia>
                  </soap:Body>
                </soap:Envelope>"""
)

response.envelope.Body.Municipios.consulta_municipiero.municipiero.muni.each{
    println "--------- ${it.nm} ---------"
    println "Cartografía: ${it.carto}"
    println "Código MHAP: ${it.locat}"
    println "Código INE: ${it.loine}"
    println "----------------------------"
    println ""
}

Código fuente: Github.

Anuncios