【问题标题】:ZIP file corrupt fetching from SOAP attachment从 SOAP 附件中提取的 ZIP 文件损坏
【发布时间】:2013-03-26 05:38:08
【问题描述】:

我正在使用帮助我从消息中心获取文件的网络服务。 文件类型可以是 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 附件获取的文件大小比其实际大小大 4 个字节左右。

更新: 附件编码为 7 位(如果这可能会造成阻碍),而另一个包含另一个 zip 的附件编码为 Quote-printable。两个 zip 都是从同一个 Web 服务中获取的(尽管它们的编码不同),结果都是损坏的。

编辑:我强烈认为问题出在我接收文件的编码上,这里是实际文件和接收到的附件文件之间的比较。

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

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

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

等等。

Zip 文件包含一个 PDF 和一个 XML 文件。

两个文件的起始行相似,以PK开头

【问题讨论】:

    标签: java soap zip saaj


    【解决方案1】:

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

    替换

    fileStream.write(buf);
    

    有了这个

    fileStream.write(buf, 0, n);
    

    这是为了防止在您上次读取时仅获得 1024 字节,然后 buf 的其他 1024 字节将具有垃圾值并被写入文件并损坏它。

    【讨论】:

    • 我认为你的意思是write(buf, 0, n) - 但前提是正确的。
    • 需要有关您的 ZIP 文件的更多信息。如果是 7 位编码,那么您最好在尝试读取之前先对其进行解码。
    • @PriyanshuJha:是的,这听起来是个问题。我现在将完全摆脱 ZipInputStream 部分 - 只需将您从 handler.getDataSource().getInputStream() 获得的原始数据写入一个文件,并将其与原始 zip 文件进行比较......然后使用相关信息编辑您的问题。
    • @PriyanshuJha:如果你知道已经有区别,你为什么开始使用ZipInputStream?当然,首先要做的是确保您可以正确地从 A 获取字节到 B。然后您开始将这些字节解释为 zip 文件。
    • @PriyanshuJha:对我来说听起来很笨拙。我建议您与该组织联系 - 听起来这是他们方面的一个非常具体的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 2014-02-25
    相关资源
    最近更新 更多