我要序列化的数据包含xml 1.0版中不允许的字符:
<value>this  is not good for 1.0</value>
当RESTEasy通过JAXB序列化它时,它会产生以下结果:
<?xml version="1.0" encoding="UTF-8"?>
<value>this  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”