2009-08-13 11 views
6

JAXB funziona bene fino a quando non ho bisogno di fare qualcosa come serializzare i fagioli per i quali non posso modificare la fonte. Se il bean non ha un costruttore predefinito o se si riferisce a oggetti che voglio contrassegnare transitorio, allora sono bloccato a scrivere un bean separato che posso annotare e quindi copiare manualmente le informazioni dall'altro bean.JAXB va bene finché non ho bisogno di fare qualcosa di complesso. Quali sono le alternative?

Per esempio, volevo serializzare oggetti di eccezione, ma ho trovato che l'unico modo per farlo era usare un hack che richiedeva l'utilizzo di classi com.sun. *.

Quindi, quali alternative ci sono? Qual è la prossima api serializzazione xml più popolare? Sarebbe bello poter fare cose del tipo:

  • Scegliere al momento della serializzazione se includere determinati campi nel risultato. (contrassegnando le cose transitori durante l'esecuzione del serializzatore).

  • I loop di handle nel grafico oggetto utilizzando riferimenti o qualcosa di diverso dalla semplice morte.

  • Forse annota un oggetto in modo che nella versione 1 serializzi le cose in un modo e nella versione 2 le serializzi in un altro. Poi, durante la serializzazione, scelgo semplicemente quale versione dell'oggetto serializzare.

  • Avere un modo per generare XSD dalle annotazioni su un oggetto.

Fondamentalmente voglio solo più flessibilità di quella che ho attualmente con JAXB.

risposta

2

Bene, la risposta standard per la ricerca di una struttura di serializzazione configurabile uber è xstream.

0

XStream è una libreria di serializzazione XML popolare che dichiara di essere in grado di serializzare praticamente tutto, indipendentemente dai costruttori o da altri problemi (anche deserializzare i campi finali). Provaci.

Non richiede modifiche agli oggetti. Serializza i campi interni, inclusi privati ​​e finali. Supporta classi non pubbliche e interne. Le classi non sono obbligate ad avere un costruttore predefinito.

1

Guarda anche JIBX. È un buon xml < -> object mapper. La mia esperienza però è che se i tuoi oggetti hanno relazioni un po 'strane, è spesso più facile creare un oggetto wrapper che nasconda quella complessità e quindi mappare quell'oggetto con JIBX.

2

JAXB è una specifica, quindi è possibile scegliere tra diverse implementazioni. EclipseLink JAXB (MOXy) ha estensioni per quello che stai chiedendo:

esternato metadati

utile quando si tratta con le classi per le quali non è possibile annotare la sorgente o per applicare più mappature di un modello a oggetti.

XPath base Mapping

Per vera mappatura meet-in-the-middle OXM:

JPA Compatibilità

incluso il supporto per le relazioni bidirezionali.

Problemi correlati