не может заставить верблюда работать демаршал zipfile? - PullRequest
0 голосов
/ 26 января 2019

У меня есть сжатый или ZIP-файл, входящий на верблюжьем маршруте. Этот zip-файл содержит несколько CSV-файлов. Мне также нужно подготовить содержимое файла перед дальнейшей обработкой. Кажется, я могу успешно разархивировать файл, но не могу работать с ним, unmarshalled. Кажется, что несколько сплиттеров являются проблемой. ??? надеясь, что кто-нибудь скажет мне, что я делаю не так. Если я извлекаю файлы из zip-файла, я могу обработать их все по отдельности, но не могу обработать их из zip-файла.

Я пробовал ZipFileDataFormat, также ZipSplitter с теми же результатами. попробовал .split (bodyAs (Iterator.class))

        } else if (Boolean.parseBoolean(isCompressedOnly)) { //Only Zipped or Compressed

            ZipFileDataFormat zipFile = new ZipFileDataFormat();
            zipFile.setUsingIterator(true);

            from(fromStr)
            .routeId(routeId)
            .log(LoggingLevel.INFO, "Message received ${file:name} for Only Zipped or Compressed files from host " + host)
            .unmarshal(zipFile)
            .split(body(Iterator.class))
            .streaming()
            .convertBodyTo(String.class)
            .wireTap("file:" + fileArchive)
            .split(body()).streaming()
            .process(new EndpointParametersProcessor(decoderName))
            .to(toStr)
            .end();

1 Ответ

0 голосов
/ 27 января 2019

добавление tokenize ("\ n") в операции сплиттера, которая работает с отдельными CSV-файлами, похоже, исправило мою проблему.также, чтобы объединить записи сообщений в один пакет, включите стратегию агрегирования.

        } else if (Boolean.parseBoolean(isCompressedOnly)) { //Only Zipped or Compressed

            ZipFileDataFormat zipFile = new ZipFileDataFormat();
            zipFile.setUsingIterator(true);

            from(fromStr)
            .routeId("Zipped.Only")
            .log(LoggingLevel.INFO, "Message received ${file:name} for Only Zipped or Compressed files from host " + host)
            .unmarshal(zipFile)
            .split(body(Iterator.class))
            .streaming()
            .convertBodyTo(String.class)
            .wireTap("file:" + fileArchive)
            .split(body().tokenize("\n"), new FleetAggregationStrategy()).streaming()
            .process(new EndpointParametersProcessor(decoderName))
            .end()
            .to(toStr);
...