ZIP文件损坏从SOAP附件获取

时间:2013-03-26 05:38:08

标签: java soap zip saaj

我正在使用一种帮助我从消息中心获取文件的Web服务。 文件类型可以是XML或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 Attachment获取的文件大小比实际大小多4个字节。

更新:附件编码为7位(如果这可能会阻碍),而另一个包含其他zip的附件则编码为Quote-printable。这两个拉链都是从同一个Web服务中提取的(虽然它们的编码不同),但两者都被破坏了。

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

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

我尝试比较文档编辑器中的两个文件,以找出两者之间的差异。 原始文件到提取的附件文件差异(二进制编辑器):

ed改为3f, db改为3f, d6改为3f, 85改为3f, d0改为3f,

等等。

Zip文件包含PDF和XML文件。

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

开始

1 个答案:

答案 0 :(得分:3)

我假设您的buf是一个2048字节的数组。请尝试以下更改

替换

fileStream.write(buf);

用这个

fileStream.write(buf, 0, n);

这是为了修复你上次读取时只得到1024个字节然后buf的其他1024个字节将有垃圾值并将被写入文件并将其损坏。