camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sarat Khilar (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CAMEL-8940) Message routing to a method in the bean is not working if generics is used.
Date Tue, 07 Jul 2015 15:03:04 GMT

    [ https://issues.apache.org/jira/browse/CAMEL-8940?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14616819#comment-14616819
] 

Sarat Khilar commented on CAMEL-8940:
-------------------------------------

The issue found in 2.15.0. The same issue has been fixed in  2.15.1 I beleive . I have upgraded
to 2.15.2 and the issue is not found. Please close this issue.

Root Cause in 2.15.0 : BeanInfo.java introspect(Class<?> clazz) method
=======================================================
     for (Method source : methods) {
                for (Method target : methods) {
                    // skip ourselves
                    if (ObjectHelper.isOverridingMethod(source, target, true)) {
                        continue;
                    }
                    // skip duplicates which may be assign compatible (favor keep first added
method when duplicate)
                    if (ObjectHelper.isOverridingMethod(source, target, false)) {
                        overrides.add(target);
                    }
                }
            }
            methods.removeAll(overrides);
            overrides.clear();
        }


Fix in 2.15.1
============
 for (Method source : methods) {

                // skip bridge methods in duplicate checks (as the bridge method is inserted
by the compiler due to type erasure)
                if (source.isBridge()) {                               <==== fix this problem
                    continue;
                }

                for (Method target : methods) {
                    // skip ourselves
                    if (ObjectHelper.isOverridingMethod(source, target, true)) {
                        continue;
                    }
                    // skip duplicates which may be assign compatible (favor keep first added
method when duplicate)
                    if (ObjectHelper.isOverridingMethod(source, target, false)) {
                        overrides.add(target);
                    }
                }
            }
            methods.removeAll(overrides);
            overrides.clear();
        }


> Message routing to a method in the bean is not working if generics is used.
> ---------------------------------------------------------------------------
>
>                 Key: CAMEL-8940
>                 URL: https://issues.apache.org/jira/browse/CAMEL-8940
>             Project: Camel
>          Issue Type: Bug
>          Components: bean-integration
>    Affects Versions: 2.15.2
>            Reporter: Sarat Khilar
>
> Message routing is not working if generic method inteface is used.
> I have added the code snippet here.
> Bean component:
> public interface IHandler<T>
> {
> 	@Handler
>     public void handle(T data);
> }
> public class EmployeePersistHandler implements IHandler<Employee>
> {
> 	public EmployeePersistHandler()
> 	{
> 	    super();
> 	}
> 	@Override
> 	public void handle(Employee data) 
>                 {
> 		
> 	}
> }
> Routing config:
> public RouteBuilder route() 
> 	{
> 		return new RouteBuilder() {
> 			
> 			@Override
> 			public void configure() throws Exception 
> 			{
> 				System.out.println("Route builder is called");
> 				ThreadPoolBuilder poolBuilder = new ThreadPoolBuilder(createCamelContext());
> 				ExecutorService customPool = poolBuilder.poolSize(5).maxPoolSize(100).maxQueueSize(-1).build("customPool");
> 				from("seda:test").shutdownRunningTask(ShutdownRunningTask.CompleteAllTasks).threads().executorService(customPool).bean(employeePersistHandler);
> 				
> 			}
> 		};
> 	
> 	}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message