В вашем коде есть "/" и разделитель файлов Windows в начале имени файла, переданного getRealPath()
, Java интерпретирует косые черты в именах файлов в соответствии с текущей ОС.
Не использование разделителей файлов может дать лучший результат:
String filename = getServletContext().getRealPath("/WEB-INF/XML.xml");
log.debug("Using XML file: " + filename);
xml_out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filename),"UTF8"));
Использование отдельной переменной для имени файла позволяет регистрировать его, чтобы вы могли видеть неожиданные результаты на ранних этапах процесса разработки.