Mule Zip File и отправьте заархивированный файл на сервер FTP

Я знаю, что Мул отлично поддерживает сжатие данных с помощью gzip, используя этот элемент. Однако клиент теперь хочет сжатие zip, так как файл должен быть помещен на FTP как сжатый файл zip :(

Я сталкиваюсь с трудностями в муле со следующим сценарием:

Я создал bean-компонент Spring, куда входит файл. Я хочу сжать этот файл с помощью класса ZipOutputStream и передать его нашему ftp.

Это моя конфигурация потока:

<flow name="testFlow" initialState="stopped">
    <file:inbound-endpoint path="${home.dir}/out" moveToDirectory="${hip.dir}/out/hist" fileAge="10000" responseTimeout="10000" connector-ref="input"/>
    <component>
        <spring-object bean="zipCompressor"/>
    </component>
    <set-variable value="#[message.inboundProperties.originalFilename]" variableName="originalFilename" />
    <ftp:outbound-endpoint  host="${ftp.host}" port="${ftp.port}" user="${ftp.username}" password="${ftp.password}" path="${ftp.root.out}" outputPattern="#[flowVars['originalFilename']].zip" />
</flow>

Это код моего zipCompressor:

@Component
public class ZipCompressor implements Callable {

    private static final Logger LOG = LogManager.getLogger(ZipCompressor.class.getName());

    @Override
    @Transactional
    public Object onCall(MuleEventContext eventContext)  throws Exception {

        if (eventContext.getMessage().getPayload() instanceof File) {
            final File srcFile = (File) eventContext.getMessage().getPayload();
            final String fileName = srcFile.getName();
            final File zipFile = new File(fileName + ".zip");

            try {

                // create byte buffer
                byte[] buffer = new byte[1024];
                FileOutputStream fos = new FileOutputStream(zipFile);
                ZipOutputStream zos = new ZipOutputStream(fos);
                FileInputStream fis = new FileInputStream(srcFile);
                // begin writing a new ZIP entry, positions the stream to the start of the entry data
                zos.putNextEntry(new ZipEntry(srcFile.getName()));
                int length;
                while ((length = fis.read(buffer)) > 0) {
                    zos.write(buffer, 0, length);
                }
                zos.closeEntry();
                // close the InputStream
                fis.close();
                // close the ZipOutputStream
                zos.close();
            }
            catch (IOException ioe) {
                LOG.error("Error creating zip file" + ioe);
            }
            eventContext.getMessage().setPayload(zipFile);
        }
        return eventContext.getMessage();
     }
 }

Я написал модульный тест, и сжатие работает отлично. Файл действительно передается на FTP с правильным именем, но zip-файл недействителен и, открыв его в NotePad ++, он содержит только оригинальное имя файла.

Я думаю, что делаю что-то не так с передачей файла zip обратно потоку мулов, но я застрял на данный момент, поэтому любая помощь будет принята с благодарностью!

Ответы на вопрос(3)

Ваш ответ на вопрос