viernes, 29 de octubre de 2010

[Java] Excepciones: Unable to construct record instance



Sentí la necesidad de publicar ésta excepción porque no encontré ayuda de utilidad en internet, apenas en inglés, tampoco en español; inclusive, al buscar el error, los primeros links de los resultados sólo llevan a foros, donde otro usuario pide ayuda respecto al mismo problema, sin una respuesta puntual o certero.


Al trabajar reportes en Java con plantillas de archivos Excel (MS Office, Open Office, Libre Office, etc) ubicadas en memoria no volátil (entiéndase, un disco de almacenamiento); se corre el riesgo de que el archivo esté corrupto; o se corrompa en el proceso de creación.

El error -aparentemente sin sentido- que apareció fue:
ex.getMessage(): Unable to construct record instance.
(Mensaje: No se puede construir instancia de registro)

ex.getCause(): org.apache.poi.hssf.record.RecordFormatException: HSSF does not currently support encrypted workbooks.
(HSSF no es compatible con "libros" cifrados)

ex.getClass(): class org.apache.poi.hssf.record.RecordFormatException.
(Clase: RecordFormatException)
Y la línea de código que lanzó la excepción fue:
Workbook wb = new HSSFWorkbook(inp);
Como son reportes sobre plantillas de excel, ya se tiene un patrón de programación, librerías para interactuar con excel ya agregadas, y varía básicamente la agrupación, manipulación, lectura y muestra de los datos.

Y si bajo ese patrón que siempre ha funcionado, algo empieza a fallar, no es problema del código ni del JDK ni del IDE de Java ni del programador;  es problema externo. Ahora... cómo identificarlo?