以下是 JAXB 关于\n
and的默认行为示例\r
:
Java 模型(根)
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Root {
private String foo;
private String bar;
public String getFoo() {
return foo;
}
public void setFoo(String foo) {
this.foo = foo;
}
public String getBar() {
return bar;
}
public void setBar(String bar) {
this.bar = bar;
}
}
演示代码
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Root.class);
Root root = new Root();
root.setFoo("Hello\rWorld");
root.setBar("Hello\nWorld");
Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(root, System.out);
}
}
输出
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><root><bar>Hello
World</bar><foo>Hello
World</foo></root>
更新
以下是基于我所做的一些调查的一些额外细节。
所有JAXB (JSR-222)实现通用
- 如果您正在编组到
XMLStreamWriter
或XMLEventWriter
直接(通过Marshaller
)或间接(通过可能的 JAX-RS 或 JAX-WS 提供程序),则转义将基于 StAX 实现。Woodstox 似乎正确地逃避了事情,但我正在使用的 JDK 中的 StAX 实现没有。
EclipseLink JAXB (MOXy)
- MOXy 中有一个与转义相关的错误
\r
,我目前正在修复(参见:http ://bugs.eclipse.org/414608 )
JAXB 参考实现
- JAXB 参考实现将在编组到时正确转义 '\r'
OutputStream
,但Writer
在我正在使用的 JDK 中至少不会转义。