java.io.StreamCorruptedException:意外的块数据结束 - 在不同JVM之间进行通信时

时间:2012-12-28 05:49:06

标签: java ejb-2.x

我有一个EJB客户端和一个在JBoss 4 server上运行的EJB2服务器。它适用于相同的JVM版本(1.6)。然后我将客户端 JVM升级到1.7(但编译器版本为1.6),同时保持服务器JVM相同(1.6)。 如果服务器方法返回一个对象或抛出exeption,则在客户端发生java.io.StreamCorruptedException: unexpected end of block data错误。但服务器端功能执行没有任何错误。这发生在此服务器模块中的所有方法调用中。但是有一些其他服务器模块可以正常工作。关于这个问题的任何想法?

编辑: - 如果返回类型是新创建的类,则可以正常工作

2 个答案:

答案 0 :(得分:0)

我遇到了这个问题,现在就这样做了:

import org.apache.commons.io.IOUtils;

    byte[] bytes;
    try {
        bytes = IOUtils.toByteArray(uploadedFile.getInputstream());
        image.setContent(bytes);
        imageService.save(image);
    } catch (IOException ex) {
        ...
    }

答案 1 :(得分:0)

您最有可能使用Java Serialization进行客户端和服务器之间的通信。

为了使Java Serialization正常工作,客户端和服务器都需要具有类文件的兼容版本(我也相信Java不保证序列化类型在版本之间兼容,但我现在找不到任何文档)。

当你有不同版本的Java时,很可能某些类可能有不同的结构(例如ThrowableException的超类),它在Java7中有新的字段suppressedExceptions )。通常,序列化会尝试为此抛出有意义的异常,但在某些情况下,它可能无法执行此操作并仅抛出StreamCorruptedException