Buscar este blog

martes, 11 de noviembre de 2014

SoapUI HTTPS Mock - java.net.BindException: Addres already in use: bind

Objetivo

Se trata de crear un servicio web mock con SoapUI, pero que responda también por HTTPS.
Se trata de corregir el error java.net.BindException: Addres already in use: bind

Nota:
Ya hay un tutorial en la página oficial de soapui, pero no explica bien la forma de acceder al servicio una vez creado. Se puede consultar aquí.

Solución

En esta prueba se empleó SoapUI 4.5.2, pero también está probado con 4.6.

Lo normal es partir de un servicio existente y luego crear su mock. Finalmente hay que configurar el HTTPS.

Para esta prueba se empleará el servicio http://www.webservicex.net/globalweather.asmx?WSDL



A partir de ahí podemos hacer peticiones al servicio real.


Luego se crean los mocks de las operaciones del servicio que queramos.






En este momento, y una vez lanzado el mock, cualquier petición que se haga a http://localhost:8088/mockGlobalWeatherSoap será atendida por dicho mock.
Se puede consultar el WSDL en el navegador con http://localhost:8088/mockGlobalWeatherSoap?wsdl.

Ahora hay que configurar el SSL. Para ello se necesitan dos keystores:

  1. IdentityKeyStore: Keystore con los datos de identidad del servidor. 
  2. TrustStore: Keystore con los certificados de confianza del servidor.

El IdentityKeyStore identifica al servidor. Tendrá su clave pública y privada, de modo que los clientes pueda consultar la pública cuando se conectan a él.

La forma más rápida de crearlo es con keystore explorer.
Basta con crear un archivo de tipo JKS y dentro de él usar la opción de Generate Key Pair. Durante el proceso se pedirán que se establezcan las contraseñas del certificado y del keystore.

El TrustStore contiene la lista de certificados, únicamente sus claves públicas, en los que confiará el servidor. En este caso no es necesario incluir ninguna, porque el cliente no necesitará certificado.
Al igual que en el caso anterior, el keystore también va a solicitar una contraseña de acceso.


Teniendo esto, ya se pueden configurar los parámetros de SSL en SoapUI.
Desde la opción de preferencias se navega a SSL Settings y se cubren los datos necesarios.



Aquí hay que tener en cuenta lo siguiente:
  • Sólo estamos cubriendo los datos del keystore para los mocks. SoapUI permite tener dos diferenciados.
  • Se indica un puerto para los mocks, pero no será con el que se acceda al servicio. Luego se verá.
  • No se solicita autenticación de cliente, de ahí que no haga falta meter certificados en el trustStore.

Una vez configurado todo hay que reniciar el SoapUI para que coja las nuevas preferencias!!

Después de reiniciar y haber arrancado el mock, se puede acceder a la siguiente URL por https:
https://localhost:8443/mockGlobalWeatherSoap?wsdl

Ojo, el mock dijimos que iba ir en el puerto 8088, pero aquí estamos entrando por el 8443 que es el del https. Esto es un poco raro y poco intiutivo, y la primera vez puedes perder bastante tiempo hasta descubrirlo. Además, no se indica demasiado en los foros.



troubleshooting 

java.net.BindException: Addres already in use: bind

Este error se produce cuando se configura el mock para que emplee el mismo puerto que el HTTPS.
Al configurar todo, lo más lógico es pensar que el mock se lanzará en el puerto del HTTPS, pero así entra en conflicto con éste porque se intenta abrir dos veces.
Hay que dejar el puerto del mock distinto al otro y entrar por HTTPS en el que corresponda.







No hay comentarios:

Publicar un comentario