3

xml バージョン 1.0 で許可されていない文字を含むシリアル化中のデータがあります。

<value>this &#18; is not good for 1.0</value>

RESTEasy がこれを JAXB 経由でシリアライズすると、次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<value>this &#18; is not good for 1.0</value>

xml バージョンを 1.1 パーサーに設定した場合、1.0 ではその文字が許可されないため、どの XML パーサーが解析しないかは問題ありません。

私はこれを行うことができます:

transformer.setOutputProperty(OutputKeys.VERSION, "1.1");

したがって、私が知りたいのは、jboss / resteasy / jaxb を構成して、この出力プロパティで構成されたトランスフォーマーを作成するときに使用する最良の方法は何かということです。

4

1 に答える 1

3

で次のように設定しMarshallerて、新しいヘッダーを作成できます。

    // Remove the header that JAXB will generate
    marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);

    // Grab the encoding that will be used for Marshalling
    String encoding = (String) marshaller.getProperty(Marshaller.JAXB_ENCODING);

    // Specify the new header
    marshaller.setProperty("com.sun.xml.bind.xmlHeaders", "<?xml version=\"1.1\" encoding=\"" + encoding + "\">");

JAX-RS 環境では、 を作成しMessageBodyWriterてこのように構成できますMarshaller。同様の質問に対する次の回答には、これを行う方法の例が含まれています。

于 2013-05-29T17:53:09.893 に答える