2016-04-15 4 views
1

Я внедрил декомпрессор bz2 с помощью библиотеки commons-compress Apache для распаковки файлов bz2 с верблюдом ниже определенной точки в структуре каталогов в файловой системе. Я взял имя файла, чтобы распаковать из заголовка CamelFileName, открыл файл с моим декомпрессором и поместил распакованный файл обратно в тот же каталог. Он работает нормально. Метод process(), который вызывает сокращенный множитель декомпрессора, сокращен; этот процессор вызывается для выполнения всех необходимых файлов по маршруту верблюжьего:CamelFileName против тела сообщения, операции с файлом

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); 
} 

Я думаю, что было бы лучше, если бы я взять файл из тела сообщения. Как бы вы это реализовали?

ответ

1

Тело будет иметь тип InputStream. Вы можете напрямую работать с этим Java-типом. Верблюд читает файл по требованию. То есть когда вы пытаетесь получить к нему доступ на маршруте или в вашем компоненте:

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

Используйте один из вышеуказанных, как вы сочтете нужным. Что касается закрытия, не беспокойтесь, Camel позаботится об этом.

+0

Спасибо. Мне нужно закрыть поток или оставить его открытым, и Camel позаботится об этом? Лучше всего было бы, если бы вы могли опубликовать образец кода. – Tamas

+0

См. Мое редактирование. –

+0

Большое спасибо за сообщение! Я буду использовать поток, поскольку у меня есть большие файлы. – Tamas

Смежные вопросы