从SOAP附件中获取ZIP文件损坏

问题描述:

我正在使用Web服务来帮助我从消息中心获取文件。 文件类型可以是XML或ZIP。从SOAP附件中获取ZIP文件损坏

对于ZIP文件,内容类型是二进制的。

我有这样一段代码:

private String extractPayload(String filePath, AttachmentPart attach){ 

     FileOutputStream fileStream = null; 

     try { 
       DataHandler handler; 
       handler = attach.getDataHandler(); 

       File f = new File(filePath); 

       fileStream = new FileOutputStream(filePath); 

       handler.writeTo(fileStream); 

       fileStream.flush(); 

     } catch (Exception ex) { 

       logger.info("####Exception:" + ex.getMessage()); 

     } finally { 

       if (fileStream != null) 
        fileStream.close(); 

     } 

     return filePath; 

}

现在,代码工作正常读取XML文件,虽然,在ZIP文件的情况下,文件原来是腐败。 我使用文件实用程序从Messaging Hub下载了相同的文件,并发现通过SOAP附件获取的文件大小比实际大小多出4个字节。

更新:附件编码是7位(如果这可能会阻碍),而包含另一个zip的另一个附件编码为Quote-printable。这两个zip文件都是从相同的web服务中获取的(尽管它们在编码方面有所不同),并且两者都被破坏。

编辑:我强烈地感到问题在于我正在接收文件的编码,这里是实际文件和接收到的附件文件之间的比较。

实际文件大小:9031字节 收到的附件文件大小:9066个字节

我想这两个文件在文档编辑器比较发现两者之间的差异。 原始文件取出的附件文件的差异(二进制编辑):

编改变至3F, 分贝变到图3F中, D6变为3F, 85改变到图3F中, D0变为3F,

等等。

Zip文件包含PDF和XML文件。

两个文件的起始行是相似的,从PK

我假设你buf是2048字节数组。请尝试以下变化

与此

fileStream.write(buf, 0, n); 

这是情况来修复你上次看到你得到的只有1024个字节,则其他1024个字节的buf都会有更换

fileStream.write(buf); 

垃圾值,并将被写入文件并将损坏它。

+2

我想你的意思是写(buf,0,n)' - 但前提是正确的。 – 2013-03-27 06:42:45

+0

已经尝试过了。问题是,zis.read()抛出异常java.util.ZipException:无效的块操作。 此外,entry.getSize()(用于获取Zip条目大小)返回-1。 – 2013-03-27 06:43:24

+0

@PriyanshuJha:*它扔哪?你至少应该*做出沙津谈到的改变......因为目前这是一个非常真实的错误。 – 2013-03-27 06:46:43