java - NoSuchMethod : Parameter comparisson differs. 相同类型,不同对象

标签 java

我有两个应用程序在服务器上运行,当我尝试通过 HttpInvoking 运行方法时,出现以下错误:

CustomSoapFaultMappingExceptionResolver 28 org.springframework.remoting.RemoteInvocationFailureException: 
Invocation of method [public abstract RmiDataTransferObject OnlineServiceI.getServed(...,...)] 
failed in HTTP invoker remote service at [http://localhost:8080/vmosvcs/vmoservice/onlineServiceHttp]; 
nested exception is java.lang.NoSuchMethodException: com.sun.proxy.$Proxy76.getServed(..., ...)

这就是过去两周我的现实,我开始感到沮丧。但今天我发现,代理对象实际上有一个名为 getServed 的方法,具有正确的返回和参数类型。但我在服务器上没有找到它......

经过一些调试,我在这个被上帝遗弃的方法中找到了答案:

 private static boolean arrayContentsEq(Object[] a1, Object[] a2) {
    if (a1 == null) {
        return a2 == null || a2.length == 0;
    }

    if (a2 == null) {
        return a1.length == 0;
    }

    if (a1.length != a2.length) {
        return false;
    }

    for (int i = 0; i < a1.length; i++) {
        if (a1[i] != a2[i]) {
            return false;
        }
    }

    return true;
}

这是在 Class.class (JDK 6) 中声明的,用于确定调用参数是否与主机参数匹配。那里没什么奇怪的。

但是看看第四个 if 语句。观察传入的数组,它们确实具有相同数量的参数和相同的类型(在 Eclipse 的调试 View 中观察这一点)。这些参数是正确的,由我的对象之一 (my.object.ObjectType) 和一个 int 组成。在比较我的对象类型的参数时,它失败了......

我不是 Java 专家,但这不是不正确的吗?那种类型的比较会尝试比较对象地址,而不是对象类型?如果我不将同一个对象与其自身进行比较,它必然会失败。而且由于是通过http调用调用的代理对象,所以不能保证参数是同一个对象?还是我大错特错了?

最佳答案

好吧,就像大多数时候一样,这是依赖性问题。我有两个不同版本的相关对象类(一个在 war 中,一个在应用程序服务器依赖项中)。因此,当比较不同的对象类型时,确实存在同一对象类的两个不同实例。

嗯,它让我能够深入研究 Class.class 代码,这总是很有趣。

关于java - NoSuchMethod : Parameter comparisson differs. 相同类型,不同对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35131777/

相关文章:

java - Android BroadcastReceiver 内部服务 : issues

Java:JSP 在页面的其余部分停止执行

java - Grails智能获取war baseUrl?

java - Twitter4j:在某个推文/时间点后下载推文

java - 在 Fragment 中使用 Activity 方法

java - java中如何从灰度值获取红、绿、蓝值?

java - 如何查看分层 Pane 内的组件

java - Play2 - 模板 -> 递增

java - 在重复计时器上调用 View.invalidate 的可接受方法

java - 如何在更改字体大小时更改 JLabel 的大小?