INT-559 - Generic handler methods defined in a generic superclass are not properly resolved by PayloadTypeMatchingHandlerMethodResolver

This commit is contained in:
Marius Bogoevici
2009-02-10 18:59:35 +00:00
parent 2540d63b90
commit f8961bcf5b
2 changed files with 36 additions and 3 deletions

View File

@@ -165,6 +165,30 @@ public class PayloadTypeMatchingHandlerMethodResolverWithMessageParameterTests {
assertEquals(expected, resolved);
assertEquals(new Integer(123), resolved.invoke(service, message));
}
@Test
public void testGenericSuperclass() throws Exception {
Object service = new ConcreteTestService();
Method[] candidates = HandlerMethodUtils.getCandidateHandlerMethods(service);
PayloadTypeMatchingHandlerMethodResolver methodResolver =
new PayloadTypeMatchingHandlerMethodResolver(candidates);
Method expected = ConcreteTestService.class.getMethod("genericMethod", Message.class);
Message<?> message = MessageBuilder.withPayload("SomeString").build();
Method resolved = methodResolver.resolveHandlerMethod(message);
assertEquals(expected, resolved);
assertEquals(message.getPayload(), resolved.invoke(service, message));
}
public static class GenericTestService<T extends Message<K>, K> {
public K genericMethod(T message) {
return message.getPayload();
}
}
public static class ConcreteTestService extends GenericTestService<Message<String>, String> {
}
public static class TestService {