1

で実行される EJB クライアントと EJB2 サーバーがありますJBoss 4 server。同じJVMバージョン(1.6)で正常に機能していました。次に、サーバー JVM を同じ (1.6) に保ちながら 、クライアントJVM を 1.7 (ただし、コンパイラのバージョンは 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 を使用している場合、一部のクラスの構造が異なる可能性があります (たとえば、Java7 の新しいフィールドを持つThrowable(のスーパークラス))。通常、シリアライゼーションはそのために意味のある例外をスローしようとしますが、場合によっては失敗して.ExceptionsuppressedExceptionsStreamCorruptedException

于 2015-12-03T13:32:55.077 に答える