自社開発のRPCフレームワーク(ヘシアンプロトコルに基づいてシリアル化)をプロジェクトに使用する場合、RPCインターフェースで定義された送信データにはBigDecimalタイプのデータが含まれます。テストの結果、送信パラメータ158.00が送信されていることがわかりました。 、ただし、得られた値は0.00です。、正しく送信できません。プロジェクトで参照されているヘシアンの依存バージョンは次のとおりです。
<dependency>
<groupId>com.caucho</groupId>
<artifactId>hessian</artifactId>
<version>4.0.7</version>
</dependency>
この現象の理由:ヘッセパッケージの4.0.7バージョンでは、BigDecimalのシリアル化および逆シリアル化の方法が指定されていないため、BigDecimalは送信時にデフォルトのシリアル化方法を使用するため、上記の問題が発生します。
複数の解決策があります:
- ヘッセパッケージのバージョンを、4.0.52や4.0.37などの適切なバージョン、またはBigDecimalのシリアル化と逆シリアル化の方法を指定するその他のバージョンにアップグレードします。
- 次の2つのファイルを元のパッケージに追加し、ヘッセ行列パッケージに入力します。
- / META-INF / hessian / serializers、Content如下:
java.math.BigDecimal = com.caucho.hessian.io.StringValueSerializer - / META-INF / hessian / deserializers、Content如下:
java.math.BigDecimal = com.caucho.hessian.io.BigDecimalDeserializer
この記事では、最初の方法を使用してhessianを4.0.52にアップグレードします。
ヘッセパッケージ構造の
4.0.7バージョンは次のとおりです。ヘッセパッケージ構造の4.0.52バージョンは次のとおりです。
上の図に示すように、ヘッセパッケージの4.0.52バージョンではシリアライザーとデシリアライザーが導入されています。ファイル。
デシリアライザーファイルの内容は次のとおりです。
java.io.File=com.caucho.hessian.io.FileDeserializer
java.math.BigDecimal=com.caucho.hessian.io.BigDecimalDeserializer
javax.management.ObjectName=com.caucho.hessian.io.ObjectNameDeserializer
シリアライザーファイルの内容は次のとおりです。
com.caucho.hessian.io.HessianRemoteObject=com.caucho.hessian.io.RemoteSerializer
com.caucho.burlap.io.BurlapRemoteObject=com.caucho.hessian.io.RemoteSerializer
java.io.File=com.caucho.hessian.io.StringValueSerializer
java.math.BigDecimal=com.caucho.hessian.io.StringValueSerializer
java.util.Locale=com.caucho.hessian.io.LocaleSerializer
javax.management.ObjectName=com.caucho.hessian.io.StringValueSerializer