【问题标题】:JAXB 2.x with MOXy (Eclipselink 2.1.2): persisting XHTML as element value带有 MOXy 的 JAXB 2.x (Eclipselink 2.1.2):将 XHTML 持久化为元素值
【发布时间】:2011-10-10 12:30:16
【问题描述】:

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

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 sn-p。

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

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

谢谢

【问题讨论】:

    标签: java xml jaxb moxy


    【解决方案1】:

    关于 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 的替代品。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多