使用MOXy的@XmlCDATA注释和球衣

时间:2011-07-25 09:16:18

标签: jaxb jersey weblogic-10.x jaxb2 moxy

我正在研究用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 &lt;&lt;&lt; &amp;&amp; >>></longdescription></info>

我做错了什么?

2 个答案:

答案 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)

见示例:

http://theopentutorials.com/tutorials/java/jaxb/jaxb-marshalling-and-unmarshalling-cdata-block-using-eclipselink-moxy/

好看!。