Mule file-inbound不会删除从Zipped文件中提取的文件

时间:2017-12-06 23:51:08

标签: mule

我的流程以 file:inbound-endpoint 开头,解压缩成功压缩文件。生成 XML文件中的一个或多个是解压缩转换的结果(我编写的组件)。之后删除压缩文件。另一个流程也从 file:inbound-endpoint 开始,它开始读取XML文件并锁定它读取的文件。完成当前文件的处理后,即使 autoDelete = true ,Mule也不会删除该文件。下面是配置和相应的java类。我在RedHat Linux上有Mule ESB 3.3.2。 此过程在Windows计算机上运行正常,xml文件在处理完毕后会被删除

mule配置代码段如下:

<file:connector name="zipInput"  readFromDirectory="/some/directory/input" streaming="false" workFileNamePattern="xyz-*.zip" autoDelete="true" pollingFrequency="30000"/>

<file:connector name="inputXML"  readFromDirectory="some/directory/output" streaming="false" workFileNamePattern="*.xml" autoDelete="true" pollingFrequency="30000"/>

<flow name="unzipFlow" processingStrategy="synchronous">
  <file:inbound-endpoint connector-ref="zipInput" path="/some/directory/input">
  </file:inbound-endpoint>

  <transformer ref="unzipfileTransformer"/>     
</flow>

<flow name="process_xml_files" processingStrategy="synchronous">                                             
   <file:inbound-endpoint connector-ref="inputXML" path="/some/directory/output"/>

   <file:file-to-string-transformer/>
   <transformer ref="MyFileToSomeObjectTransformer"/>

   <vm:outbound-endpoint path="some.service" exchange-pattern="request-response"/>
   <exception-strategy ref="CatchExceptionStrategy" doc:name="Reference Exception Strategy" />
</flow>

public class UnzipTransformer extends AbstractMessageTransformer {

    private String inboundDirectory;
    private String outboundDirectory;


    @Override
    public Object transformMessage(MuleMessage message, String outputEncoding)
            throws TransformerException {

        byte[] buffer = new byte[2048];
        Object payload = message.getPayload();

        InputStream is = null;

        if (payload instanceof InputStream) {
            is = (InputStream) payload;

        } else if (payload instanceof byte[]) {
            is = new ByteArrayInputStream((byte[]) payload);
        } else {
            throw new RuntimeException("Unknown payload type: " + payload.getClass().getName());
        }

        ZipInputStream zipInput = new ZipInputStream(is);
        ZipEntry entry = null;
        InputStream result = null;
        try {
            while ((entry = zipInput.getNextEntry()) != null) {
                String fileNname = entry.getName();

                if (fileNname.endsWith(".txt")) continue;
                File file = new File(outboundDirectory + File.separator + fileNname);

                        FileOutputStream fOutput = new FileOutputStream(file);
                        int count = 0;
                        while ((count = zipInput.read(buffer)) > 0) {
                            // write to the file output stream
                            fOutput.write(buffer, 0, count);
                        }

                        fOutput.flush();
                        fOutput.close();
            }
            zipInput.closeEntry();
            entry = zipInput.getNextEntry();
            zipInput.close();

        } catch (IOException e) {

            e.printStackTrace();
        } finally {
        }
        return result;
    }
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

不知道为什么会发生这种情况可能是linux文件权限的问题。您是否可以首先尝试使用中间文件位置zip源,然后使用中间文件夹转储解压缩文件,从中可以读取并处理将其设置为自动更正。这将为您提供更清晰的行为清晰度。 如果可能,请使用更新版本的mule检查流程。您也可以使用Anypoint unzipp转换器来检查其他方式,以简化流程。然后使用普通文件连接器读取文件,使用auto-delete true,然后处理文件,这也将为您提供清晰度。 附加压缩减压流程的快照试试这个 compressed/uncompressed flow