JAXB 2.x с MOXy (Eclipselink 2.1.2): сохранение XHTML в качестве значения элемента - PullRequest
1 голос
/ 10 октября 2011

ВАЖНО: обновлено вместе с решением!

См. JAXB 2.x с MOXy (Eclipselink 2.1.2): сохранение XHTML в качестве значения элемента


Я хочу сохранить XHTML как значение узла XML через JAXB, например,

<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

Спасибо

1 Ответ

2 голосов
/ 10 октября 2011

Обновление и решение относительно MOXy версии 2.3.0: Я опробовал версию 2.3.0 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;
    }

}

и 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 пространства имен, который у вас есть.

...