camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Claus Ibsen <claus.ib...@gmail.com>
Subject Re: Extract the name of the Method from a Bean invokation.
Date Thu, 11 Jul 2013 10:39:14 GMT
Hi

Ah yeah the null safe doesn't apply for methods not found.
I am not sure if this is a good idea to add support for that. As if
you have a typo in the method name, then the null safe will ignore
that also.

And adding more stuff to the syntax would just confuse even more, eg

For example with a double ?? to indicate ignore method not found.

${body??.method??.name}

The ? is null safe, so its if the getMethod returns null, then break
out of the OGNL path.





On Wed, Jul 10, 2013 at 7:01 PM, Cristiano Costantini
<cristiano.costantini@gmail.com> wrote:
> 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.ibsen@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.costantini@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.costantini@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: cibsen@redhat.com
>> Twitter: davsclaus
>> Blog: http://davsclaus.com
>> Author of Camel in Action: http://www.manning.com/ibsen
>>



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Mime
View raw message