Documentos de Académico
Documentos de Profesional
Documentos de Cultura
imprimirá por consola el valor del elemento e indicará que hemos terminado con este
bloque del XML.
Este método recibe por parámetro un string con la URI, otro con localName y otro con
el elemento XML finalizado. En este caso, solo tendrá valor el string "elementos" porque
nuestro XML es más sencillo y estos campos están vacíos. Cabe decir que solo se
rellenarán cuando el XML contenga esa información. Como vemos en el ejemplo, los
objetos para acceder a los datos de un fichero son con SaxParserFactory y SaxParser.
Cuando trabajamos con un lenguaje de programación como Java, las posibilidades para
jugar con el lenguaje son muy extensas. En este caso, analizaremos cómo podemos
tratar los XML y a qué otros formatos podemos convertir ese archivo.
Una de las posibilidades más interesantes que nos ofrece Java es la posibilidad de
convertir un XML en un objeto Java. La librería Java JAXB (Java XML API Binding) nos
ofrece esa posibilidad. Está incluida dentro de la JDK de Java, por lo que no es necesario
importar librerías.
Algunas de las características principales de esta API son que nos permite navegar por
el documento en ambas direcciones, es más eficiente que DOM y permite la conversión
de tipos XML a Java. Además, permite la manipulación del fichero XML. Trabaja de
manera muy simple la carga, creación y manipulación de ficheros XML.
50
Acceso de datos
Como aspecto negativo, cabe destacar que no permite tratar un fichero XML si este no
es válido, por tanto, tenemos que validarlo antes de poder transformarlo a un objeto
Java.
JAXBContext jaxbContext;
try {
jaxbContext = JAXBContext.newInstance(Coche.class);
// Este objeto se encargará de la transformación a objeto
Java que le indiquemos.
Unmarshaller jaxbUnmarshaller =
jaxbContext.createUnmarshaller();
Coche coche = (Coche) jaxbUnmarshaller.unmarshal(new
StringReader(xml));
System.out.println(coche);
} catch (JAXBException e) {
e.printStackTrace();
}
Tal y como podemos ver en el ejemplo, la API JAXB se encarga de coger los datos del
XML y convertirlos en el objeto que le indiquemos. El objeto debe tener los mismos
atributos que el XML, si no, se lanzará la excepción.
En Java existen una infinidad de librerías que podemos añadir a nuestro proyecto para
poder transformar nuestros XML a cualquier otro formato. En este apartado,
explicaremos cómo transformar nuestros ficheros XML a un formato JSON.
51
Acceso de datos
Los archivos JSON siguen una estructura basada en definición de objetos, asignando un
atributo y un valor. Un fichero JSON es capaz de definir seis tipos de valores: string,
número, objeto, arrays, true, false o null. Veamos un ejemplo:
Objeto
{ Atributo
"coche":{ Valor
"marca": "Seat",
"modelo": "Ibiza",
"color": "rojo",
"matriculacion": 2019
},
"coche":{
"marca": "Ford",
"modelo": "Focus",
"color": "rojo",
"matriculacion": 2019
}
}
Para definir el JSON, se abren y cierran corchetes. Los objetos se declaran entre comillas
y los diferentes objetos se separan con una coma. El nombre y el valor de cada pareja
van separados entre dos puntos. Cada objeto se considera un string; en cambio, los
valores de los atributos pueden ser de cada tipo permitido nombrado en el parágrafo
anterior.
XML a JSON
Para esta conversión tenemos que añadir la librería Jackson a nuestro proyecto.
52
Acceso de datos
Esta librería nos permitirá realizar la transformación de XML a JSON en muy pocas líneas
de código.
https://repo1.maven.org/maven2/org/json/json/20190722/
https://jar-download.com/artifacts/org.json
53
Acceso de datos
Para poder gestionar los errores, en Java utilizamos lo que se llama un try-catch. Un try-
catch es un bloque de código que se añadirá a nuestro programa siempre que queramos
controlar una parte del código que vayamos a desarrollar. El código se ejecutará en
orden e irá siguiendo hasta que se produzca un error, en ese momento entrará al catch.
Podemos definir más de un catch en un mismo try. Cuando se produzca el error, entrará
en el primer bloque catch que coincida con el tipo de excepción y solo podrá entrar en
uno de los bloques catch. Los tipos de excepción más específicos deben aparecer
primero en la estructura, seguidos de los tipos de excepción más generales.
Lo mejor para controlar los errores es tener en cuenta todas las posibilidades de error y
controlarlas. Se debe utilizar un try-catch siempre que sea necesario.
try{
//Parte donde se ejecuta el código que puede dar excecion
File prueba = new File("c\\:prueba.txt");
} catch(NoSuchFileException e){
System.out.println(“No se ha encontrado el archivo” +e);
}catch(IOExcepction ex){
//Parte donde se gestiona la excepción
throw ex;
}
finally{
//Bloque de código que se ejecutará siempre, aunque se lanze una //excepcion
}
54
Acceso de datos
Como vemos en el ejemplo, antes de realizar la acción debemos envolverla con un try-
catch. Dentro del bloque del try, añadiremos la parte del código que queremos controlar
si se produce un error. Si no se produce el error, el programa continuará la ejecución y
entrará dentro del bloque finally. Este bloque se ejecutará siempre, aunque no se
produzca un error, y es especialmente útil para cerrar el proceso o ejecutar algún tipo
de acción necesaria. En el caso de que se produzca un error, entrará en el catch y
realizará las acciones dentro de ese apartado y lanzará un error. Para lanzar el error, lo
realizaremos mediante la palabra "throw" seguida de la excepción definida, en este
caso, "ex". Cada excepción tiene diferentes métodos para dar detalle de lo que está
ocurriendo. Siempre que forme parte de la familia Throwable, tendremos estas
opciones.
https://docs.oracle.com/javase/8/docs/
55
Acceso de datos
Usaremos este tipo de excepción siempre que se espere que el programa puede
recuperarse después de lanzarse la excepción. Son de uso obligatorio en cualquier
gestión de ficheros.
Exception
IOException
FileSystemEx FileNotFound
ception Exception
• FileSystemException: es una clase que lanza errores cuando una operación con
ficheros falla en un fichero o dos.
56
Acceso de datos
Como podemos ver en el ejemplo, hay dos tipos de excepción: la que se pone en la
declaración del método con un throws o con un try-catch dentro de la implementación
del método. Hay que tener en cuenta que, cuando declaramos el throws en el método,
quien recibe la función deberá envolver esa llamada dentro de un try-catch, es decir,
quien haga la llamada al método excepcionControladaConThrows() deberá realizarla con
un try-catch. Algo más o menos así:
try {
excepcionControladaConThrows();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
57
Acceso de datos
Las excepciones no controladas son aquellas que reflejan un error dentro de la lógica
del programa que estamos desarrollando.
En la gestión de ficheros, este tipo de excepción no será la más usual, pero sí que se
tiene que tener en cuenta, porque puede que se reproduzca en algún momento si
alguno de los parámetros que usemos esta vacío o null.
Exception
RuntimeException
Ilustración 10. Gráfico con la jerarquía de excepciones no controladas más comunes en gestión de ficheros.
58
Acceso de datos
En primer lugar, lo más común es usar comentarios. Los comentarios se pueden escribir
de tres maneras:
La gran peculiaridad de esta API es que permite añadir tags HTML dentro de los
comentarios. Eso es debido a que JavaDoc, a través de los comentarios, genera un
documento que servirá como documentación del proyecto.
Cuando se añadan comentarios, es necesario tener en cuenta que se debe describir cuál
es la función de lo que se comenta. Por ejemplo, si comentamos una clase, haremos una
breve explicación de lo que se encarga.
59
Acceso de datos
/**
* Aquí pondremos un resumen de la finalidad de esta clase
* Ej: Clase para documentar el funcionamiento de JavaDoc
*
* @author Ilerna
*
*/
public class JavaDoc {
/**
* Atributo nombre de la clase javaDoc
*/
private String nombre;
/**
* <p>Ejemplo de Javadoc con tags html .
* <a href="http://www.ilerna.es">Web ilerna</a>
* </p>
* @param ejemplo String que pasamos por parametro
* @return String con el resultado del metodo
* @see <a href="http://www.ilerna.es">Ejemplos</a>
* @since 1.0
*/
public String ejemploMetodoJavadoc(String ejemplo) {
// Comentario con explicación de lo que se realiza en el
método
return “OK”;
}
60
Acceso de datos
TAG DESCRIPCIÓN
@return Se usa para indicar qué es lo que devuelve el método, no se usa para
los métodos void.
Para empezar, vamos a ver un ejemplo de cómo implementar JavaDoc en una clase.
Todos estos comentarios nos servirán para crear la documentación. Para generarla,
podemos hacerlo desde la línea de comandos ejecutando este comando:
También podremos hacerlo a través de nuestro IDE. Si accedemos a Project > Generate
JavaDoc, nos aparecerá una ventana que nos permitirá elegir dónde queremos guardar
nuestra documentación. Y ya lo tendremos creado.
61
Acceso de datos
Ilustración 12. Ventana para indicar dónde queremos guardar nuestro JavaDoc.
62
Acceso de datos
TAG DESCRIPCIÓN
@Before Indica qué se ejecuta antes de cada test. Se usa para preparar el
entorno del test antes de ejecutarlo.
@After Indica qué se ejecutará después de cada test. Se usa para limpiar
el entorno después de la ejecución de cada test.
@BeforeClass Se ejecuta solo una vez, antes de que se ejecuten todos los test.
Se usa, por ejemplo, para conectar la base de datos.
@AfterClass Se ejecuta solo una vez después de ejecutar todos los test. Se usa
para limpiar el entorno.
@Ignore (“why
disabled”)
MÉTODO DESCRIPCIÓN
63
Acceso de datos
64
Acceso de datos
Para poder realizar los ejemplos y las prácticas, deberemos preparar Eclipse para que
podamos desarrollar los test.
En primer lugar, nos dirigiremos a la siguiente web para descargar la librería de JUnit:
https://mvnrepository.com/artifact/org.junit/junit5-api/5.0.0-ALPHA
Después debemos añadir esta librería a nuestro proyecto en Eclipse. Si no tenéis ningún
proyecto creado, os aconsejo que os descarguéis el proyecto con los ejemplos de este
tema. Os será útil para realizar la práctica (el enlace está al principio del tema 1).
Para ello, tenemos que dar botón derecho al proyecto e ir a Properties. A continuación,
dirigirnos a Java Build Path y a librerías, tal y como se muestra en la imagen.
Ilustración 13. Captura con las instrucciones para añadir la librería de JUnit.
65