Cos'è JAXB e perché dovrei usarlo? [chiuso]


109

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.


2
Leggi questo articolo (Java Architecture for XML Binding (JAXB)) questo è il migliore. URL: oracle.com/technetwork/articles/javase/index-140168.html#unmars

Risposte:


99

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.


21
JAXB può essere eseguito senza XSD. Puoi usare le annotazioni: jaxb.dev.java.net/guide/Mapping_your_favorite_class.html
codefinger

7
JAXB è una specifica (come JPA o JAXP), il che significa che ci sono più implementazioni (Metro, EclipseLink, ecc.). Se hai un problema con uno, puoi passare a un'altra implementazione. Puoi anche sfruttare le estensioni offerte da diversi fornitori.
bdoughan

@ BlaiseDoughan, Metro è un'implementazione JAXB ?! Metro non è un'implementazione WSIT?
Muhammad Gelbana

1
@MuhammadGelbana - Immagino che dovrei chiamarlo Project JAXB ( jaxb.java.net ) che fa parte dell'implementazione di Metro the JAX-WS ( metro.java.net ).
bdoughan

2
Cordiali saluti, JAXB verrà rimosso da Java SE 11. Vedere JEP 320: rimuovere i moduli Java EE e CORBA . Questa azione viene intrapresa come parte della modularizzazione di Java SE e del passaggio di tecnologie Java EE al progetto Jakarta EE . Dovrai aggiungere l'API JAXB e un'implementazione al tuo progetto.
Basil Bourque

23

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/


1
Considera anche l'utilizzo dello strumento XSD2Jibx se hai problemi con le associazioni: è in stato "alpha", ma è davvero utile illustrare le classi e le associazioni che le piacciono con gli schemi XSD ... ora, se solo smettesse di usare la data SQL per impostazione predefinita e ha usato Java util Date invece ...
MetroidFan2002

3
Cazzate. JAXB è piuttosto veloce, a patto di utilizzare un parser veloce (come Woodstox), con un sovraccarico di circa il 30-40% rispetto alla rilegatura manuale. JiBX va bene, nessun problema, ma la differenza di prestazioni non è enorme.
StaxMan

6
Ho usato JAXB su diversi progetti e continuo a usarlo. Ma è importante capire come si confronta con altri framework. Se stai effettuando il marshalling / unmarshalling di documenti che sono centinaia di megabyte e il tempo è importante, JiBX è una buona alternativa. JAXB == riflessione, JiBX == strumentazione codice byte.
codefinger

19

È 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.


19

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/


4
Un chiaro esempio sul tuo blog. Votato per questo. :-)
Shawn D.

9

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:

  • Genera classi Java da un XSD
  • Genera un XSD dalle tue classi Java

Esistono anche alcune librerie di serializzazione XML più semplici come XStream , Digester o XMLBeans che potrebbero essere alternative.


1
Questi non sono framework vincolanti, sono librerie di serializzazione. Un buon framework di binding può mappare qualsiasi XML a un oggetto grafico isomorfo o viceversa. Questi semplici meccanismi di serializzazione producono e utilizzano uno schema XML fisso e non standard.
erickson

Grazie Erickson, ho lavorato solo con JAXB e volevo assicurarmi di menzionare le alternative. Modificherò la mia risposta in base al tuo input.
Fabian Steeg

In realtà, mentre XStream è ok, non è molto più semplice, poiché entrambi sono molto semplici. E Digester NON è semplice, solo semplicistico.
StaxMan

2
Qualcuno menziona JAXB-2.0 usando le annotazioni. Tra queste poche classi XmlAdapter, posso mappare qualsiasi schema su qualsiasi struttura Java esistente.
Mark Renouf

8

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.xsdcon cui andare avanti. Usa il $JAVA_HOME/bin/xjccompilatore 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 UltraTradese utilizzare il JAXBmarshalling 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 priceche hanno come a xsd:floatdovrebbe effettivamente essere espresso come a double!


1
Nota anche che PUOI fare prima il codice: inizia con i bean, genera lo schema se ne hai bisogno.
StaxMan

7

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.


4

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:

http://jibx.sourceforge.net/index.html


0

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.