amap-sw-cliente

Última modificación por Administrator el 2020/04/15 13:53

amap-sw-cliente-1.5.3 2020/04/15

Correctivos menores

amap-sw-cliente-1.5.2 2020/04/08

Añadida información del nombre del fichero a respuestas MTOM

amap-sw-cliente-1.5.1 2020/04/02

Corrección de reutilización de parámetros entre peticiones soap/rest generadas

amap-sw-cliente-1.5.0 2020/03/18

Incluir, para las cabeceras wss con usuario y contraseña, si esta última va en claro o en modo "digest" (el hash de la misma).

amap-sw-cliente-1.4.1 2020/03/06

Correción en peticiones con seguridad mediante certificados.

amap-sw-cliente-1.4.0 2020/02/20

Permitir especificar una lista de certificados de confianza para peticiones https.

amap-sw-cliente-1.3.0 2019/12/18

Permitir especificar un contenedor de certificados de confianza para peticiones https.
Corrección de errores menores.

amap-sw-cliente-1.2.1 2019/11/04

Corrección de la información devuelta en caso de error sin las trazas a debug.

amap-sw-cliente-1.2.0 2019/11/04

Agregada seguridad WSS con usernametoken, también se permite indicar el content-type para servicios rest.

amap-sw-cliente-1.1.1 2019/10/10

Posibilidad de especificar el encoding de respuesta

amap-sw-cliente-1.1.0 2019/10/07

Agregada funcionalidad de mtom

amap-sw-cliente-1.0.0 2019/07/29

Primera versión del componente

<dependency>
<groupId>es.gobcantabria.amap.utilidades</groupId>
<artifactId>amap-sw-cliente</artifactId>
<version>1.5.3</version>
</dependency>

N/A

Sin recursos disponibles.

Configuración

Configuración de la factoría de servicios web

Para la utilización del componente amap-sw-cliente basta con añadir el jar y sus correspondientes dependencias al classpath de la aplicación (habitualmente desde maven). 

La librería httpClient de apache es una dependencia opcional del componente (por defecto no se requiere, ya que utiliza las clases de la runtime de java para estas operaciones), este funcionamiento puede modificarse con la opción "usarHttpClient" de la factoría del servicio.

Una vez que esté disponible la librería y sus dependencias se puede crear un servicio (factoría de peticiones) del siguiente modo (petición SOAP):

AmapSWClienteFactory cliente =  AmapSWClienteFactory.createSOAP(uri,aplicacion,usuario);

o bien (petición Rest):

AmapSWClienteFactory cliente =  AmapSWClienteFactory.createREST(uri,aplicacion,usuario);

Este AmapSWClienteFactory  puede verse como una representación del servicio web completo ya que es objeto que puede crear (es una factoria a su vez) clientes que pueden hacer a su vez llamadas a los métodos del web service.

Para la creación del servicio es necesario indicar:

  • URI: URI del servicio al que se desea conectar.
  • aplicación: aplicación llamante, se traducirá en una cabecera "amap-sw-cliente-aplicacion" en la peticiones http realizadas (para auditoría de las peticiones).
  • usuario: usuario de la aplicación que genera la petición, se traducirá en una cabecera "amap-sw-cliente-usuario" en la peticiones http realizadas (para auditoría de las peticiones).

Los parámetros opcionales de creación del servicio se utilizarán a través de los métodos de la factoria (habitualmente setters) y son los siguientes:

  • TipoPeticionHttp: tipo de petición http a realizar (GET, POST, PUT, DELETE), para las peticiones SOAP siempre será POST.
  • AutenticationBasica: indica las credenciales indicadas (usuario y contraseña) para crear la cabecera de autenticación básica de http utilizada en las peticiones.
  • AutenticationWSS: indica que se ha de asegurar la petición enviada al servidor con el certificado indicado o bien con un usuario o
    y contraseña (Solamente aplicable a peticiones SOAP), en este último caso puede indicarse que la contraseña vaya en plano o en modo "digest" (el hash de la misma).
  • timeout: tiempo de espera máximo de intercambio de paquetes en la conexión (en milisegundos), si pasa más tiempo que el timeout y no se ha recibido ningún paquete se retornará una excepción. por defecto esta propiedad estará establecida a 60 segundos.
  • headerRequest: cabecera para todas las peticiones realizadas con el cliente, al contrario del resto de los otros parámetros que se establecen con un setter, esta opción se establecerá con el método "addHeaderDefault", ya que se pueden añadir una, varias o ninguna cabecera por defecto para las peticiones del servicio.
  • usarHttpClient: indica si se desea utilizar la librería httpClient o no como librería para hacer conexiones http, por defecto esta propiedad está a false.
  • usarMtom: indica si se desea utilizar la conexión soap a través de mtom o no, por defecto esta propiedad está a false.
  • httpStatusExpected: código de retorno HTTP esperado en la respuesta, por defecto 200, si el código de respuesta HTTP no es el indicado se elevará una excepción.
  • SoapAction: Indica el valor del header "SoapAction" (solamente para peticiones SOAP)
  • AdditionalMarshallClasses: Indica clases adicionales para hacer la transformación de la respuesta al objeto de vuelta (solamente peticiones SOAP)
  • UrlRelative: url relativa con respecto a la URI establecida en el método "createXXX" a utilizar en la invocación
  • encoding: Indica el valor del encoding con el que transformar la respuesta del servidor
  • contenedorCertificadosConfianza: Indica el contenedor de certificado de confianza y la contraseña del mismo 
  • listaCertificadosConfianza: Indica la lista de certificados de confianza

