我正在使用NetBeans和Maven构建JEE项目。该项目包含EJB模块,Web模块和SE类库。像往常一样,Web模块将EJB模块作为依赖项。它们都将类库作为依赖项。该项目是一个项目的修改副本,该项目使用GlassFish或JBoss以及最近的WildFly工作多年。原始项目是使用Ant构建和部署的。现在我正在使用Maven。新的(maven)项目使用GlassFish运行得很好,但没有使用WildFly 10.它会在一个最终不应该失败的强制转换语句中抛出一个ClassCastException。为了确定问题的根源,我进行了一个简单的测试。结果完全奇怪。这是:
首先,我创建了3个接口,一个在类库中,一个在每个模块中。这些是:
// 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模块中我创建了一个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);
}
这三个陈述应该返回true,但只有最后一个。 根据这一点,位于类库中的接口I01(层次结构的根)不能从位于库外部的任何接口(EJB或Web模块)分配,无论这些接口是什么接口扩展它。一致地,将I0101或I010101转换为I01的尝试将抛出ClassCastException。
我非常感谢您理解和解决这个问题的任何帮助。