Java ClassCastException使用JNLP从JBoss 7获取远程存根

Java ClassCastException使用JNLP从JBoss 7获取远程存根,java,rmi,jnlp,classcastexception,Java,Rmi,Jnlp,Classcastexception,我已经编写了一个适配器来从JBoss7获取bean的远程接口 public DAdapter(Context context, boolean remote) throws DAdapterException { try { if (context==null){ context = new InitialContext(); } String res = "ear_name/jar_name/DAdapterBea

我已经编写了一个适配器来从JBoss7获取bean的远程接口

public DAdapter(Context context, boolean remote) throws DAdapterException {
    try {
        if (context==null){
            context = new InitialContext();
        }
        String res = "ear_name/jar_name/DAdapterBean!xxx.yyy.DAdapterRemote";
        dAdapter = (IDAdapter)context.lookup(res);
    } catch(Exception ex) {
        ex.printStackTrace();
        throw new DAdapterException("Could not create DmsAdapter service.", ex);
    }
}
DAdapterRemote是一个远程接口,它扩展了IDAdapter。它是EJB3。 如果我从Eclipse的沙盒中运行这个方法,它会像一个符咒一样工作。但是,当我在JNLP应用程序上下文中执行此操作时,会得到ClassCastException

context.lookup(res)
在这两种情况下都返回sun.proxy.$proxy,并且它在IDAdapter中声明了方法

我甚至尝试了反射,但似乎参数类的版本与接口中使用的版本不同-至少它无法通过methodName、args method找到合适的方法。我敢发誓他们是一样的


我应该先检查什么?好的,问题解决了。我有两个不同的类加载器,它们都有我的POJO的类似类,因此它将我带到了X.class.equalsX.class->false,并粉碎了我的转换到接口,因为方法具有不同的签名。

非常糟糕的API设计。您应该接受上下文参数,或者声明并创建自己的局部变量。否则,您将面临是否关闭它的复杂问题,而您完全忽略了这一点,因此目前您正在泄漏上下文。我将摆脱接受null作为上下文的能力。