You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Stefan Burkard (Created) (JIRA)" <ji...@apache.org> on 2012/02/24 10:45:53 UTC
[jira] [Created] (CAMEL-5036) Camel route with bean element sends
on startup invalid message to target route that is represented by a proxy
who exposes route
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
[jira] [Resolved] (CAMEL-5036) Camel route with bean element sends
on startup invalid message to target route that is represented by a proxy
who exposes route
Posted by "Claus Ibsen (Resolved) (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/CAMEL-5036?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen resolved CAMEL-5036.
--------------------------------
Resolution: Fixed
Fix Version/s: 2.10.0
2.9.1
Changed the toString to avoid calling toString on the bean
> 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
> Assignee: Claus Ibsen
> Fix For: 2.9.1, 2.10.0
>
>
> 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
[jira] [Assigned] (CAMEL-5036) Camel route with bean element sends
on startup invalid message to target route that is represented by a proxy
who exposes route
Posted by "Claus Ibsen (Assigned) (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/CAMEL-5036?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen reassigned CAMEL-5036:
----------------------------------
Assignee: Claus Ibsen
> 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
> Assignee: Claus Ibsen
>
> 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