2016-04-15 4 views
1

Ich habe eine bz2 Dekomprimierer mit Hilfe der Apache commons-compress-Bibliothek implementiert, um bz2-Dateien mit camel unterhalb eines bestimmten Punktes in der Verzeichnisstruktur des Dateisystems zu dekomprimieren. Ich habe den Dateiname abgeholt, um aus dem CamelFileName-Header zu dekomprimieren, öffnete die Datei mit meinem Dekomprimierer und legte die dekomprimierte Datei zurück in das gleiche Verzeichnis. Es funktioniert gut. Die Methode process(), die den hier kopierten Dekompressor aufruft, wird gekürzt; Dieser Prozessor ist für alle notwendigen Dateien, die von einem Kamel Route aufgerufen:CamelFileName vs. Nachrichtentext, Dateioperation

public void process(Exchange exchange) throws Exception { 
    LOG.info(" #### BZ2Processor ####"); 
    BZ2 bz2 = new BZ2(); 
    String CamelFileName = exchange.getIn().getHeader("CamelFileName", String.class); 
    bz2.uncompress(CamelFileName); 
} 

Ich denke, dass es schöner gewesen wäre, wenn ich die Datei aus dem Nachrichtentext nehmen . Wie hättest du es so umgesetzt?

Antwort

1

Der Body wäre vom Typ InputStream. Sie können direkt mit diesem Java-Typ arbeiten. Camel liest die Datei bei Bedarf. I.e. Wenn Sie versuchen, in der Route oder in Ihrer Bean darauf zuzugreifen:

String text = exchange.getIn().getBody(String.class);  //or 
byte[] bytes = exchange.getIn().getBody(byte[].class);  //or 
InputStream is = exchange.getIn().getBody(InputStream.class); 

Verwenden Sie eine der oben genannten, wie Sie sehen. Um es zu schließen, mach dir keine Sorgen Camel wird sich darum kümmern.

+0

Danke. Muss ich den Stream schließen oder offen lassen und Camel wird sich darum kümmern? Am besten wäre es, wenn Sie Beispielcode posten könnten. – Tamas

+0

Bitte sehen Sie meine Bearbeitung. –

+0

Vielen Dank für die Post! Ich werde den Stream verwenden, da ich große Dateien habe. – Tamas