2010-06-04 9 views
5

Mam różne pliki XML w folderze "src/main/recources" i chcę je przeczytać z mojego webaplikacji.Przechowuj pliki xml w folderze zasobów (WAR), przeczytaj z kodu

File f = new File("file1.xml"); 
f.getAbsolutePath(); 

Kod zostanie wywołana wewnątrz WebService, a to wypisuje 'C: \ Users \ Administrator' Kiedy patrzę wewnątrz Tomcat-server-wyjścia. Moje obecne rozwiązanie polega na umieszczeniu dokumentów "file1.xml" poza WAR, w folderze "C: \" - ale w ten sposób moja WAR nie może być przenoszona.

Próbowałem zostały również

<bean name="webService"> 
     <property name="document"> 
     <value>classpath:file1.xml</value> 
     </property> 
    </bean> 

Ale to tylko wypisuje „ścieżce klasy: file.xml” bez analizowania go.

Pozdrawiam, Pete

Odpowiedz

5

Jeśli używasz standardowego opakowania wojenne maven2, plik file1.xml zostanie skopiowany do katalogu WEB-INF/classes w twoim pliku war.

Możesz uzyskać dostęp do tego pliku za pośrednictwem ścieżki klasy.

URL resourceUrl = URL.class.getResource("/WEB-INF/classes/file1.xml"); 
File resourceFile = new File(resourceUrl.toURI()); 
+2

Ahh to działa, musiałem zmodyfikować pierwszą linię nieco: URL resourceUrl = Thread.currentThread(). GetContextClassLoader(). GetResource ("file1.xml"); Plik File1.xml musi oczywiście znajdować się w folderze zasobów. Wielkie dzięki! – JavaPete

+0

Ale dlaczego musisz przejść przez currentThread(). GetContextClassLoader()? Czy w twoim otoczeniu są jakieś ograniczenia bezpieczeństwa lub coś mi brakuje? Czy tworzysz swoją aplikację webową za pomocą standardowej wtyczki maven war lub poprzez złożenie lub w inny sposób? –

0

Jeśli umieścisz plik w katalogu pod WEB-INF (lub w sobie WEB-INF), a następnie można go odczytać za pomocą ServletContext „s getResourceAsStream metody:

try { 
    InputStream is = context.getResourceAsStream("/WEB-INF/file1.xml"); 
    ... 
} catch (IOException e) { 
    ... 
} 
+0

Nie mam obiektu ServletContext, ponieważ kod ten znajduje się w metodzie webservice (Spring-WS). Czy może brakuje mi punktu? – JavaPete

0

Możesz wstawić informacje o ścieżce do pliku właściwości, który znajduje się w ścieżce/WEB-INF/classes - i załadować te informacje do aplikacji w środowisku wykonawczym.

Aby mieć inną wartość dla tej właściwości ścieżki, można użyć opcji profili maven lub dowolnego innego narzędzia kompilacji - w ten sposób różne środowisko powoduje, że plik WAR ma odpowiednią wartość właściwości dla ścieżki odpowiedniej dla tego środowiska.

+0

Tak, ale chcę tego uniknąć, ponieważ względna ścieżka do pliku nie wymagałaby ode mnie różnych plików konfiguracyjnych. Ale wykorzystam to rozwiązanie, jeśli nie będę mógł uzyskać niczego innego, dzięki! – JavaPete

Powiązane problemy