Версия для сериализации FXXXXXML-данных формата-xml и кодировка не добавлены в xml

Привет, я сериализую объект java POJO для xml, используя quick-xml (https://github.com/FasterXML/jackson-dataformat-xml/wiki). Когда я делаю это, я получил xml, но это не имеет никакой версии и кодировки в xml файле. Это формат, который мне нужен

<?xml version="1.0" encoding="utf-8"?>
<SampleRequest>
... 
</SampleRequest>

Но я получил только этот

<SampleRequest>
... 
</SampleRequest>

Нужно ли добавлять какую-либо конфигурацию в анонсирование jackson quickxml.

Ответ 1

Вы можете настроить свой XmlMapper на запись заголовка XML.

XmlMapper xmlMapper = new XmlMapper();
xmlMapper.configure( ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true );

Как пример:

import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator;
import java.io.IOException;

public class Xml {
    public static void main(String[] args) throws IOException {
     // Important: create XmlMapper; it will use proper factories, workarounds
        XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
        xmlMapper.writeValue(System.out, new SampleRequest());
    }
}

class SampleRequest{
    public int x = 1;
    public int y = 2;
}

Это создает вывод:

<?xml version="1.0" encoding="UTF-8"?>
<SampleRequest>
   ...
</SampleRequest>

Если вы хотите установить версию 1.1 вместо 1.0, используйте ToXmlGenerator.Feature.WRITE_XML_1_1.

Обратите внимание, что команда Faster-XML рекомендует использовать библиотеку Woodstox. В случае, если вы используете его, некоторые другие конфигурации могут быть установлены. Среди всех них есть одна, связанная с установкой двойных кавычек:

public static final String P_USE_DOUBLE_QUOTES_IN_XML_DECL="com.ctc.wstx.useDoubleQuotesInXmlDecl";

на WstxOutputProperties.java

Для получения более подробной информации ознакомьтесь с настройкой синтаксического анализатора Woodstox.

Ответ 2

Для тех, кто интересуется, как изменить одинарные кавычки на двойные:

String propName = com.ctc.wstx.api.WstxOutputProperties.P_USE_DOUBLE_QUOTES_IN_XML_DECL;
xmlMapper.getFactory()
         .getXMLOutputFactory()
         .setProperty(propName, true);