Java Expert....Java/Open Source Addict

Redes Sociales

twitterlinkedinrss feedemail youtube

jueves, 2 de julio de 2009

Problemas con Transformador XML + JAVA + Toplink



Hay días en los que buscas y buscas la solución a un problema, te inventas diez mil y una formas para que luego!!!! nada el mismo error.....a todos nos pasa, el problema muchas veces radica en el cansancio que nos desvia la mente del objetivo final, hoy fue uno de esos días.

Bueno el problema radico en que estoy haciendo la migración de la capa de persistencia PersistenceManager a Toplink y me tope con un problema de transformación de los XML, para no hacerles largo el relato el código que tenía era este.

javax.xml.transform.TransformerFactory tFactory =
javax.xml.transform.TransformerFactory.newInstance();
javax.xml.transform.Transformer transformer = tFactory.
newTransformer(new javax.xml.transform.stream.StreamSource(new File(URLXSLT)));
javax.xml.transform.dom.DOMSource xmlDoc = new javax.xml.transform.dom.DOMSource(doc);
transformer.transform(xmlDoc, new javax.xml.transform.stream.StreamResult(new java.io.File(path)));

Cabe aclarar que todo funcionaba bien hasta que comence con Toplink, como Toplink implementa unas nuevas librerías para el manejo de xml como son xml.jar y xmlparserv2.jar (parseador) pense que podría haber alguna incopatibilidad colocando las dos en el classpath, hice las pruebas respectivas y nada, cambie de parseadores y seguia saliendo el mismo error:

javax.xml.transform.TransformerException: java.io.FileNotFoundException

Luego de implementar nuevos parser, abrirme jar y reemplementar cosas... buscar en internet full tiempo comence a ver otra forma de llamar al archivo (ojó que esto actualmente en la versión que se maneja del sistema funciona bien tal y como esta) y efectivamente por alguna extraña razón el problema radicaba aquí. Esta fue la solución:

javax.xml.transform.TransformerFactory tFactory =
javax.xml.transform.TransformerFactory.newInstance();
javax.xml.transform.Transformer transformer = tFactory.
newTransformer(new javax.xml.transform.stream.StreamSource(new File(URLXSLT)));
javax.xml.transform.dom.DOMSource xmlDoc = new javax.xml.transform.dom.DOMSource(doc);
transformer.transform(xmlDoc,
new javax.xml.transform.stream.StreamResult(new java.io.File(path).toURI().getPath()));


Como pueden apreciar la solución fue en cambiar la forma de llamar al archivo, estoy investigando porque se produjo esto. Talvéz la especificación de toplink asi lo requiere ya que utiliza nuevos jar y actualizaciones de los tipicos xalan y xerces, en todo caso ya les comentaré

Espero les sirve y que alegría salió esta situación.............seguimos en migración.