Я знаю, что Mule имеет отличную поддержку сжатия данных gzip с помощью элемента. Однако теперь клиент хочет сжатие почтового индекса, так как файл должен быть помещен на FTP как почтовый сжатый файл :(Mule Zip File и отправить zip-файл на FTP-сервер
Я сталкиваюсь с трудностями в муле следующего сценарий:
Я создал 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-файла обратно в поток мула, но я застрял в данный момент, поэтому любая помощь будет принята с благодарностью!
Я побежал копию потока и zipCompressor. Я также получаю файл, но файл никогда не сжимается. Он находится в исходном состоянии. – tbriscoe