NetBeansとMavenを使用してJEEプロジェクトを構築しています。このプロジェクトには、EJBモジュール、Webモジュール、およびSEクラスライブラリが含まれています。いつものように、WebモジュールにはEJBモジュールが依存しています。彼らはどちらもクラスライブラリを依存関係として持っています。このプロジェクトは、GlassFishまたはJBoss、さらに最近ではWildFlyを使用して何年も働いてきたプロジェクトの変更コピーです。元のプロジェクトは、Antを使用してビルドおよびデプロイされました。今私はMavenを使用しています。新しい(maven)プロジェクトは、GlassFishを使用してもうまく動作しますが、WildFly 10は使用しません。キャストステートメントにClassCastExceptionがスローされます。問題の原因を突き止めるために、私は簡単なテストを行った。その結果は全く奇妙です。ここにあります:完全に奇妙なClassCastException
私は3つのインターフェイスを作成しました.1つはクラスライブラリに、もう1つは各モジュールに1つ作成しました。これらは次のとおりである:
// interface at the class library
package jee2ap102.lib;
public interface I01 {
}
// interface at the EJB module
package jee2ap102.ejb;
public interface I0101 extends jee2ap102.lib.I01 {
}
// interface at the Web module
package jee2ap102.web;
public interface I010101 extends jee2ap102.ejb.I0101 {
}
は、次にWebモジュールでIは、Beanを作成し、以下の方法を追加しました:
public String check() {
boolean b;
b = jee2ap102.lib.I01.class.isAssignableFrom(jee2ap102.ejb.I0101.class);
b = jee2ap102.lib.I01.class.isAssignableFrom(jee2ap102.web.I010101.class);
b = jee2ap102.ejb.I0101.class.isAssignableFrom(jee2ap102.web.I010101.class);
}
を3つのステートメントがtrueを返す必要がありますが、最後のものだけが行います。 これによると、階層のルートであるクラスライブラリにあるインタフェースI01は、ライブラリ(EJBまたはWebモジュールのいずれか)の外部にあるインタフェースから、それらのインタフェースが拡張されているかどうかにかかわらず割り当て可能ではありませんそれはです。一貫して、I0101またはI010101をI01にキャストしようとすると、ClassCastExceptionがスローされます。
この問題を理解し解決するためには、本当に助けていただければ幸いです。
あなたのクラスが異なるクラスローダーを使用してロードされた場合、あなたはこの奇妙な動作をするかもしれません。私は耳のモジュールを使用する前に同様の問題を見たことがあります。 –