jackson-databind アップグレード後のシリアル化解除エラーの解決
この記事では、jackson-databindをアップグレードした後に発生するAEM Sites フォームのデシリアライズエラー(特に削除されたPropertyNamingStrategy$SnakeCaseStrategy クラスが参照されている場合)を解決する方法について説明します。
説明 description
環境
- Adobe Experience Manager(AEM) Sites
- jackson-databind バージョン 2.20以降
問題/症状
- AEM Sitesでフォームを読み込む際にエラーが発生する。
- エラーメッセージに
TypeNotPresentExceptionがcom.fasterxml.jackson.databind.PropertyNamingStrategy$SnakeCaseStrategyを参照しています。 - Jacksonを使用してJSONの逆シリアル化を行うサーブレットエンドポイントは、削除されたクラスを参照すると、実行時に失敗します。
原因
PropertyNamingStrategy$SnakeCaseStrategy クラスはjackson-databind 2.12で廃止され、2.20で削除されました。 このクラスを参照するコードは、jackson-databind 2.20以降にアップグレードすると失敗します。
解決策 resolution
PropertyNamingStrategy$SnakeCaseStrategyの削除によって発生したAEM Sites フォームのシリアル化解除エラーを解決するには、次の手順に従います。
-
コードベースで
com.fasterxml.jackson.databind.PropertyNamingStrategy$SnakeCaseStrategyへの参照を検索します。 -
PropertyNamingStrategy$SnakeCaseStrategyのすべての用途をPropertyNamingStrategies$SnakeCaseStrategyに置き換えます(複数形に注意)。- 古い:
com.fasterxml.jackson.databind.PropertyNamingStrategy$SnakeCaseStrategy - 新規:
com.fasterxml.jackson.databind.PropertyNamingStrategies$SnakeCaseStrategy
- 古い:
-
jackson-databind 2.20以降で廃止または削除されたその他の定数またはクラスについてコードベースを確認し、サポートされている同等の定数に更新します。
-
プラットフォームとのバージョンの競合を避けるために、ビルド設定の「provided」スコープにjackson-databindが含まれていることを確認します。
-
更新されたコードをAEM環境にデプロイします。
-
TypeNotPresentExceptionがログに表示されなくなったこと、およびフォームが期待どおりに読み込まれていることを確認します。