Come implementare un roundtrip dallo schema XML usando Java con un database


Qual è il modo migliore per implementare un roundtrip per ricevere file XML e alla fine persistere i dati in un database utilizzando Java. Attualmente ho:
1. Uno schema XML e file di dati XML mi inviano
- l'XSD è abbastanza complesso e appartiene a una parte esterna, quindi non posso cambiarlo
2. Creato le classi Java
- JAXB genera oltre 150 classi, sfortunatamente lo schema può cambiare
- Ho usato Maven POM per automatizzare il processo 3. Unmarshall il File di dati XML in oggetti Java (con annotazione JAXB)
- i dati verranno visualizzati all'utente per essere manipolati
4. Mantenere gli oggetti Java in un RDBMS (Oracle / MySQL)
- sembra che JDO sia la soluzione più adatta
5. Esportazione dei dati
- I dati possono essere esportati nuovamente come XML o Excel (ad esempio)

Non riesco a trovare un modo adatto per aggiungere metadati o annotazioni JDO al codice sorgente Java (generato durante il processo JAXB) per assicurarmi di poter persistere Classi Java. Sto lavorando con le seguenti tecnologie:
Per maggiori informazioni: ]}

Penso che DataNucleus sarebbe più adatto in quanto potrei dover cambiare datastore (RDBMS / XML / Excel) spesso tra ambienti con diverse destinazioni di esportazione. Le uniche altre due tecnologie che potrei dover considerare sono:
- Primavera e XDoclet

Un consiglio o un puntatore a un tutorial sarebbe apprezzato

Author: wacko, 2011-03-01

2 answers

Qual è il modo migliore per implementare un roundtrip per la ricezione di file XML e alla fine persistendo i dati in un database utilizzando Java.

Per questo userei una combinazione di JAXB e JAXB. Nota: conduco EclipseLink JAXB (MOXy), EclipseLink fornisce anche un'eccellente implementazione JPA .

Attualmente ho:

1-Uno schema XML e file di dati XML mi inviano

  • l'XSD è abbastanza complesso e appartiene a una parte esterna, quindi posso non cambiarlo

Opzione #1-Inizia dallo schema XML

  • Se si desidera iniziare dallo schema XML, è possibile utilizzare il file di binding esterno di JAXB per personalizzare la generazione della classe in base alle esigenze senza modificare lo schema XML di terze parti.

Opzione #2-Inizia dalle classi Java

2-Creato le classi Java

  • JAXB genera oltre 150 classi, sfortunatamente lo schema può cambiare
  • Ho usato Maven POM per automatizzare il processo

Se lo schema XML cambia, è sempre possibile rigenerare il modello o annotare il modello come necessario per gestire modifiche allo schema XML.

Potresti trovare utile il progetto HyperJAXB , poiché credo che genererà annotazioni JPA direttamente su un modello JAXB.

3-Disinserisci i dati XML file in oggetti Java (con JAXB annotazione)

  • i dati verranno visualizzati all'utente per essere manipolati

Questo è solo il normale utilizzo di JAXB. Per un esempio vedi:

4-Mantenere gli oggetti Java in un Per maggiori informazioni: ]}

  • sembra che JDO sia la soluzione più adatta

JPA è un'altra alternativa.

5-Esportazione dei dati

  • I dati possono essere esportati nuovamente come XML o Excel (ad esempio)

Di nuovo questo è normale JAXB utilizzo per ottenere l'output XML.

 1
Author: bdoughan, 2011-03-01 16:44:54

Memorizzare, nel database, istanze di oggetti Java generati da JAXB da uno schema XML in evoluzione non ha molto senso, IMHO. L'obiettivo di un database relazionale è quello di memorizzare i dati, in una struttura relazionale ben definita, al fine di essere in grado di interrogarli facilmente.

Se tutto quello che vuoi è essere in grado di recuperare il documento XML che hai ricevuto qualche tempo prima, così com'è, basta memorizzarlo come clob in qualche tabella o nel file system.

Se si memorizzano i dati nel database in modo strutturato è davvero necessario, quindi progettare prima lo schema del database, quindi progettare le classi JDO necessarie per mappare questo schema di database e implementare la logica di business necessaria per trasformare gli oggetti JAXB in oggetti JDO per memorizzarli nel database.

Ma penserei di più su quale funzionalità vuoi implementare prima di pensare alle tecnologie che vuoi usare.

 0
Author: JB Nizet, 2011-03-01 08:17:12