Wie erstelle ich eine Camel-Route, die XML aufnimmt und einige Daten an JPA-kommentierte POJO bindet?

8

Ich bin neu bei Apache Camel und mocke Tests, also hier geht es ...

Ich habe ein XML ohne XSD-Schema, auf das ich keinen Einfluss habe. Untergeordnete Elemente dieses XML enthalten Daten, die ich an meinen Geschäftspojo binden möchte. Dieser POJO (WeatherCurrent) ist bereits JPA-kommentiert und ich dachte daran, JAXB Annotation hinzuzufügen, damit die geteilte XML meinem POJO zugeordnet werden konnte.

Da dieses XML ein root-Element hat und ich nur seine childs (metData) haben möchte, habe ich ein Problem damit, mein POJO mit Anmerkungen zu versehen, da ich @XmlRootElement nicht verwenden kann.

Dies wird teilweise hier beschrieben: Ссылка bei Streaming von großen XML-Nutzdaten mit Tokenizer-Sprache Kapitel . Mein POJO ist wie order xml Element in diesem Beispiel. Ich brauche nur ein paar Elemente aus dem Element metData xml, um sie meinen POJO-Feldern zuzuordnen.

In Ссылка gibt es auch ein Kapitel Teil-Marshalling / -Unmarshalling , aber es gibt kein JAVA DSL-Beispiel (ein muss), noch, wie man das Pojo annotiert, um mit XML-Fragmenten zu arbeiten.

Bisher habe ich diesen Testcode:

%Vor%

Das XML (observation_si_latest.xml) kommt in dieser Form:

%Vor%

Ich habe der Kürze halber viele Elemente der metData-Elemente weggelassen. Ich möchte (unter anderem) domain_title zu meinem JPA-kommentierten POJO-Stationsfeld zuordnen und später die Datenbank speichern, hoffentlich alles auf einer intelligenten und kurzen Camel-Route.

Der POJO (noch keine JAXB-Anmerkungen):

%Vor%

Ich habe auch viele Felder und Methoden weggelassen.

Die Idee ist also, den Wert von * domain_title * dem Feld Station von WeatherCurrent POJO zuzuordnen und dies für jedes metData-Element zu tun und eine Liste von WeatherCurrent-Objekten in der Datenbank zu speichern.

Wir beraten Sie gerne, wie Sie dies am besten umsetzen können.

    
bbcooper 14.03.2012, 12:40
quelle

2 Antworten

2

Es stellte sich heraus, dass ich eine falsche Annahme hatte, dass ich das @ XmlRootElement nicht verwenden konnte. Die Route und der Test bestanden mit Erfolg, nachdem ich das POJO mit Anmerkungen versehen und die jaxb.index-Datei hinzugefügt habe. Wird die Lösung später oder morgen posten, da ich jetzt in einem Zug bin.

Stunden später ...

Die JAXB-Anmerkungen auf dem POJO (über JPA-Einträgen):

%Vor%

hat mir erlaubt, eine Liste von WeatherCurrent Exchage-Objekten zu erhalten. Nur für den Test habe ich jeden zu meinem EchoBean geroutet, um eine Eigenschaft auszudrucken:

%Vor%

und EchoBean:

%Vor%

gibt die Namen der Wetterstationen mit der log Camel-Komponente aus.

Die einzige undokumentierte Sache, die mich störte, war, dass ich diese jaxb.index-Datei als nächste Wetter-Java-Quelle bereitstellen musste, obwohl sie Ссылка es sagt eindeutig, dass jaxb Kontext mit

initialisiert wird %Vor%     
bbcooper 14.03.2012 16:19
quelle
2

Geben Sie in der pom.xml die folgende Abhängigkeit ein -

%Vor%

Als Nächstes kommentieren Sie die pojo-Klasse mit @XmlRootElement (name="Mitarbeiter")

%Vor%

Schließlich in der RouteBuilder-Klasse definieren Sie das Jaxb-Datenformat und verwenden Sie es in der Route.

%Vor%

Quellcode und weitere Details - Apache Camel - Marshalling / Unmarshalling XML / JSON-Daten

    
Rameez 08.01.2018 14:42
quelle

Tags und Links