ファイルで始まるフローがあります:inbound-endpointはzipファイルを正常に解凍します。 XMLファイルの1つまたは複数が、解凍変換の結果として生成されます(コンポーネントが書きました)。その後、ZIPファイルは削除されます。もう1つのフローは、というファイルから開始されました。インバウンドエンドポイントはXMLファイルの読み取りを開始し、読み取ったファイルをロックします。現在のファイルの処理が完了すると、ファイルはのautoDelete = trueでも削除されません。以下は、構成と対応するJavaクラスです。 RedHat LinuxにはESB ESB 3.3.2があります。 プロセスはWindowsマシンで正常に動作し、xmlファイルは処理されると削除されます。Zuleファイルから抽出されたファイルは、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;
}
}
任意の助けを大幅に高く評価されるだろう。
ポーリングを60000に増やして確認してください。 – star
'私はMule ESB 3.3.2を持っています。あなたのMuleバージョンはひどく古くなっています。最近のバージョンに更新する必要があります。 –
デバッグログを有効にし、MuleがあなたのXMLファイルをポーリングして(そしてここにログを投稿する)なぜそれらが削除されていないかによって、追加の詳細が表示されることがあります。他のプロセスがまだそれを使用している可能性があります。 –