mmmm, I would need exactly that, but I've tested sending a string with a producer template and I got this error:
Failed to invoke method: ?.method?.name on null due to: org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to invoke method: method on null due to: org.apache.camel.component.bean.MethodNotFoundException: Method with name: method not found on bean: Hello World! of type: java.lang.String. Exchange[Message: Hello World!] caused by Failed to invoke method: method on null due to: org.apache.camel.component.bean.MethodNotFoundException: Method with name: method not found on bean: Hello World! of type: java.lang.String. Exchange[Message: Hello World!] again caused by Method with name: method not found on bean: Hello World! of type: java.lang.String. Exchange[Message: Hello World!] I'm using camel 2.10.4... Any suggestion? Thanks, Cristiano 2013/7/10 Claus Ibsen <claus.ib...@gmail.com> > There is a ? operator, so you can do > > <simple>${body?.method?.name</simple> > > Then it will be null if the body if the body doesnt have a > getMethod().getName() > > There is also a bodyAs(type) to use the Camel type converter. > > > > On Wed, Jul 10, 2013 at 4:48 PM, Cristiano Costantini > <cristiano.costant...@gmail.com> wrote: > > mmm, it seems that "<simple>${body.method.name}</simple>" works: > > > > <setHeader headerName="methodName"> > > <simple>${body.method.name}</simple> > > </setHeader> > > > > > > Any comment about this solution? (is it good?) > > > > What happens if the body is not of class > > org.apache.camel.component.bean.BeanInvocation? > > Is there a way to check if body is of the right instance? > > > > Many thanks!!! > > > > Cristiano > > > > > > > > > > > > 2013/7/10 Cristiano Costantini <cristiano.costant...@gmail.com> > > > >> Hi All, > >> > >> I have a Camel Proxy that pushes "BeanInvokation" exchanges to a camel > >> route, and I want to route these messages depending on the method name > that > >> is invoked. > >> > >> Is there any way to extract this information and put into an header so > to > >> use it in a <choice>? > >> > >> > >> For example, considering the following XML code: > >> > >> <camelContext id="camelContext" xmlns=" > >> http://camel.apache.org/schema/spring"> > >> <proxy id="myServiceProxy" serviceInterface="org.example.MyService" > >> serviceUrl="direct:entry" /> > >> > >> <route> > >> <from uri="direct:entry" /> > >> <setHeader headerName="methodName"> > >> <?? how to extract the method name ??> > >> </setHeader> > >> > >> <choice> > >> <when> > >> <simple>${header.methodName} == 'myMethod1'</simple> > >> <to uri="log:endoint_1?showAll=true" /> > >> </when> > >> <when> > >> <simple>${header.methodName} == 'myMethod2'</simple> > >> <to uri="log:endoint_2?showAll=true" /> > >> </when> > >> <otherwise> > >> <throwException ref="unsupportedException" /> > >> </otherwise> > >> </choice> > >> </route> > >> </camelContext> > >> > >> > >> I'm searching for a solution to be used between the two <setHeader> > tags. > >> > >> I know I can write a processor, but I will have problems deploying it to > >> the classpath where I put the route, so I need a solution that rely on > the > >> default camel capability (like using simple language or other expression > >> languages available with camel). > >> > >> > >> Any idea? > >> Thank you all! > >> > >> Cristiano > >> > >> > >> > > > > -- > Claus Ibsen > ----------------- > Red Hat, Inc. > Email: cib...@redhat.com > Twitter: davsclaus > Blog: http://davsclaus.com > Author of Camel in Action: http://www.manning.com/ibsen >