我正在尝试关注
上下文ctx =(上下文)jndiCntx.lookup(fSTANDARD_ENVIRONMENT);
Object obj = ctx.lookup(fSTANDARD_JNDINAME);
以下代码返回false
MyClass.class.isAssignableFrom(obj.getClass())
虽然
MyClass.class.getName()。equalsIgnoreCase(obj.getClass()。getName())返回true。
我无法将obj强制转换为MyClass,因为它会抛出ClassCastException。
可能是什么问题?
答案 0 :(得分:2)
我的猜测是该类已被两个不同的类加载器加载。
在当前代码中查看obj.getClass().getClassLoader()
与呼叫getClassLoader()
。
这个类本身是否可以从两个不同的jar文件中获得?这通常很容易理清。如果你有两个使用相同jar文件的独立类加载器,那就更难了。
你在运行什么容器?我建议您查看类加载器的容器特定文档...例如,这里是Tomcat 5.5 ClassLoader how-to。
答案 1 :(得分:0)
挂起,你为什么要调用“equalsIgnoreCase”来检查类名而不是简单的“等于”?是否有可能(几乎)匹配名称之间存在冲突?