2016-09-26 4 views
3

フローはhttp要求を取得し、javaコンポーネントはzipファイルを作成して返します。 zipファイルがダウンロードされますが、解凍すると「圧縮されたフォルダが無効です」というエラーが表示されます。一時的な場所でJavaによって作成された一時的なzipは正常に動作します。問題は、zipファイルをペイロードとして設定する方法です。Mule ESB:Zipファイルを提供するJavaコンポーネントですが、解凍できません。

public Object onCall(MuleEventContext eventContext) throws Exception { 
    MuleMessage message = eventContext.getMessage(); 

    message.setOutboundProperty("Content-type", "application/zip"); 
    message.setOutboundProperty("Content-Disposition", "attachment;filename=\"my_Logs.zip\""); 
    File tempZip = File.createTempFile("LOGS", ".zip"); 
    FileOutputStream fos = new FileOutputStream(tempZip); 
    ZipOutputStream zipOut = new ZipOutputStream(fos); 

    File logDir = new File("C:/Temp/logs"); 
    zipOut.setMethod(ZipOutputStream.DEFLATED); 
    zipOut.setLevel(9); 
    FileInputStream in =null; 
    int len =0; 
    byte[] buf = new byte[1024]; 
    for(File file : logDir.listFiles()){ 
     String filename = file.getName(); 
     in = new FileInputStream(file); 
     zipOut.putNextEntry(new ZipEntry(filename)); 
     while ((len = in.read(buf))>0){ 
      zipOut.write(buf,0,len); 
     } 
     zipOut.closeEntry(); 
     in.close(); 
    } 
    zipOut.close(); 
    message.setPayload(tempZip); 
    return message; 
} 

フロー

<http:listener-config name="HTTP_Listener_Configuration" host="0.0.0.0" port="8081" doc:name="HTTP Listener Configuration"/> 
<flow name="httppayloadFlow"> 
    <http:listener config-ref="HTTP_Listener_Configuration" path="*" doc:name="HTTP"/> 
    <message-filter doc:name="Filter favicon"> 
     <not-filter> 
      <wildcard-filter pattern="/favicon.ico" caseSensitive="true"/> 
     </not-filter> 
    </message-filter> 
    <component class="com.home.zipper.ZipLogs" doc:name="Java"/> 
</flow> 

私はここで間違って何をしているのですか?助けをよだれにする

答えて

0

ファイルを完全に圧縮して提供することができます。

Mule Zip File and send zipped file towards FTP server

だけZipTransformerコンストラクタで

を変更、以下のことが推奨されていません。

registerSourceType(InputStream.class); 
registerSourceType(byte[].class); 

利用代わりに、この:

registerSourceType(DataTypeFactory.create(InputStream.class)); 
registerSourceType(DataTypeFactory.create(byte[].class)); 

・ホープ、このことができます。

0

次のコードを置き換えます。 message.setPayload(tempZip); と message.setPayload(org.apache.commons.io.FileUtils.readFileToByteArray(tempZip));

関連する問題