como crear un cliente de un servicio soap (old school) en java
En el mundo de la integración de servicios, la moda (ya hace más de una decada), son los servicios REST, sin embargo, todavía quedan servicios “legacies” que solo ofrecen una interfaz SOAP. La cual (tristemente xD) la debemos consumir.
Generación de artefactos con wsimport
El utilitario wsimport (presente en todas las versiones del jdk), genera el código necesario para poder consumir o exponer un servicio web soap en base a su definición (wsdl), solamente debemos ejecutar
# Generamos el directorio donde alojaremos el código de forma temporal mkdir /tmp/source wsimport -keep -d /tmp/source "https://somehost.org/someService?wsdl" #
Y si tenemos suerte, el utilitario generará código .java y .class con los artefactos del servicio, los cuales pueden ser copiados a cualquier proyecto, o empaquetados en una librería. Sin embargo, puede suceder, que el servicio sea demasiado “old school“, y sea de tipo encoded en vez de literal, donde solo nos queda, generar el código usando el viejo axis1. ejemplo
parsing WSDL... [ERROR] "Use of SOAP Encoding is not supported.
Generación de artefactos con axis 1
En el caso que el servicio sea demasiado “old school”, debemos generar los artefactos usando axis 1, y la manera más sencilla, es usando la versión de la época de axis1
wget "http://apache.is.co.za/axis/axis/java/1.4/axis-bin-1_4.zip" wget "http://central.maven.org/maven2/javax/activation/activation/1.1.1/activation-1.1.1.jar" wget "http://central.maven.org/maven2/javax/mail/mail/1.4/mail-1.4.jar" unzip axis-bin-1_4.zip cp mail-1.4.jar axis-1_4/lib/ cp activation-1.1.1.jar axis-1_4/lib/ cd axis-1_4/lib/ java -cp axis.jar:commons-logging-1.0.4.jar:commons-discovery-0.2.jar:jaxrpc.jar:saaj.jar:wsdl4j-1.5.1.jar:mail-1.4.jar:activation-1.1.1.jar org.apache.axis.wsdl.WSDL2Java "https://somehost.org/someVeryLegacyService?wsdl" #
Y se generará los artefactos en el directorio actual de ejecución.
Windows Ways (xD) con eclipse
Otra opción, mas sencilla, es a través del GUI de Eclipse, que nos permite generar estos artefactos usando el Wizard de New -> Web Service, sin embargo, creo que ejecutar comandos en un terminal “is more fun ”