Tengo una aplicación J2EE desplegada como un archivo EAR, que a su vez contiene un archivo JAR para el código de la capa empresarial (incluidos algunos EJB) y un archivo WAR para el código de la capa web. El archivo EAR se implementa en JBoss 3.2.5, que descomprime los archivos EAR y WAR, pero no el archivo JAR (este no es el problema, solo es FYI).Obtener la ruta absoluta de un archivo dentro de un JAR dentro de un EAR?
Uno de los archivos dentro del archivo JAR es una plantilla de MS Word cuya ruta absoluta debe pasarse a algún código nativo de MS Word (usando Jacob, FWIW).
El problema es que si trato de obtener el archivo como esto (desde dentro de un cierto código en el archivo JAR):
URL url = getClass().getResource("myTemplate.dot");
File file = new File(url.toURI()); // <= fails!
String absolutePath = file.getAbsolutePath();
// Pass the absolutePath to MS Word to be opened as a document
... entonces el java.io.File
constructor emite la IllegalArgumentException "URI no es jerárquica ". La URL y URI ambos tienen el mismo toString (salida), a saber:
jar:file:/G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents/myapp.jar!/my/package/myTemplate.dot
Esta gran parte de la ruta es válida en el sistema de archivos, pero el resto no es (ser interno al archivo JAR):
G:/jboss/myapp/jboss/server/default/tmp/deploy/tmp29269myapp.ear-contents
¿Cuál es la forma más fácil de obtener la ruta de acceso absoluta a este archivo?
Cuando encontré este problema, mi primera idea fue "¡sí, tal vez la única forma es escribir un archivo temporal!". Y sorpresa, ¡ES LA única manera! ¿Cómo puede ser que no haya forma de manejar una ruta dentro de un contenedor? Si puede obtener la transmisión, puede obtener el archivo en un mundo perfecto. –