Apache Camel-Datei-Splitter von Beispiel
Ich bin, da wird eine Datei mit numerischen IDs, getrennt durch Zeilenumbrüche ("\n
"):
123948
939904
129384
234049
etc. Ich will Kamel zum umwandeln der Datei in eine Instanz der folgenden POJO:
public class IDFile {
private String fileName; //The name of the file
private List<Long> ids; //All the IDs in the file (123948, 939904, etc.)
//Constructor, getters/setters, etc.
}
Ich versuche, um zu sehen, wenn ich Camel Splitter Komponente, dies zu tun für mich, aber es fühlt sich an wie ich bin versucht zu zwingen, einen Runden Pflock in ein quadratisches Loch:
<route>
<from uri="file://input/idfile"/>
<split streaming="true">
<tokenize token="\n" />
<to uri="bean://idfileProcessor?method=process"/>
</split>
</route>
Oben sieht aus wie es aufgeteilt würde meine Datei in ein List<Long>
, aber ich brauche den Namen der Datei im Zusammenhang mit der Liste als gut. Irgendwelche Ideen?
tut idfileProcessor Karten zu IDFile irgendwo. denn wie es aussieht seine einem Prozessor. wenn es ist, könnte Sie uns zeigen, wie Sie die Verarbeitung der Börse?
Danke @Ashish (+1) - ich denke, mein denken war, die
Danke @Ashish (+1) - ich denke, mein denken war, die
<split>
führen Sie die Transformation für mich, so dass durch die Zeit, die Botschaft zu idfileProcessor
(ja, ein Kamel Processor
), ich kann nur extrahieren Sie die IDFile
POJO aus dem exchange-etwa so: IDFile idFile = (IDFile)exchange.getIn().getBody();
. Die idfileProcessor
dann könnte process die IDFile
Instanz. Sorry für die Verwirrung!
InformationsquelleAutor IAmYourFaja | 2013-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist ein header, der "CamelFileName" an der Börse. Ihr Prozessor/bean übergeben wird eine Referenz auf den Austausch und Sie können die header von es und verbinden es mit dem token, den Sie aufgerufen worden.
Deine route könnte so Aussehen:
Den Bohnen, die Sie verwenden, um den Zustand zu verwalten, die auf dem exchange-Objekt:
Einer Datei, die die Zeilen enthält
zugeführt, um die route unter den Namen splitter.text und splitter_2.txt ergibt sich die folgende log-Ausgabe:
HTH
idfileProcessor
(das ist nur eine Java-Klasse implementieren CamelProcessor
, und daher enthält einpublic void process(Exchange)
- Methode), können Sie ein Codebeispiel, wie ich in der Lage sein zu erhalten, meineIDFile
Instanz, das heißt, ich müsste sowohl dieString fileName
Feld (irgendwie gewonnen aus der CamelFileName header, die Sie erwähnt) sowie dieList<Long> ids
? Nochmals vielen Dank!Ich habe aktualisiert die Antwort mit einem Beispiel über eine Bohne, nicht ein Prozessor. Sorry, ich habe nicht Lesen Sie Ihren Kommentar aufmerksam genug. In Ihrem Prozessor können Sie den Zugriff auf die Datei-Namen wie in ich in der
done(Exchange)
Methode. Ich habe auch das Gefühl, dass keine Java-bean sollte erforderlich sein, und dass Sie es tun konnte, mit einem der unterstützten script-Sprachen direkt in die Feder DSL. Vielleicht hat jemand anderes könnte ein Beispiel geben für, die?InformationsquelleAutor Ralf