Uso librería de integración java: Servicio web de Directorio

RECU-0496 (Recurso Ejemplo)

Descripción

El presente documento muestra un ejemplo para la utilización de los web services de directorio utilizando las librerías de integración

Requisitos

Ejemplo

Creación del proyecto utilizando maven

Ejecutamos el siguiente comando maven que creará el proyecto correspondiente:

$> mvn archetype:create -DgroupId=com.test -DartifactId=mytest

Referencia a las librerías (pom.xml)

Dentro de la carpeta mytest, creada en el paso anterior, encontramos el fichero pom.xml. Modificamos dicho fichero para incluir la librería de integración que nos da acceso a los web services de directorio. Aquí vemos el contenido final de dicho fichero.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
  <groupId>com.test</groupId>
<artifactId>mytest</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>jar</packaging>

 <name>mytest</name>
 <url>http://maven.apache.org</url>

 <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 </properties>

 <dependencies>
 <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>4.8.1</version>
 <scope>test</scope>
 </dependency>
 <dependency>
 <groupId>es.juntadeandalucia.guia</groupId>
 <artifactId>mag4j</artifactId>
 <version>1.0.2</version>
 </dependency>
 <dependency>
 <groupId>log4j</groupId>
 <artifactId>log4j</artifactId>
 <version>1.2.8</version>
 <scope>compile</scope>
 </dependency>
</dependencies>

  <build>
  <finalName>${artifactId}-${version}</finalName>
 <plugins>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-compiler-plugin</artifactId>
 <configuration>
 <source>1.5</source>
 <target>1.5</target>
 </configuration>
 </plugin>
 <plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-surefire-plugin</artifactId>
  <version>2.6</version>
 </plugin>
  </plugins>
  </build>
</project>

Fichero de propiedades

Creamos el fichero $/mytest/src/test/resources/mag4j-ws-directorio.properties

En dicho fichero se definen: la cuenta de servicio y la contraseña que se utilizará para invocar a los servicios web de directorio y la ruta al wsdl donde se encuentra localizado el mismo. Se muestra un ejemplo del mismo en el que habrá que establecer los valores oportunos.

#cuenta de conexión a los web services
guia_ws_dir_userdn=cn=cuenta_servicio_ejemplo,o=servicios,o=identidades,o=comun,dc=juntadeandalucia,dc=es
guia_ws_dir_pwd=passwordejemplo
guia_ws_dir_wsdl_location=http://host:port/servicio/wsdirectorio/directorio?wsdl
truststore_location=$HOME/mytest/keystore
truststore_password=myStorePassword

Las propiedades truststore_* deberán ser definidas en caso de que el certificado de servidor o su CA no hayan sido instaladas en keystore definido por defecto en la JVM

Fichero de log (opcional)

Creamos el fichero $/mytest/src/test/resources/log4j.properties

Se muestra un fichero de configuración de log de ejemplo muy simple.

log4j.rootLogger=DEBUG, stdout, A1

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-5p %c %x - %m%n

log4j.appender.A1=org.apache.log4j.RollingFileAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d %-5p %c %x - %m%n
log4j.appender.A1.File=out.log
log4j.appender.A1.MaxFileSize=512KB
log4j.appender.A1.Append=false

Clase java de ejemplo

Por último modificamos la clase test de ejemplo generada por maven en $/mytest/src/test/java/com/test/AppTest.java

package com.test;
import static org.junit.Assert.fail;
import java.io.IOException;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import es.juntadeandalucia.guia.directorio.cliente.Directorio;
import es.juntadeandalucia.guia.directorio.cliente.GuiaFaultMsg;
import es.juntadeandalucia.guia.mag4j.spec.MaG4JException;
import es.juntadeandalucia.guia.mag4j.spec.ws.DirectorioClientFactory;
import es.juntadeandalucia.guia.mag4j.util.PropertiesLoader;
import es.juntadeandalucia.guia.mag4j.ws.directorio.DirectorioClientFactoryImpl;

/**
* Unit test for simple App.
*/
public class AppTest {

 Logger logger = Logger.getLogger(AppTest.class);
 private DirectorioClientFactory dirCFactory=null;

 @Before
 public void init() throws Exception {
 this.dirCFactory = createDirectorioClientFactory("/mag4j-ws-directorio.properties");
 }

 @Test
 public void testCreatedClientWorks() {
 try {
 logger.debug("Creacion del cliente de web services a partir del metodo factoria de la API");
 Directorio dir = this.dirCFactory.createClient();
 logger.debug("Llamada al metodo isAlive del servicio web");
 dir.isAlive(null);
 logger.debug("Ok");
 } catch (MaG4JException e) {
 logger.error(e.getMessage(),e);
 fail();
 } catch (GuiaFaultMsg e) {
 logger.error(e.getMessage(),e);
 if (e.getFaultInfo().getCodigo().equals("0")) {
 e.printStackTrace();
 fail("ws directorio: Codigo de error " + e.getFaultInfo().getCodigo());
 }
 }
 }  

 private static DirectorioClientFactory createDirectorioClientFactory(String resourcePath) throws MaG4JException {
 DirectorioClientFactory dcf = new DirectorioClientFactoryImpl();
 dcf.init(loadProperties(resourcePath));
 return dcf;
 }

 private static Properties loadProperties(String resourcepath) throws MaG4JException {
 try {
 return PropertiesLoader.loadFromClassPath(resourcepath);
 } catch (IOException e) {
 throw new MaG4JException("No se pudo leer el recurso "+resourcepath);
 }
 }

}

La clase simplemente lee el fichero de propiedades, crea un cliente para el acceso a los web services de directorio e invoca al método isAlive() publicado en el mismo.

Ejecución del ejemplo

Para probar el ejemplo ejecutamos el siguiente comando maven que debería dar un resultado correcto:

$> mvn test

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0