JAXB - XML-Inhalte aus Datenbank auslesen

somme

Grünschnabel
Hallo Leute,

als Neuling was das Binden von XML an java Objekte angeht, stehe ich vor folgendem Problem und hoffe, das der ein oder andere vielleicht nen Tip für mich parat hat...

Problemstellung:
Es sollen XML- Inhalte aus einer Oracle- Datenbank auf Java Objekte abgebildet werden und umgekehrt.

Die Daten sollen aus XMLTYPE- Tabellen aus der Datenbank ausgelesen werden. Auf den Java Objekten sollen anschliessend änderungen vorgenommen werden, wonach die Java- Objekte wieder in Form von XML in die db zurückgeschoben werden sollen.

Mit Hilfe von JAXB kann ich zwar bereits .xml- Dateien auf java Objekte abbilden bzw. java objekte in .xml- Dokumente schreiben, mein Problem ist jedoch, dass die Datenquelle eben kein einfaches .xml Dokument ist, sondern die Daten in Form von xmlType in der Datenbank vorliegen.

Muss ich also auf die Datenbank mittels einer XML- abfragesprache wie XMLTYPE oder XQuery zugreifen? Für XQuery habe ich bereits eine API finden können (XQJ), allerdings wollte ich vorher eure Meinung dazu hören, vielleicht weiss der ein oder andere ja Rat.

Wenn Bedarf besteht kann ich euch gerne mit etwas Code füttern, allerdings geht es mir zunächst nur um die rein theorethische funktionsweise, wie ich an die Inhalte aus der Datenbank rankomme um diese verarbeiten zu können.

Ich hoffe die Problemstellung ist nicht zu schwammig. Natürlich bin ich für jeden nützlichen Ratschlag dankbar!

Gruss
Micha
 
Google hat noch HyperJAXB2 ausgespuckt. Eine Kombination von Hybernate und JAXB. Klingt vom Prinzip her nicht schlecht, ich weiss allerdings nicht wie brauchbar das ist da ich sowas bisher selber noch nicht gebraucht habe.
 
Hey,

danke für die Antwort zeja. Für HyperjaxB hab ich bisher auch nichts gefunden wie ich auf die Daten aus der Datenbank zugreifen kann. So wie ich das sehe befasst sich HyperjaxB mit dem Mapping der Objekte.

Was die Unterstützung von XML anfragen angeht bin ich heute bei Oracle fündig geworden. Dort wird mit XDK (XML Developer Kit) eine API zum Umgang mit XMLTYPE basierten Tabellen angeboten.

Damit werden XML- Anfragen in einen ByteStream umgewandelt. Die StreamSource die durch die anfrage zurückkommt kann dann mittels JAXB zum Unmarshalling weitergereicht werden. Allerdings ist das für mich noch alles ziemlich schwammig.

Wenn sich also jemand finden würde der bereits Erfahrungen mit XDK gesammelt hat und mir den ein oder anderen schubs in die richtige richtung geben könnte, wäre ich äußerst dankbar!

Gruss
Micha
 
Für alle die sich auch mit der Sache auseinandersetzen müssen und nicht wissen wo sie ansetzen sollen:

Die sache funktioniert mit xdk einwandfrei.... Ein Statement wird auf die db losgelassen und die Ergebnismenge in einen String umgewandelt. Dieser wird wiederum als ByteArrayInputStream dem unmarshaller mitgegeben(StreamSource). was zurück kommt ist das objekt aus der ergebnismenge(bei mehreren Datensätzen in der Ergebnismenge kann über eine Liste iteriert werden).

Hoffe das hilft ein wenig weiter...

Code:
public Person personFinden(Connection my_con, String id) throws JAXBException, SQLException
	{
            JAXBContext jc = JAXBContext.newInstance("videothek");
            
            Unmarshaller unmarshaller = jc.createUnmarshaller();
            
            Statement my_stmt = my_con.createStatement();
            
            ResultSet my_result = my_stmt.executeQuery("select v.videothek.extract('/videothek/personen/person[@p_id=" + id + "]').getStringVal() personen from videothek_xml v");
            
            my_result.next();
            
            String str = my_result.getString(1);
                    
            byte[] bytes = str.getBytes();
            
            ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
            
            Person person = (Person) unmarshaller.unmarshal(new StreamSource(bais));
            
            System.out.println(str);
            
            return person;
	}

Gruss
Somme
 
Zurück