Domanda

Stavo cercando di aggiungere lo schema XML a un progetto EJB esistente. JAXB viene utilizzato per associare lo schema XML a una classe Java. Poiché utilizzeremo il motore di ricerca per eseguire la scansione di DTO quando EJB è in sessione.

Non sono riuscito a trovare alcun approccio diretto per mappare il file di classe di entità su XML-Schema.

L'unico modo che abbiamo potuto ottenere finora è creare i servizi Web, generare il WSDL che genera lo schema xml (XSD) e quindi analizzare il file XSD tramite JAXB (comando xjc) per creare file di classe java. Ora usando il file mapping-binding.xml possiamo mappare sia il file di classe XML che Java.

Ma ora di nuovo il problema è come mappare questo alla classe di entità.

Questo è ciò che vogliamo ottenere:

  • Oggetto dati XML con schema XML, (questo è già presente nella specifica JAXB).
  • Entity Bean quindi estende o ha un'interfaccia per questo oggetto JAXB.
  • Tutte le funzioni di persistenza sono gestite da Entity Bean ...
  • L'Entity Bean conterrebbe quindi le funzioni XML Marshalling e UnMarshalling presenti in JAXB ..
  • È possibile recuperare un oggetto valore in formato binario o XML dall'oggetto bean entità.
  • Un JSP potrebbe facilmente estrarre lo schema XML e i dati XML dall'oggetto valore ed eseguire operazioni su di esso come le trasformazioni XSL.

La mia tesi è che i bean di entità non hanno un modo standard per interfacciarsi con gli oggetti JAXB.

Castor potrebbe essere la soluzione, ma ancora una volta dobbiamo implementare servizi Web o utilizzare i JDO di Castor.

Ho trovato XStream molto utile in quanto utilizza una classe di convertitore in cui è possibile chiamare gli oggetti della classe bean di entità e generare un file XML. Ma non preferivo usare un'altra classe ma incorporare le funzioni nella classe bean esistente.

Puoi aiutarmi in questo senso?


Ti dirò cosa sto effettivamente cercando di ottenere. Sto creando un motore di ricerca che verrà evocato durante l'EJB in sessione e userà il crawler attraverso il DTO per ottenere l'istantanea in formato XML. La ricerca avrà criteri diversi.

Lucene è uno degli strumenti del motore di ricerca, ma utilizza le sue proprietà e i suoi file (funzionerà più come autonomo)

Ho già DTO che vengono utilizzati dai servizi web per comunicare tra PHP e amp; Applicazione Java (livello EJB). Volevo riutilizzare quei DTO in jaxb come crawler per ottenere l'output da tabelle in XML che non sono in grado di fare poiché JAXB utilizza le proprie classi generate tramite lo schema xml. Come hai detto, non ho ancora trovato un modo per istruire JAXB sulle classi bean.

È stato utile?

Soluzione

L'accoppiamento stretto del modello di dati (bean di entità) all'interfaccia XML potrebbe non essere la migliore idea al mondo; ti impedisce di cambiarne uno senza cambiare l'altro.

Non sono sicuro al 100% di capire cosa stai cercando di fare, ma penso che ci sia un modo per istruire JAXB a estendere le classi piuttosto che crearne di nuove. Potresti creare i tuoi bean di entità normalmente e fare in modo che i tuoi bean generati da JAXB estendano quelli con le informazioni extra.

Posso dire che ottenere istanze dei bean Entity da un punto diverso dal tuo livello di persistenza (come deserializzarli da XML) sarà un problema enorme per te.

Si noti inoltre che utilizzare XML per comunicare tra applicazioni Java (come tra un layer JSP / Servlet e EJB) è una cattiva idea; il marshalling e l'aggiunta della verbosità dell'XML ti acquistano molto poco; serializzare gli oggetti tramite RMI (che è ciò che EJB farà per te) sarebbe molto più facile da implementare, testare e mantenere.

Altri suggerimenti

EclipseLink JAXB (MOXy) può essere utilizzato per mappare entità JPA su XML.

Per ulteriori informazioni, consultare:

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top