Introducción.
Hoy en día no sólo es habitual validar los documentos XML contra una instancia XML Schema en servicios web: prácticamente cualquier programa trabaja con los datos bajo este estándar a la hora de almacenar configuraciones, guardar datos o exportarlos. Las aplicaciones desarrolladas para Android tampoco se libran.
Es importante pues, validar los ficheros XML tras generarlos o tras recuperarlos para asegurarse de que la información allí contenida es la adecuada y que no sólo se trata de un documento XML bien formado, ya que esto último no es suficiente. El problema es que la API de Android no proporciona toda la API de Java y es común que al trabajar con la clase SchemaFactory y otras del paquete a la hora de validar una instancia XML salte en tiempo de ejecución el siguiente error: java.lang.IllegalArgumentException: http://www.w3.org/2001/XMLSchema.
No hace falta comprobar las cabeceras de la instancia XML. El error se debe a que esa clase y sus relacionadas forman parte de la API de Android pero con una implementación vacía, por lo que se debe utilizar una implementación externa. Una librería altamente recomendable para suplir esta carencia es Xerces, concretamente su port Xerces-for-Android la cual se encuentra disponible bajo la licencia Apache 2.0.
Obtener Xerces for Android.
Lo primero es instalar un cliente SVN si existe uno ya instalado en el equipo de desarrollo. Yo utilicé Slik Subversion para Windows 7. En Apache tienen una larga lista de clientes y servidores para descargar en función del sistema operativo utilizado.
Tras abrir un terminal utilizamos subversion para descargar la última versión:
svn checkout http://xerces-for-android.googlecode.com/svn/trunk/ xerces-for-android-read-only
Todos los ficheros descargados se encontrarán en C:UsersUsuarioxerces-for-android-read-only.
Importar Xerces en el proyecto de Eclipse.
Primero se crea un nuevo proyecto en Eclipse, un proyecto Java denominado Xerces (o cualquier otro nombre descriptivo). Sobre la carpeta src de dicho proyecto, clic derecho en Import. En la opción Import Files localizar el directorio xerces-for-android-read-only e importar entero el directrio src que contiene. Luego clic derecho sobre el proyecto y Refresh.
Este proyecto es necesario exportarlo como JAR para poderlo importar en el proyecto Android. Para ello clic derecho sobre el proyecto Xerces > Export > JAR file y clic en el botón Next. Seleccionar una ruta y nombre de fichero para el JAR en Select the export destination (xerces-for-android.jar por ejemplo) y clic en Finish.
Ahora toca realizar la importación propiamente dicha al proyecto Android. En el Package manager se localiza el directorio libs (crearlo si no existe) y con el clic derecho acceder a la opción Import. Seleccionar el tipo JAR File y después explorar el fichero JAR creado anteriormente. Una vez importado, clic derecho sobre el JAR importado > Build Path > Add to Build Path. Por último refrescar el proyecto y utilizar en el código los paquetes haciendo los siguientes imports:
import mf.javax.xml.validation.Schema; import mf.javax.xml.validation.SchemaFactory; import mf.javax.xml.validation.Validator;
En vez de los:
import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator
Obviamente los imports varían en función de lo que se desee programar.