Решение, которое я нашел, состоит в том, чтобы использовать пользовательский API Джексона с Writer с нужной вам кодировкой и печатать декларацию xml самостоятельно.
Вы должны использовать оболочку Writer, потому что Джексон использует отражение (я думаю, что это так)выясните, какой тип писателя вы используете, и какова его кодировка, и в зависимости от того, выполняет ли она кодирование объектов XML с кодом выше 127 (если это не UTF-8). Если вас устраивает кодирование объектов XML, вы можете пропустить оболочку.
если вы используете
mapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
Джексона, вы рискуете создать недопустимый XML в зависимости от вашей локальной среды.Джексон всегда будет печатать UTF-8 в объявлении xml, и если вы предоставляете поток с кодировкой, отличной от utf-8 (а некоторые конструкторы писателей не позволяют вам указать кодировку и использовать платформу по умолчанию - которая может меняться между платформами), вы можете получитьТело документа, закодированное не так, как заголовок объявления xml, заставит вас поверить.
String fileName = "/tmp/file.xml";
String encoding = "ISO-8859-1";
Writer output = new OutputStreamWriter(new FileOutputStream(fileName), encoding);
output.write("<?xml version=\"1.0\" encoding=\"" + encoding + "\" ?>\n");
mapper.writer().writeValue(new Writer(output) {
@Override
public void write(char[] var1, int var2, int var3) throws IOException {
output.write(var1, var2, var3);
}
@Override
public void flush() throws IOException {
output.flush();
}
@Override
public void close() throws IOException {
output.close();
}
}, value);