java.lang.reflect.Method invoke()参数类型不匹配异常

时间:2014-11-20 10:32:15

标签: java reflection

我正在通过JAX-WS API动态使用Web服务。实例化服务类并通过反射API按Web服务调用。

虽然预期的和实际的论证是相同的,但它的参数#34;参数类型不匹配"异常。

快速帮助表示赞赏。

Class<?>[] paramTypes = serviceClassMethod.getParameterTypes();
System.out.println("Expected Param Class : "+paramTypes[0].getName());
System.out.println("Actual Param Class : "+reqVals[0].getClass());
System.out.println("Expected number : "+paramTypes.length);
System.out.println("Actual number : "+reqVals.length);
Object wsResponse = serviceClassMethod.invoke(service, reqVals);
System.out.println("Invocation successful...");

输出:

Expected Param Class : com.bla.bla.ws.User
Actual Param Class : class com.bla.bla.ws.User
Expected number : 1
Actual number : 1

1 个答案:

答案 0 :(得分:2)

这听起来像是一个类加载问题。 JRE将由不同类加载器加载的同一类视为不同的类。这取决于您创建参数对象的方式。您可以使用以下方法测试:

paramTypes[0].equals(reqVals[0].getClass())

如果不是这样,那么您使用的是两个不同的类。

解决方案是确保使用paramTypes[0].newInstance();

使用正确的类创建参数对象