como crear un cliente de un servicio soap (old school) en java

Mar 04, 2017 No Comments by

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 :)

Java

About the author

Ingeniero en Informática, Oracle Certified Master Java EE 6 Enterprise Architect, Oracle Certified Professional Java Programmer. Experto en distintas ramas de la computación y otras "yerbas" xD. Si te gusto este post, sígueme en @deerme_org, escríbeme a info AT deerme.org o contactame por linkedin.
No Responses to “como crear un cliente de un servicio soap (old school) en java”

Leave a Reply


nine + = 17