1

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

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

4

2 回答 2

0

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

import org.apache.commons.io.IOUtils;

    byte[] bytes;
    try {
        bytes = IOUtils.toByteArray(uploadedFile.getInputstream());
        image.setContent(bytes);
        imageService.save(image);
    } catch (IOException ex) {
        ...
    }
于 2013-12-09T16:13:31.557 回答
0

您很可能使用 Java 序列化来进行客户端和服务器之间的通信。

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

当您拥有不同版本的 Java 时,很可能某些类可能具有不同的结构(例如Throwable(superclass of ),它在 Java7Exception中具有新字段)。suppressedExceptions通常,序列化会尝试为此抛出有意义的异常,但在某些情况下,它可能无法这样做,只会抛出StreamCorruptedException.

于 2015-12-03T13:32:55.077 回答