1

重要提示:已更新解决方案!

请参阅带有 MOXy 的 JAXB 2.x (Eclipselink 2.1.2):将 XHTML 持久化为元素值


我想通过 JAXB 将 XHTML 存储为 XML 的节点值,例如

<p>This is a paragraph</p>

应该“按原样”存储在 XML 中:

<root>
  <title>Title</title>
  <content>...the above XHTML snippet of paragraph...</content>
</root>

因为我使用 MOXy 作为 JAXB Impl,所以我想试试这个(版本 2.1.2):

@XmlCDATA
public void setContent(String content) {
  this.content = content;
}

但是,内容被编组为转义代码,之后我无法将其显示为 XHTML 片段。

首先:我在哪里可以下载最新版本的 MOXy?这可能是 2.1.2 中的错误。maven repo 不知何故不再可用:http: //download.eclipse.org/rt/eclipselink/maven.repo

该链接位于 http://wiki.eclipse.org/EclipseLink/Maven

谢谢

4

1 回答 1

2

关于 MOXy 2.3.0 版的更新和解决方案: 我现在已经试用了 EclipseLink 2.3.0 版,它可以工作了!

这是我坚持的数据对象:

import org.eclipse.persistence.oxm.annotations.XmlCDATA;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name=DialogMessage.ROOTNAME, namespace="...")
public class DialogMessage {

    @XmlTransient
    public static final String ROOTNAME = "dialog";

    @XmlElement(name="content-html", namespace="...")
    @XmlCDATA
    private String contentHTML = null;

    public String getContentHTML() {
        return contentHTML;
    }

    public void setContentHTML(String contentHTML) {
        this.contentHTML = contentHTML;
    }

}

和 MOXy 启用配置文件 package-info.java

@javax.xml.bind.annotation.XmlSchema( 
    namespace = "...", 
    xmlns = {@javax.xml.bind.annotation.XmlNs(prefix = "z", namespaceURI ="...")},  
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package com.yourdomain.packagenametodataclass; 

jaxb.properties

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

当我将 DialogMessage 的实例作为 XML 写入磁盘时,XML 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<z:dialog xmlns:z="...">
   <z:content-html><![CDATA[<p>sgd <strong>asdf</strong> asdf&#160;</p>
<p>asdf</p>]]></z:content-html>
</z:dialog>

请注意,“...”只是您拥有的任何命名空间 URI 的替代品。

于 2011-10-10T15:27:56.373 回答