2009-09-30 9 views
14

Ich suche eine Klasse zu konvertieren, die wie folgt aussieht ...Was ist das Jaxb-Äquivalent eines Textknotenwertes?

public class Amenity { 
    public String id; 
    public String value; 
} 

in das folgende XML mit JAXB Anmerkungen:

<amenity id="id-string-here">value-string-here</amenity> 

Weiß jemand, was Anmerkung auf dem value Membervariable zu verwenden, um das zu erreichen? Der nächstgelegene ich bisher bekommen habe ist:

@XmlRootElement 
public class Amenity { 
    @XmlAttribute 
    public String id; 
    @XmlElement 
    public String value; 
} 

Leider ist dieser Ansatz mir nicht erlaubt, zu spezifizieren, dass die value Membervariable sollte nicht als seine eigenen Tag <value></value> gemacht werden.

+0

Wie viele haben erwähnt, der Titel dieser Frage war irreführend, da er fragt, wie man CDATA-Blöcke rendert, aber das obige Beispiel veranschaulicht dies nicht deutlich. Zu der Zeit, als ich einen Beitrag veröffentlichte, brauchte ich keinen CDATA-Block, sondern musste nur über die Annotation @XmlValue wissen. Deshalb habe ich Jarnbjo die Antwort gegeben. Seitdem brauchte ich tatsächlich Informationen darüber, wie man einen CDATA-Block erzeugt; Daher waren nachfolgende Antworten auch sehr hilfreich. Ich habe jedes gewählt. Danke für die Hilfe alle! – ra9r

Antwort

21

Ich bin mir nicht 100% sicher, aber versuchen Sie eine @XmlValue Annotation anstelle von @XmlElement zu verwenden.

+3

+1, das ist genau richtig – skaffman

0

JAXB unterstützt das Marshaling/Marshalling von/zu CDATA XML-Typen nicht.

+1

Die JAXB-Spezifikation umfasst nicht CDATA, jedoch enthalten JAXB-Implementierungen wie EclipseLink JAXB (MOXy) Erweiterungen für die Behandlung von CDATA, http://bdoughan.blogspot.com/2010/07/cdata-cdata- run-run-data-run.html –

4

Es sieht aus wie die Frage Textknoten bezog nicht CDATA Knoten, aber hier ist ein Link, wie Eclipse JAXB (moxy) Griffe CDATA:

+2

Nicht sicher, warum diese Antwort abgelehnt wurde. Es wurde zugunsten der Leute verlassen, die das Problem anhand des Titels fanden. Für das, was es wert ist, habe ich die @ XmlValue-Antwort von jarnbjo abgegeben, bevor ich meine eigene verlasse. –

+0

Danke für die Referenz. Es ist ziemlich erstaunlich, dass CDATA nicht als Teil der existierenden Spezifikation betrachtet wurde, aber ich denke, solange die StringWriter das innere Markup korrekt codieren, sollte es nicht nötig sein. – ra9r

1

This documentation schreibt:

Frage: Wie kann ich bewirken, dass der Marshaller CDATA-Blöcke generiert?

A. Diese Funktionalität ist nicht direkt von JAXB verfügbar. Sie können jedoch einen Apache Xerces-J XMLSerializer konfigurieren, um CDATA-Blöcke zu erstellen. Weitere Informationen finden Sie in der JaxbCDATASample.java-Beispielanwendung.

(btw, diese nicht beantwortet Ihre spezielle Frage, aber da die Frage Titel irreführend ist, und dies ist das erste Google-Ergebnis für jaxb CDATA, ich bin ein bisschen andere Frage zu beantworten)