2012-03-08 22 views
5

Czytam listę, która ma dużą liczbę archiwów pod pewnymi komponentami. np.Generowanie odwzorowania XML rekursywnego wyszukiwania katalogu

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

muszę rozpakować każdego archiwum rekurencyjnie do ostatniego poziomu danych i wygenerować plik odwzorowania XML przechwytywanie poprawne mapowanie z komponentu do ostatniego elementu w archiwum.

xml strukturę dokumentu, który byłby jak:

<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> 

Jaki jest najlepszy appraoch to zrobić? Rozważam użycie parsera DOM do wygenerowania XML.

+0

Wystarczy dodać - proces polega na odczytaniu listy plików z pliku tekstowego, rozpakowaniu każdego archiwum rekurencyjnie i podczas rozpakowywania, budowaniu odwzorowania XML. Zatem rekurencyjne wywołanie ekspansji archiwum wymagałoby jak najszybszego przekazania elementu nadrzędnego, tak aby po wyjściu z pętli rekursywnej można było uzyskać odpowiedni xml. Ten xml będzie zawierał dane dla wszystkich archiwów w pliku tekstowym, od którego zaczęliśmy. – rommel

+0

Czy preferujesz język używany do przetwarzania XML? – menjaraz

+0

Możesz dodać tag [tag: java], jeśli jest powiązany z poprzednim postem. – menjaraz

Odpowiedz

0

Zrobiłbym to używając gradle.

Gradle ma ładne wbudowane urządzenia do rozpakowywania archiwów. Możesz użyć groovy (pochodzi z gradle) do parsowania/generowania XML, które będzie dużo czystsze niż używanie biblioteki Java XML.

1

Ponieważ pliki JAR są również plikami ZIP, jeśli zamierzasz to zrobić w Javie, użyłbym biblioteki java.util.zip. Chociaż nadal będziesz musiał rekursywnie otwierać wszystkie pliki JAR osadzone w WAR i EAR, zaoszczędzi ci to kłopotu z przechodzeniem przez katalogi zawierające pliki płaskie. Możesz także użyć podklasy JarFile pliku ZipFile oferowanego przez bibliotekę java.util.zip.

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

ja też pewnie nie przeszkadza z parsera DOM za jedyne drukowania XML. Budowałbyś (potencjalnie dużą) strukturę w pamięci, skoro zamiast tego możesz drukować dane w strumieniu podczas podróży. Ponadto parsery służą do analizowania XML w strukturze danych, a nie odwrotnie. Standardowe klasy analizowania Java DOM, javax.xml.parsers.DocumentBuilderFactory i javax.xml.parsers.DocumentBuilder nie są dostarczane z poleceniem "print". Standardowy sposób tworzenia sformatowanego tekstu wyjściowego z obiektu org.w3c.dom.Document polega na użyciu transformatora XSL (patrz http://java.sun.com/webservices/reference/tutorials/jaxp/html/xslt.html#gghkq) i ponownie, to prawdopodobnie więcej kłopotów niż jest to warte. Przypuszczam, że zależy to od tego, jak bardzo chcesz rozszerzyć ten program, ale jeśli to, co masz tutaj, to wszystko, co trzeba, nie zbudowałbym dużego obiektu DOM.

Powiązane problemy