4.2.5. ClassCastExceptions のデバッグと解決


ClassCastExceptions は、拡張するクラスではなく他のクラスによってクラスがロードされるときに発生することが多くあります。また、同じクラスが複数の JAR に存在することが原因である場合もあります。
  1. ClassCastException によって名前付けされたクラスが含まれる JAR をすべて見つけるため、アプリケーションを検索します。クラスに対して定義されたモジュールがある場合、アプリケーションの WAR や EAR から重複する JAR を探し、削除します。
  2. クラスが含まれる JBoss モジュールを探し、MANIFEST.MF ファイルまたは jboss-deployment-structure.xml ファイルに依存関係を明示的に定義します。詳細については、https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『開発ガイド』の章「クラスローディングとモジュール」の「クラスローディングとサブデプロイメント」を参照してください。
  3. 上記の手順に従っても解決されない場合、クラスローダーの情報をログに出力すると問題の原因を判断できることがあります。たとえば、次の ClassCastException がログに記録されているとします。
    java.lang.ClassCastException: com.example1.CustomClass1 cannot be cast to com.example2.CustomClass2
    Copy to Clipboard Toggle word wrap
    1. コードで ClassCastException によって命名されたクラスに対するクラスローダーの情報をログに出力します。例は次のとおりです。
      logger.info("Class loader for CustomClass1: " + 
            com.example1.CustomClass1.getClass().getClassLoader().toString());
      logger.info("Class loader for CustomClass2: " + 
            com.example2.CustomClass2.getClass().getClassLoader().toString());
      
      Copy to Clipboard Toggle word wrap
    2. ログの情報には、どのモジュールがクラスをロードするかが記載されています。アプリケーションに基づき、競合する JAR を削除または移動する必要があります。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat