2012-03-08 18 views
5

Estoy leyendo una lista que tiene una gran cantidad de archivos bajo ciertos componentes. p.Generar mapeo XML de una búsqueda de directorio recursiva

component1:filelocation1/a11.ear 
component1:filelocation1/a12.ear 
component2:filelocation2/a2.ear 
component3:filelocation3/a3.ear 
component4:filelocation3/basefile.properties 

necesito para descomprimir cada archivo de forma recursiva hasta el último nivel de datos y generar un archivo de asignación XML capturar la asignación correcta del componente hasta el último elemento en el archivo.

La estructura del documento XML de los cuales sería como:

<my-app> 
    <mapping> 
    <toplevel loc="filelocation1" filename="a11.ear" component="component1"> 
     <childlevel loc="." filename="x1.war"> 
      <childlevel loc="WEB-INF/classes" filename="abc1.class"/> 
      <childlevel loc="WEB-INF/classes" filename="abc2.class"/> 
     </childlevel> 
    </toplevel> 
    <toplevel loc="filelocation1" filename="a12.ear" component="component1"> 
     <childlevel loc="." filename="x2.jar"> 
     <childlevel loc="org/test" filename="abc1.class"/> 
     <childlevel loc="org/test" filename="abc2.class"/> 
     </childlevel> 
     <childlevel loc="." filename="x3.war"> 
      <childlevel loc="WEB-INF/lib" filename="web1.jar"> 
      <childlevel loc="org/test" filename="abc1.class"/> 
     </childlevel> 
     <childlevel loc="WEB-INF/classes" filename="abc2.class"/> 
     </childlevel> 
    </toplevel> 
    </mapping> 
    </my-app> 

¿Cuál es la mejor appraoch de hacer eso? Estoy considerando usar un analizador DOM para generar el XML.

+0

Solo para agregar: el proceso implica leer la lista de archivos desde un archivo de texto, descomprimir cada archivo de forma recursiva y mientras se descomprime creando la asignación XML. Por lo tanto, una llamada recursiva para expandir un archivo necesitaría de alguna manera el elemento padre para pasar, de modo que una vez que esté fuera del ciclo recursivo podamos tener el xml correcto. Este xml tendrá datos para todos los archivos en el archivo de texto con el que comenzamos. – rommel

+0

¿Tiene alguna preferencia por el idioma que se utilizará para el procesamiento de XML? – menjaraz

+0

Puede agregar la etiqueta [tag: java] si está relacionada con su publicación anterior. – menjaraz

Respuesta

0

Haría esto usando gradle.

Gradle tiene buenas instalaciones incorporadas para desempacar los archivos. Puede usar groovy (viene con gradle) para analizar/generar XML, que será mucho más limpio que usar una biblioteca Java XML.

1

Dado que los archivos JAR también son archivos ZIP, si va a hacer esto en Java, usaría la biblioteca java.util.zip. Aunque todavía tendrá que abrir recursivamente cualquier JAR incrustado en WAR y EAR, le ahorrará la molestia de recorrer los directorios que contienen archivos sin formato. También puede usar la subclase JarFile del ZipFile que ofrece la biblioteca java.util.zip.

http://docs.oracle.com/javase/6/docs/api/java/util/zip/ZipFile.html

también probablemente no me molestaría con un analizador DOM por sólo imprimir XML. Construiría una estructura (potencialmente grande) en la memoria cuando podría imprimir datos en una transmisión sobre la marcha. Además, los analizadores son para analizar XML en una estructura de datos, no al revés. Las clases estándar de análisis DOM de Java, javax.xml.parsers.DocumentBuilderFactory y javax.xml.parsers.DocumentBuilder no vienen con un comando de "impresión". La forma estándar de crear texto formateado desde un objeto org.w3c.dom.Document es usar un transformador XSL (consulte http://java.sun.com/webservices/reference/tutorials/jaxp/html/xslt.html#gghkq) y nuevamente, eso probablemente sea más problemático de lo que vale. Supongo que depende de cuánto quieras ampliar este programa, pero si lo que tienes aquí es todo lo que tiene que hacer, no construiría un gran objeto DOM.

Cuestiones relacionadas