Camel route with bean element sends on startup invalid message to target route
that is represented by a proxy who exposes route
-------------------------------------------------------------------------------------------------------------------------------
Key: CAMEL-5036
URL: https://issues.apache.org/jira/browse/CAMEL-5036
Project: Camel
Issue Type: Bug
Components: camel-core
Affects Versions: 2.2.0
Reporter: Stefan Burkard
I expose a Camel route with a direct endpoint defined in an OSGi bundle with
the <camel:proxy> and <osgi:service> tags. The reason for this is to be able to
call this direct-route in other routes (defined in other bundles) as a
"sub-route" directly as bean [.bean(routeproxy, "method")]. This works as
expected.
But on route startup the toString method is called on the route (for a
description) which is propagated to the elements of the route. Therefore my
bean-element (which is the direct-route-proxy) receives the toString call and
the CamelInvocationHandler converts this toString call to a message and sends
it to the direct-route. This more or less empty message is of course not valid
for the target route and produces an error on bundle startup.
Shouldn't the toString call be suppressed by the proxy, since toString is not
part of the Interface the proxy represents? Or is my approach a not recommended
or problematic approach?
Parts of stacktrace to show the way from route startup to the produced message
=> route receives "empty" message
[omitted]
at
org.apache.camel.component.direct.DirectProducer.process(DirectProducer.java:45)
at
org.apache.camel.component.bean.CamelInvocationHandler.invoke(CamelInvocationHandler.java:65)
at $Proxy568.toString(Unknown Source)
at sun.reflect.GeneratedMethodAccessor406.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
=> toString call is converted to message and sent to route
[omitted]
at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at $Proxy583.toString(Unknown Source)
at
org.apache.camel.component.bean.ConstantBeanHolder.toString(ConstantBeanHolder.java:48)
=> toString called on bean-element in route (bean is a proxy for a route)
[omitted]
at java.lang.String.valueOf(String.java:2826)
at java.lang.StringBuilder.append(StringBuilder.java:115)
at
org.apache.camel.impl.EventDrivenConsumerRoute.toString(EventDrivenConsumerRoute.java:46)
at
org.apache.camel.management.mbean.ManagedRoute.<init>(ManagedRoute.java:41)
at
org.apache.camel.management.DefaultManagementLifecycleStrategy.onRoutesAdd(DefaultManagementLifecycleStrategy.java:368)
at org.apache.camel.impl.RouteService.doStart(RouteService.java:109)
=> Route startup
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira