2009-09-30 7 views
14

Sto cercando di convertire una classe che assomiglia a questo ...Qual è l'equivalente Jaxb di un valore del nodo Testo?

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

nella seguente XML utilizzando annotazioni JAXB:

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

Qualcuno sa cosa l'annotazione da utilizzare sulla variabile value membro per realizzare questo? Il più vicino che ho ottenuto finora è:

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

Purtroppo questo approccio non mi permette di specificare che la variabile value membro non deve essere reso come il proprio tag <value></value>.

+0

come molti hanno menzionato, il titolo di questa domanda era fuorviante in quanto chiede come rendere i blocchi CDATA ma l'esempio sopra non lo illustra chiaramente. All'epoca in cui ho postato non avevo bisogno di un blocco CDATA, ma avevo solo bisogno di conoscere l'annotazione @XmlValue. Questo è il motivo per cui ho assegnato la risposta a jarnbjo. Da quel momento, avevo davvero bisogno di informazioni su come produrre un blocco CDATA; anche le risposte successive sono state di grande aiuto. Ho votato ciascuno. Grazie per l'aiuto a tutti! – ra9r

risposta

21

Non sono sicuro al 100%, ma provare a utilizzare un'annotazione @XmlValue anziché @XmlElement.

+3

+1 è esattamente corretto – skaffman

0

JAXB non supporta il marshalling/marshalling in/da tipi xml CDATA.

+1

Le specifiche JAXB non coprono CDATA, tuttavia le implementazioni JAXB come EclipseLink JAXB (MOXy) contengono estensioni per la gestione di CDATA, http://bdoughan.blogspot.com/2010/07/cdata-cdata- run-run-data-run-I.html –

4

Sembra che la questione si riferiva a nodi di testo nodi non CDATA, ma qui è un link su come EclipseLink JAXB (moxy) gestisce CDATA:

+2

Non so perché questa risposta abbia ricevuto un voto negativo. È stato lasciato a beneficio delle persone che hanno trovato il problema in base al titolo. Per quello che vale, ho votato la risposta @jmlValue di jarnbjo prima di lasciare il mio. –

+0

Grazie per il riferimento. È piuttosto sorprendente che CDATA non sia stato considerato come parte delle specifiche esistenti ma immagino che fino a quando StringWriters codifichi correttamente il markup interno non ci sia bisogno di farlo. – ra9r

1

This documentation scrive:

D. Come posso far sì che Marshaller generi blocchi CDATA?

A. Questa funzionalità non è disponibile direttamente da JAXB, ma è possibile configurare un XMLSerializer Apache Xerces-J per produrre blocchi CDATA. Per ulteriori dettagli, consulta l'app di esempio JaxbCDATASample.java.

(btw, questo non rispondere alla tua domanda particolare, ma dal momento che il titolo della domanda è fuorviante, e questo è il primo risultato di Google per jaxb CDATA, sto rispondendo ad una domanda diversa bit)