重要说明:已更新解决方案!
见JAXB 2.x with MOXy (Eclipselink 2.1.2): persisting XHTML as element value
我想通过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仓库现在不可用了:
http://download.eclipse.org/rt/eclipselink/maven.repo
该链接位于
http://wiki.eclipse.org/EclipseLink/Maven
谢谢
最佳答案
有关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 </p>
<p>asdf</p>]]></z:content-html>
</z:dialog>
请注意,“ ...”只是您拥有的任何名称空间URI的替代。