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