Ehm ... allora, nelle web application le cose vanno un po' diversamente per quanto riguarda i riferimenti ai file.
- mettere un path "relativo" (alla directory "corrente") nel sorgente non va bene, quale sia la directory corrente dipende dall'application server e da come viene avviato (potresti averne il controllo o no). Potrebbe essere la directory di installazione del server o poco più sotto ma in ogni caso è altamente improbabile che sia una directory utile per una o più applicazioni.
- mettere path "assoluti" nel sorgente non va mai bene, qualunque sia il tipo di applicazione.
Se i file da rintracciare e leggere fanno parte "fissi" della webapp, le soluzioni sono almeno 2:
1) Usare il concetto delle risorse che vengono cercate lungo il classpath.
URL fileUrl = UnaTuaClasse.class.getResource("documento.xml");
oppure
InputStream fileStream = UnaTuaClasse.class.getResourceAsStream("documento. xml");
documento.xml nell'esempio sta nello stesso package di UnaTuaClasse. Nota: SAXBuilder ha i build() sia con URL che con InputStream, vedi suo javadoc.
2) Usare i getResource/getResourceAsStream di ServletContext. Questi metodi non usano i concetti del classloader. La specifica del file deve iniziare con "/" che è riferito alla context-root della applicazione.
ServletContext sc = .....
URL fileUrl = sc.getResource("/WEB-INF/myfiles/documento.xml");