Normal bir web projesinde iş kolay. Web Content ya da WEB-INF altına istediğimiz dosyayı koyup ona erişebiliyoruz.

EAR projesinde ise;

File f = new File("talha.xml")

dediğimiz zaman application server’ın root’una düşüyoruz. Sittinsene ulaşamayız o dosyaya artık. Bu yüzden önce classloadera erişmemiz ve bunun üzerinde kaynaklara erişmemiz gerekiyor. Bunun için EAR projesinin altındaki web projesindeki(WAR) bir servletin içinde önce class loader’a erişiyoruz ve sonra buradan istediğimiz kaynağı çekiyoruz.

URL url = this.getClass().getClassLoader().getResource("WEB-INF/LimangoExample.xml");

getClassLoader() dediğimiz anda nereye düştüğümüzü görmek için:

this.getClass().getClassLoader().getResource(".")

‘i kullanabiliriz. Bu URL, EAR içindeki WAR projesinin kök dizinini veriyor. getResource içerisinde de istediğimiz dizine gidiyoruz.

Artık bu saatten sonra normal URL okur gibi okuyabiliriz dosyayı:

StringBuffer buffer = new StringBuffer();
BufferedReader in = new BufferedReader(
new InputStreamReader(
url.openStream()));
String inputLine;

while ((inputLine = in.readLine()) != null) {
buffer.append(inputLine);
}
in.close();

Dosyamız XML ise ve işleri biraz kolaylaştırmak istiyorsak JAXB’nin unmarshaller’ını kullanabiliriz okumak için.