我正在研究用jersey编写的REST Web服务,我正在尝试输出一些带有CDATA部分的XML。我理解the reference implementation of JAXB doesn't support that,所以我下载了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的文件工作正常,所以问题似乎与泽西有关。根据{{3}}我的设置很好,但是当我的jersey资源返回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>
我做错了什么?
答案 0 :(得分:2)
看起来问题是我的应用服务器:我在开发模式下运行 WebLogic 10.3.5 ,其中预装了许多常用库,默认配置优先在webapp WEB-INF/lib
文件夹中部署的那些。
要解决此问题,需要使用特定于weblogic的应用程序说明,只需在weblogic.xml
内创建包含WEB-INF
选项的prefer-web-inf-classes
文件即可。我使用的文件是:
<?xml version='1.0' standalone='yes'?>
<weblogic-web-app>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
</weblogic-web-app>
我仍然不知道哪个库是问题,但是任何人都知道可以自由编辑这个答案。
答案 1 :(得分:0)
请下载Jaxb扩展: 这是Jaxb的Eclipselink开源扩展。 获取jar文件:eclipselink.jar复制到Project lib中。
http://www.eclipse.org/eclipselink/downloads/
EclipseLink 2.4.1 Installer Zip (37 MB)
见示例:
好看!。