我有一个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
错误。但服务器端功能执行没有任何错误。这发生在此服务器模块中的所有方法调用中。但是有一些其他服务器模块可以正常工作。关于这个问题的任何想法?
编辑: - 如果返回类型是新创建的类,则可以正常工作
答案 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时,很可能某些类可能有不同的结构(例如Throwable
(Exception
的超类),它在Java7中有新的字段suppressedExceptions
)。通常,序列化会尝试为此抛出有意义的异常,但在某些情况下,它可能无法执行此操作并仅抛出StreamCorruptedException
。