Я работаю с заглушкой, которая получает данные от скелета:
MethodCallMessage reply = messageManager.wReceive();
String returnString = reply.getParameter("result.string");
int returnInt = Integer.parseInt(reply.getParameter("result.integer"));
char returnChar = reply.getParameter("result.character").charAt(0);
boolean returnBool = Boolean.valueOf(reply.getParameter("result.bool"));
System.out.println("String return value in Invocation Handler: " + returnString);
System.out.println("Int return value in Invocation Handler: " + returnInt);
System.out.println("Char value in Invocation Handler: " + String.valueOf(returnChar));
System.out.println("Bool value in Invocation Handler: " + String.valueOf(returnBool));
Затем я пытаюсь создать экземпляр класса, который находится в другом пакете:
Class c = Class.forName(method.getReturnType().getName());
c.newInstance();
Я могу добраться до методов, так что я подумал, что все было прекрасно:
Method[] methods = c.getDeclaredMethods();
System.out.println("size: " + methods.length);
for(Method method1: methods){
System.out.println(method1.getName());
if(method1.getReturnType().getSimpleName().equals("string")){
System.out.println("heir");
method1.invoke(c, returnString);
}
if(method1.getReturnType().getSimpleName().equals("int")){
method1.invoke(c, returnInt);
}
if(method1.getReturnType().getSimpleName().equals("char")){
method1.invoke(c, returnChar);
}
if(method1.getReturnType().getSimpleName().equals("boolean")){
method1.invoke(c, returnBool);
}
}
и в конце всего этого я возвращаю объект:
return c;
Но тогда я получаю:
java.lang.ClassCastException: java.lang.Class cannot be cast to be.kdg.distrib.testclasses.TestObject
Пакет - это то, что я передаю через Class.forName ().Почему я могу получить доступ к методам и полям, но могу привести их?
РЕДАКТИРОВАТЬ:
Для пояснения этот код написан в StubInvocationHandler и предназначен для передачиследующий тест:
@Test
public void testWithObjectReturnValue() {
testSkeleton.sendObjectReturnValue();
TestInterface stub = (TestInterface) StubFactory.createStub(TestInterface.class, "127.0.0.1", port);
TestObject test = stub.testMethod11();
MethodCallMessage message = testSkeleton.getMessage();
assertEquals("testMethod11", message.getMethodName());
assertEquals(0, message.getParameters().size());
assertEquals('r', test.getCharacter());
assertEquals("bloop", test.getString());
assertEquals(123, test.getInteger());
assertTrue(test.isBool());
}
А вот и трассировка стека:
java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)