java-通过jboss上的resteasy为jaxb配置输出XML版本的最佳方法

我要序列化的数据包含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,那么哪个XML解析器将不会解析为1.0不允许该字符,所以解析器很高兴.

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

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

因此,我想知道的是配置jboss / resteasy / jaxb的最佳方法是什么,以便在创建转换器时使用配置了此输出属性的转换器.

解决方法:

您可以在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.以下是对类似问题的答案,其中包括如何执行此操作的示例:

> JAXB/Jersey – How To Specify “schemaLocation”

上一篇:java-如何在JBoss EAP6 / AS7中的安全约束之前应用过滤器


下一篇:java – 为什么我们必须在JBOSS 8(wildfly)的清单上声明依赖?