Joomla!, MAC OS X y un puñetero XML Parsing Error
Estuve peleándome con este mensaje de error casi 4 horas:
XML Parsing Error at 1:1. Error 4: Not well-formed (invalid token)
¿Y cómo se llega al borde de la desesperación informática por culpa de este mensaje? Te preguntarás supongo.
Estaba creando mi primer componente para Joomla! 1.5.20 utilizando el modelo de programación MVC, como cualquier feliz programador que se enfrenta a un nuevo reto hasta el momento desconocido. Me estuve guiando por un excelente y bien resumido tutorial que encontré en NOSOLOCODIGO.
Resueltos estos y aquellos problemas, creada la relativamente compleja estructura de un componente, con sus subdirectorios, sus view.html.php, sus modelos de datos y sus controller.php, todo perfecto... hasta llegar al último momento. ¡Preparar el ZIP de instalación del componente!
Sigo las instrucciones de Joomla! Developer Network, todo está como debe estar. Reviso el XML de instalación una y otra vez. Nada falta...
XML Parsing Error at 1:1. Error 4: Not well-formed (invalid token)
¡Jolines! Esto es un error en el XML, pero cuál. Reviso cada sección y subsección, cada declaración de datos. Valido una y otra vez. No hay nada extraño. Pero...
XML Parsing Error at 1:1. Error 4: Not well-formed (invalid token)
No sabía yo en ese momento, aún, que el problema no era este primer desarrollo en el que me había aventurado sino el MAC OS X. En concreto su Finder (lo que sería en Windows el Explorador de Archivos) y su Comprimir archivos vía menú contextual.
El asunto, extraño y raro, es más o menos como sigue. El Finder introduce en el archivo ZIP generado archivos de metadatos cuyo nombre es igual al de los archivos comprimidos añadiendo delante un punto y un guión bajo (._). Estos archivos los almacena en una subcarpeta llamada __MACOSX dentro del archivo ZIP.
Al cargar este archivo en el instalador de componentes, módulos y plugins de Joomla! se intentan cargar todos los archivos XML que encuentre en el fichero ZIP, tanto nuestro_componente.xml, de instalación, como ese __MACOSX/._nuestro_componente.xml, pero que contiene metadatos con la estructura de AppleDouble. Es ese puñetero fichero el que genera ese XML Parsing...
Instalar una herramienta con StuffIt no soluciona el problema (que no se generen esos archivos de metadatos). Si no te queda otra que usar tu iMac y su MAC OS X, la solución pasa por volver a los viejos métodos, vía comandos en el Terminal.
En el subdirectorio donde tengamos nuestro componente listo para empaquetar, utilizamos estas dos instrucciones. La primera desactiva la inclusión de esos archivos de metadatos y el segundo es el tradicional uso del compresor zip vía teclado:
export COPYFILE_DISABLE=true
zip -r nuestro_componente.zip *
Claro que la otra solución es usar Ubuntu, cuya versión 10.10 está a puntito de salir del horno, que también es Linux, más potente y sólido, por cierto, con un Navegador de archivos mucho más versátil y útil que el Finder, no cuesta un dineral ni está exclusivamente restringido a una determinada arquitectura de marca y, además, se apoya un gran proyecto de software libre.
O, bueno... usar Windows. Acepto Microsoft como animal de compañía...
Para los que estén montando su primer instalable he de decir que tuve un error desconocido con la instrucción SQL que crea las tablas de mi componente, dado que el XML de instalación no leía el archivo de instrucciones.
Solución, introducir en el propio XML, en la sección <install>, la etiqueta <queries> con las subetiquetas <query> e incluir ahí las instrucciones SQL de instalación. Una etiqueta <query> por cada instrucción, sin líneas en blanco.
XML Parsing Error at 1:1. Error 4: Not well-formed (invalid token)
¿Y cómo se llega al borde de la desesperación informática por culpa de este mensaje? Te preguntarás supongo.
Estaba creando mi primer componente para Joomla! 1.5.20 utilizando el modelo de programación MVC, como cualquier feliz programador que se enfrenta a un nuevo reto hasta el momento desconocido. Me estuve guiando por un excelente y bien resumido tutorial que encontré en NOSOLOCODIGO.
Resueltos estos y aquellos problemas, creada la relativamente compleja estructura de un componente, con sus subdirectorios, sus view.html.php, sus modelos de datos y sus controller.php, todo perfecto... hasta llegar al último momento. ¡Preparar el ZIP de instalación del componente!
Sigo las instrucciones de Joomla! Developer Network, todo está como debe estar. Reviso el XML de instalación una y otra vez. Nada falta...
XML Parsing Error at 1:1. Error 4: Not well-formed (invalid token)
¡Jolines! Esto es un error en el XML, pero cuál. Reviso cada sección y subsección, cada declaración de datos. Valido una y otra vez. No hay nada extraño. Pero...
XML Parsing Error at 1:1. Error 4: Not well-formed (invalid token)
No sabía yo en ese momento, aún, que el problema no era este primer desarrollo en el que me había aventurado sino el MAC OS X. En concreto su Finder (lo que sería en Windows el Explorador de Archivos) y su Comprimir archivos vía menú contextual.
El asunto, extraño y raro, es más o menos como sigue. El Finder introduce en el archivo ZIP generado archivos de metadatos cuyo nombre es igual al de los archivos comprimidos añadiendo delante un punto y un guión bajo (._). Estos archivos los almacena en una subcarpeta llamada __MACOSX dentro del archivo ZIP.
Al cargar este archivo en el instalador de componentes, módulos y plugins de Joomla! se intentan cargar todos los archivos XML que encuentre en el fichero ZIP, tanto nuestro_componente.xml, de instalación, como ese __MACOSX/._nuestro_componente.xml, pero que contiene metadatos con la estructura de AppleDouble. Es ese puñetero fichero el que genera ese XML Parsing...
Instalar una herramienta con StuffIt no soluciona el problema (que no se generen esos archivos de metadatos). Si no te queda otra que usar tu iMac y su MAC OS X, la solución pasa por volver a los viejos métodos, vía comandos en el Terminal.
En el subdirectorio donde tengamos nuestro componente listo para empaquetar, utilizamos estas dos instrucciones. La primera desactiva la inclusión de esos archivos de metadatos y el segundo es el tradicional uso del compresor zip vía teclado:
export COPYFILE_DISABLE=true
zip -r nuestro_componente.zip *
Claro que la otra solución es usar Ubuntu, cuya versión 10.10 está a puntito de salir del horno, que también es Linux, más potente y sólido, por cierto, con un Navegador de archivos mucho más versátil y útil que el Finder, no cuesta un dineral ni está exclusivamente restringido a una determinada arquitectura de marca y, además, se apoya un gran proyecto de software libre.
O, bueno... usar Windows. Acepto Microsoft como animal de compañía...
NOTA:
Para los que estén montando su primer instalable he de decir que tuve un error desconocido con la instrucción SQL que crea las tablas de mi componente, dado que el XML de instalación no leía el archivo de instrucciones.
Solución, introducir en el propio XML, en la sección <install>, la etiqueta <queries> con las subetiquetas <query> e incluir ahí las instrucciones SQL de instalación. Una etiqueta <query> por cada instrucción, sin líneas en blanco.

Comentarios
Publicar un comentario