Como debuguear un cliente de WebService Java

Problema:

Cuando uno esta consumiendo un webService desde Java, y obtienes un error que sospechas se genera en el servidor, lo primero que se viene a la mente es intentar ver las tramas de soap enviadas y recibidas. Pero Java oculta este trafico y solo te muestra un error genérico.

Solución:

Una solución rebuscada es colocar un Snifer para ver todo el trafico que pasa por la tarjeta de red, en busca de las tramas de nuestro programa consumiendo el WebService.

Pero es mas sencillo usar un proxy, así:

1.- Cambia el EndPoint del cliente, para que en lugar de conectarse al servidor se conecte a un puerto de tu maquina, en este ejemplo usamos el puerto 1234, en este ejemplo el EndPoint original era http://www.servidor.com/MiWebService/MalHecho.php es su lugar lo farzaremos a http://localhost:1234/MiWebService/MalHecho.php nota que cambiamos solo el servidor y puerto y conservamos el resto de la URL

WSCalcImpPortType calcimpSoap = (new WSCalcImpPort()).getWSCalcImpPort();
BindingProvider bindingProvider = (BindingProvider) calcimpSoap;
 
// Parche, forzar endpoint
bindingProvider.getRequestContext().put (
BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://localhost:1234/MiWebService/MalHecho.php"
);
 
String respuesta = calcimpSoap.agregaGasto(.....);

2.- Levanta un proxy que desvíe lo que le envías al puerto 1234 hacia el servidor escribiendo en la consola de linux esto:

sudo socat -v TCP-LISTEN:1234 TCP:www.servidor.com:80

3.- Ejecuta tu código y en la consola veras las tramas de soap intercambiadas por el servidor y el cliente. Nota que debes levantar el proxy cada vez que pruebes.

Eric Ruiz Osornio (Zeru). Instituto Politécnico Nacional, México. Gamer de StarCraft2, coder y administrador de proyectos.

Facebook Twitter 

Compartir en...Tweet about this on TwitterPin on Pinterest0Share on LinkedIn0Share on Google+0Share on Facebook1