NoSuchMethod:参数comparisson不同。相同类型,不同对象

时间:2016-02-01 13:29:32

标签: 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)中声明,并确定调用参数是否与主机参数匹配。没什么奇怪的。

但请看4:if if语句。观察进入的数组,它们具有相同数量的参数和相同的类型(在eclipse的调试视图中观察它)。参数是正确的,由我的一个对象(my.object.ObjectType)和一个int组成。在比较我的objecttype的参数时,它失败了......

我不是Java专家,但不是不正确的。那种比较会尝试比较对象地址,而不是对象类型?如果我没有将同一个对象与自身进行比较,那肯定会失败。因为它是通过http invokation调用的代理对象,所以不可能确保参数是同一个对象吗?还是我错了?

1 个答案:

答案 0 :(得分:0)

好的,这在很多时候都是依赖性问题。我有两个不同版本的对象类(一个在战争中,一个在应用程序服务器依赖项中)。因此,当比较不同的对象类型时,确实存在同一对象类的两个不同实例。

好吧,它允许我深入研究Class.class代码,这总是很有趣。