Я с подозрением отношусь к этой строке:
Document doc = db.parse(new InputSource(
new StringReader(IOUtils.toString(schemaURL.openStream()))));
Я не знаю, что здесь делает IOUtils.toString
, но, по-видимому, он предполагает определенную кодировку без учета декларации XML.
Почему бы просто не использовать:
Document doc = db.parse(schemaURL.openStream());
Аналогично, ваш FileUtils.writeStringToFile
не указывает кодировку символов ... какую кодировку он использует и почему кодировка указана в StreamResult
?