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.0 不允许该字符,如果我将 xml 版本设置为 1.1 解析器很高兴。

我可以通过以下方式做到这一点:

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 回答