C'è un ragazzo qui che giura che JAXB è la cosa più grande dopo il pane a fette. Sono curioso di vedere cosa pensano gli utenti di Stack Overflow che il caso d'uso sia per JAXB e cosa lo rende una soluzione buona o cattiva per quel caso.
C'è un ragazzo qui che giura che JAXB è la cosa più grande dopo il pane a fette. Sono curioso di vedere cosa pensano gli utenti di Stack Overflow che il caso d'uso sia per JAXB e cosa lo rende una soluzione buona o cattiva per quel caso.
Risposte:
Sono un grande fan di JAXB per la manipolazione di XML. Fondamentalmente, fornisce una soluzione a questo problema (presumo familiarità con XML, strutture dati Java e schemi XML):
Lavorare con XML è difficile. È necessario un modo per prendere un file XML - che è fondamentalmente un file di testo - e convertirlo in una sorta di struttura dati, che il programma può quindi manipolare.
JAXB prenderà uno schema XML scritto dall'utente e creerà un insieme di classi che corrispondono a quello schema. I programmi di utilità JAXB creeranno la gerarchia delle strutture dati per la manipolazione di tale XML.
JAXB può quindi essere utilizzato per leggere un file XML e quindi creare istanze delle classi generate, cariche di dati dal tuo XML. JAXB fa anche il contrario: accetta classi java e genera l'XML corrispondente.
Mi piace JAXB perché è facile da usare e viene fornito con Java 1.6 (se stai usando 1.5, puoi scaricare JAXB .jars.) Il modo in cui crea la gerarchia delle classi è intuitivo e, secondo la mia esperienza, fa un lavoro decente astraendo l '"XML" in modo che possa concentrarmi sui "dati".
Quindi, per rispondere alla tua domanda: mi aspetto che, per piccoli file XML, JAXB potrebbe essere eccessivo. Richiede la creazione e la manutenzione di uno schema XML e l'utilizzo di "metodi standard da manuale" per l'utilizzo di classi Java per strutture dati. (Classi principali, piccole classi interne per rappresentare i "nodi" e un'enorme gerarchia di essi.) Quindi, JAXB probabilmente non è eccezionale per un semplice elenco lineare di "preferenze" per un'applicazione.
Ma se hai uno schema XML piuttosto complesso e molti dati contenuti al suo interno, JAXB è fantastico. Nel mio progetto, stavo convertendo grandi quantità di dati tra binario (che veniva consumato da un programma C) e XML (in modo che gli esseri umani potessero consumare e modificare quei dati). Lo schema XML risultante non era banale (molti livelli di gerarchia, alcuni campi potevano essere ripetuti, altri no) quindi JAXB è stato utile per poterlo manipolare.
Ecco un motivo per non usarlo: le prestazioni ne soffrono. C'è una buona quantità di overhead durante il marshalling e unmarshaling. Potresti anche prendere in considerazione un'altra API per l'associazione di oggetti XML, come JiBX: http://jibx.sourceforge.net/
È un "ORM per XML". Molto spesso utilizzato insieme a JAX-WS (e in effetti le implementazioni Sun sono sviluppate insieme) per i sistemi WS Death Star.
Uso sempre JAXB al lavoro e lo adoro. È perfetto per schemi XML complessi che cambiano continuamente e particolarmente utile per l'accesso casuale dei tag in un file XML.
Odio fare il pappone ma ho appena aperto un blog e questa è letteralmente la prima cosa di cui ho scritto!
Controllalo qui:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
Con JAXB puoi creare automaticamente rappresentazioni XML dei tuoi oggetti (marshalling) e rappresentazioni di oggetti XML (unmarshalling).
Per quanto riguarda lo schema XML, hai due scelte:
Esistono anche alcune librerie di serializzazione XML più semplici come XStream , Digester o XMLBeans che potrebbero essere alternative.
JAXB è ottimo se devi codificare per alcune specifiche XML esterne definite come schema XML (xsd
).
Ad esempio, hai un'applicazione di trading e devi segnalare le negoziazioni all'app Uber Lame Trade Reporting e loro ti hanno dato ultra.xsd
con cui andare avanti. Usa il $JAVA_HOME/bin/xjc
compilatore per trasformare l'XML in un mucchio di classi Java (esUltraTrade
).
Quindi puoi semplicemente scrivere un semplice livello adattatore per convertire i tuoi oggetti commerciali UltraTrades
e utilizzare il JAXB
marshalling dei dati su Ultra-Corp. Molto più facile che scherzare sulla conversione delle tue operazioni nel loro formato XML.
Dove tutto si interrompe è quando Ultra-Corp non ha effettivamente obbedito alle proprie specifiche, e il commercio price
che hanno come a xsd:float
dovrebbe effettivamente essere espresso come a double
!
Perché abbiamo bisogno di JAXB? I componenti remoti (scritti in Java) dei servizi web utilizzano XML come mezzo per scambiarsi messaggi tra loro. Perché XML? Perché XML è considerato un'opzione leggera per lo scambio di messaggi su reti con risorse limitate. Così spesso abbiamo bisogno di convertire questi documenti XML in oggetti e viceversa. Ad esempio: Simple Java POJO Employee può essere utilizzato per inviare i dati dei dipendenti a un componente remoto (anche un programma Java).
class Employee{
String name;
String dept;
....
}
Questo Pojo dovrebbe essere convertito (Marshall) in un documento XML come segue:
<Employee>
<Name>...</Name>
<Department>...</Department>
</Employee>
E al componente remoto, torna all'oggetto Java dal documento XML (Un-Marshall).
Cos'è JAXB?
JAXB è una libreria o uno strumento per eseguire questa operazione di Marshalling e UnMarshalling. Ti risparmia questo mal di testa, così semplice.
Puoi anche controllare JIBX. È anche un ottimo raccoglitore di dati xml, specializzato anche in OTA (Open Travel Alliance) ed è supportato dai server AXIS2. Se stai cercando prestazioni e compatibilità, puoi verificarlo:
JAXB fornisce prestazioni migliorate tramite ottimizzazioni di marshalling predefinite. JAXB definisce un'API di programmazione per la lettura e la scrittura di oggetti Java in e da documenti XML, semplificando così la lettura e la scrittura di XML tramite Java.