0

JDK 1.6 で実行するシステムと JDK 1.7 で実行するシステムの 2 つがあります。2 つのノード間で通信するために、ProtoStuff シリアライゼーションを使用してバイナリを変換し、別のノードに転送してバイナリをデシリアライズします。

JDK 1.7 は新しいフィールド「suppressedExceptions」を追加したため、あるノードで JDK 1.7 の Throwable をシリアライズし、別のノードに転送すると、デシリアライズできず、その逆も同様です。

2 つのノードは異なるテクノロジを使用するため、JDK 1.6 から JDK 1.7 および JDK 1.7 から JDK 1.6 に移行することはできません。

この問題を解決する解決策はありますか? 返信ありがとうございます。

よろしく、 パヴァン

4

1 に答える 1

0

基本クラスの 1 つに新しいフィールドが追加された場合、Protostuff-runtime は 2 つのクラス バージョン間の後方互換性をサポートしません。これはtagシフトが原因です。基本クラスに新しいフィールドを追加するtagと、childred クラスのすべての数値がシフトされます。したがって、一般的に、問題に対する適切な解決策はありません。

しかし、エンコーディングを json に切り替えると、問題は解決するはずです。ではprotostuff-json、フィールドは (タグではなく) 名前を使用して保存されるため、クラス階層の途中に新しいフィールドを追加することはもはや問題ではありません。

于 2015-05-30T17:24:46.380 に答える