1

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

我究竟做错了什么?

4

2 回答 2

2

看起来问题出在我的应用程序服务器上:我在开发模式下使用WebLogic 10.3.5运行它,它预装了许多公共库,默认配置中的公共库优先于 webappWEB-INF/lib文件夹中部署的库。

要解决此问题,需要 weblogic 特定的应用程序描述,只需在其中创建一个包含该选项的weblogic.xml文件。我使用的文件是这样的:WEB-INFprefer-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>

我仍然不知道哪个库是问题,任何人都知道随时编辑这个答案。

于 2011-07-26T08:38:11.137 回答
0

请下载 Jaxb Extension:这是 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/

好看!。

于 2013-05-28T14:45:04.247 回答