我正在研究用球衣编写的 REST Web 服务,我正在尝试输出一些带有 CDATA 部分的 XML。我了解JAXB 的参考实现不支持该功能,因此我下载了 EclipseLink 的 MOXy,并试图让 @XmlCDATA 注释工作。
我的 JAXB 映射 bean 看起来像这样
package com.me.entities;
@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD)
public class MyBean {
@XmlAttribute
private URI thumbnail;
@XmlElement(name="longdescription") @XmlCDATA
private String description;
public MyBean() { }
public final String getDescription() { return description; }
public final void setDescription(String d) { this.description = d; }
}
我把文件和类文件jaxb.properties
放在com/me/entities
一起。属性文件有
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
在里面。我确信它会成功加载,因为如果我用一些废话替换工厂类名称,应用程序就会崩溃。此外,明确编组我自己创建 JAXBContext 的文件工作正常,所以问题似乎与球衣有关。根据这个我的设置很好,但是当我的球衣资源返回 MyBean 的实例时
...
@GET @Produces(MediaType.TEXT_XML)
public MyBean getMyBean() {
MyBean b = new MyBean();
b.setDescription("Some blurb plenty of invalid chars like <<< && >>>");
return b;
}
我回来的没有CDATA,但看起来像
<?xml version="1.0" encoding="UTF-8"?>
<info><longdescription>Some blurb plenty of invalid chars like <<< && >>></longdescription></info>
我究竟做错了什么?