web-dev-qa-db-ja.com

FasterXMLjackson-dataformat-xmlシリアル化バージョンとエンコーディングがxmlに追加されていません

こんにちは私はfaster-xml( https://github.com/FasterXML/jackson-dataformat-xml/wiki )を使用してJava POJOオブジェクトをxmlにシリアル化します。私はxmlを取得しましたが、xmlファイルにバージョンとエンコーディングがありません。これは私が必要とする形式です

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

しかし、私はこれだけを手に入れました

<SampleRequest>
... 
</SampleRequest>

Jacksonfasterxmlアノテーションに追加する必要のある構成はありますか?.

11

XMLヘッダーを書き込むようにXmlMapperを構成できます。

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.0ではなく1.1に設定したい場合は、使用する ToXmlGenerator.Feature.WRITE_XML_1_1

Faster-XMLチーム 推奨 使用する Woodstox ライブラリであることに注意してください。使用する場合は、他の設定も可能です。それらすべての中に、二重引用符の設定に関連するものがあります。

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

at WstxOutputProperties.Java

詳細については、 Woodstoxパーサーの構成 を確認してください。

28

一重引用符を二重引用符に変更する方法を疑問に思っている人のために:

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