2011-10-10 60 views
1

重要提示:用解決方案更新!JAXB 2.x與MOXy(Eclipselink 2.1.2):堅持XHTML作爲元素值

參見JAXB 2.x with MOXy (Eclipselink 2.1.2): persisting XHTML as element value


欲XHTML存儲爲經由JAXB,例如一個XML的節點值

<p>This is a paragraph</p> 

應該得到保存 「的是」 在一個XML:

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

由於我使用莫西作爲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

感謝

回答

2

更新和解決方案有關莫西版本2.3.0: 我已經嘗試了2.3版本EclipseLink現在和它的工作!

這裏是我堅持我的數據對象:

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; 
    } 

} 

和莫西啓用配置文件: 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的替代品。

相關問題