Details
-
Bug
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
2.16.2
-
None
-
Unknown
Description
I'm trying to re-use the Springboot Actuator HealthEndpoint and InfoEndpoint beans and exposing them via rest:
@Autowired HealthEndpoint healthEndpoint; ... //build the route from("rest:get:health").routeId("REST-healthcheck").bean(healthEndpoint, "invoke");
However when that gets invoked, it throws a AmbiguousMethodCallException and its other candidate for "invoke()" is on the abstract class that HealthEndpoint is extending
It looks like the issue is here:
https://github.com/apache/camel/blob/master/camel-core/src/main/java/org/apache/camel/component/bean/BeanInfo.java#L1020
In this case HealthEndpoint extends AbstractHealthEndpoint, which is abstract, but invoke() is declared on the Endpoint interface. So this logic:
!isFromInterface && Modifier.isAbstract(info.getMethod().getModifiers())
Will not evaluate to true, and the abstract method will remain a candidate.
Here are the sources for the Endpoint/HealthEndpoint/AbstractEndpoint classes:
It seems this is intentional, due to the "if the class is an interface then keep the method" comment in BeanInfo.
I'm curious as to why that is.
Attachments
Issue Links
- relates to
-
CAMEL-9690 bean parameter binding should check parameter types when using simple expressions
- Resolved