De esta forma podríamos generar un servicio (factoría de peticiones), por ejemplo, de la siguiente forma:

URI uri = new URI("http://servicios.generales.cantabria.es/api/v1");
AmapSWClienteFactory cliente = AmapSWClienteFactory.createREST(uri,aplicacion,usuario)
 .setTimeout(5_000)
 .addHeader("cabecera1","valorCabecera1")
 .addHeader("cabecera2","valorCabecera2")
 .setAtenticationBasica("admin", "abcd");

Configuración de la factoría de métodos de servicios web

Una vez que disponemos de un AmapSWClienteFactory (cliente) podemos crear a su vez un objeto que represente un método concreto del web service, que nos permitirá a su vez realizar peticiones a dicho método.

Ejemplo SOAP:

WSMethodInterface<RequestClass, ResponseClass> metodo = cliente.getMetodo(RequestClass.class, ResponseClass.class); 

Ejemplo REST:

RestMethodInterface<RequestClass, ResponseClass> metodo = amapSWClienteFactory.getMetodoREST(TipoPeticionHttp.POST, ResponseClass.class);

N/A

Nombreamap-sw-cliente
Identificadoramap-sw-cliente
Grupoes.gobcantabria.amap.utilidades
Versión1.5.3
Licencia
DesarrolladorSUMA
Descripción

Componente para la invocación de servicios servicios web (WS) por parte de las aplicaciones 

Documentaciónamap-sw-cliente (JavaDoc)
Binarioamap-sw-cliente (Jar)

Sin particularidades. Seguir las recomendaciones del fabricante.

Ejemplos de uso

Una vez que disponemos de un AmapSWClienteFactory, es decir, el objeto que representa el método del web service, podemos utilizar el método invoke para realizar la petición.


RequestClass request = new RequestClass();
request.setParametro("valor1");

ResponseClass response = AmapSWClienteFactory.createSOAP(uri,aplicacion,usuario)
 .getMetodo(RequestClass.class, ResponseClass.class)
 .invoke(request);

response.getResultado();

En este ejemplo se genera una petición SOAP con el parámetro indicado y se obtiene el resultado.

Las clases RequestClass y ResponseClass se transformarán en el nodo SOAP correspondiente dentro del Body utilizando Jaxb.

Para peticiones rest la invocación se puede realizar de forma similar.


AmapSWClienteFactory.createREST(uri,aplicacion,usuario)
 .setTimeout(timeout)
 .setAutenticacionBasica(usuarioAutenticacion, passwordAutenticacion)
 .setUrlRelative(urlRelativeNode)
 .setHttpStatusExpected(HttpURLConnection.HTTP_NO_CONTENT)
 .getMetodoREST(TipoPeticionHttp.DELETE, Void.class)
 .invoke();

En este caso, la petición es rest con un timeout definido, autenticación básica, de tipo DELETE y espera un código 204 http.

Indicar certificados para conexiones seguras


RequestClass request = new RequestClass();
request.setParametro("valor1");


List<X509Certificate> listaDeCertificados = new ArrayList<X509Certificate>();

//Obtengo el fichero en Base64
byte[] cerByteArrayEncoded64 = obtenerFicheroBase64();
//Creo un InputStream de un certificado que está almacenado en un byte[] codificado en base 64
InputStream isCertificadoByte = new ByteArrayInputStream(Base64.decodeBase64(cerByteArrayEncoded64));

//Cero la factoría CertificateFactory, con la que pbtendré el X509Certificate del InputStream
CertificateFactory fact = CertificateFactory.getInstance("X.509");
X509Certificate certificado1 = (X509Certificate) fact.generateCertificate(isCertificadoByte);

//Añadir a la lista el nuevo certificado
listaDeCertificados.add(certificado1);

//Obtengo el fichero en Base64 mediante un String
String certStringEncoded64 = obtenerFicheroBase64();
//Creo un InputStream de un certificado que está almacenado en un String codificado en base 64
InputStream isCertificadoString = new ByteArrayInputStream(Base64.decodeBase64(cerStringEncoded64) );

//Cero la factoría CertificateFactory, con la que pbtendré el X509Certificate del InputStream
CertificateFactory fact = CertificateFactory.getInstance("X.509");
X509Certificate certificado2 = (X509Certificate) fact.generateCertificate(isCertificadoString);

//Añadir a la lista el nuevo certificado
listaDeCertificados.add(certificado2);

ResponseClass response = AmapSWClienteFactory.createSOAP(uri,aplicacion,usuario)
 .setListaCertificadosConfianza(listaDeCertificados)
 .getMetodo(RequestClass.class, ResponseClass.class)
 .invoke(request);

response.getResultado();

En este ejemplo se genera una petición SOAP con el parámetro indicado y se obtiene el resultado.

Las clases RequestClass y ResponseClass se transformarán en el nodo SOAP correspondiente dentro del Body utilizando Jaxb.

© 2014 GOBIERNO DE CANTABRIA - AVISO LEGAL Y PROTECCIÓN DE DATOS