done here https://issues.apache.org/jira/browse/CAMEL-3961
- Romain 2011/5/11 Claus Ibsen <claus.ib...@gmail.com> > On Tue, May 10, 2011 at 3:38 PM, Romain Manni-Bucau > <rmannibu...@gmail.com> wrote: > > after having talked with Claus on IRC i tried to look how to implement > his > > idea: > > > > from(...).bean(XXX.class, "myMethod(${header.myHeader}, > ${body}").to(...). > > > > But i don't understand something: method are managed from BeanInfo and > > MethodInfo. Where is the link with the route? > > > > In other word how can i get the "myMethod(${header.myHeader}, ${body}" > > string from BeanInfo? > > > > I think BeanInfo should have another cached (method, expressions) list to > > manage it. > > > > Could you create a ticket in JIRA for this new feature. Then we can track > it. > > > > - Romain > > > > 2011/5/8 Romain Manni-Bucau <rmannibu...@gmail.com> > > > >> i did a poc, > >> > >> i need a modification in camel-core, here is the diff: > >> > >> Index: src/main/java/org/apache/camel/component/bean/BeanInfo.java > >> =================================================================== > >> --- src/main/java/org/apache/camel/component/bean/BeanInfo.java > (rĂ©vision > >> 1100337) > >> +++ src/main/java/org/apache/camel/component/bean/BeanInfo.java (copie > de > >> travail) > >> @@ -289,7 +289,7 @@ > >> @SuppressWarnings("unchecked") > >> protected MethodInfo createMethodInfo(Class clazz, Method method) { > >> Class[] parameterTypes = method.getParameterTypes(); > >> - Annotation[][] parametersAnnotations = > >> method.getParameterAnnotations(); > >> + Annotation[][] parametersAnnotations = > getAnnotationsFor(method); > >> > >> List<ParameterInfo> parameters = new ArrayList<ParameterInfo>(); > >> List<ParameterInfo> bodyParameters = new > >> ArrayList<ParameterInfo>(); > >> @@ -338,6 +338,10 @@ > >> return new MethodInfo(camelContext, clazz, method, parameters, > >> bodyParameters, hasCustomAnnotation, hasHandlerAnnotation); > >> } > >> > >> + protected Annotation[][] getAnnotationsFor(Method method) { > >> + return method.getParameterAnnotations(); > >> + } > >> + > >> /** > >> * Lets try choose one of the available methods to invoke if we can > >> match > >> * the message body to the body parameter > >> > >> > >> It is simply adding getAnnotationsFor(Method method) method to allow me > to > >> override it in a child class. > >> > >> After this modification i did a component reading a file containing the > >> annotation description: > >> > >> <?xml version="1.0" encoding="UTF-8"?> > >> <methods> > >> <method class="org.apache.camel.component.bean.FooBean" name="foo"> > >> <parameter index="0" type="java.lang.String"> > >> <annotation class="org.apache.camel.Header"> > >> <annotation-parameter name="value" value="bar" /> > >> </annotation> > >> </parameter> > >> <parameter index="1" type="java.lang.String"> > >> <annotation class="org.apache.camel.Body" /> > >> </parameter> > >> </method> > >> </methods> > >> > >> > >> and i change the behavior of the method i started my mail with to test > if > >> annotations are defined in a file before returning the array. > >> > >> To avoid to load the file each time i need it i created a service to do > it. > >> > >> Finally i can do what i want: to use a pojo without any camel import and > >> avoiding to create an array to set parameters. > >> > >> My questions are now: > >> > >> 1) do you think the method can be created in the trunk? > >> 2) i didn't find how to register my service in camel (i added it > manually > >> in my unit test) > >> 3) any thoughts? > >> > >> PS: i'll upload the code in my repository very soon ( > >> http://code.google.com/p/rmannibucau/ ) > >> > >> - Romain > >> > >> 2011/5/8 Romain Manni-Bucau <rmannibu...@gmail.com>: > >> > >> > Hi, > >> > > >> > maybe another solution to this problem could be to add a kind of > >> > descriptor file: > >> > > >> > in camel a bean can extract parameters from headers or something else > >> > with annotations, if there is a file saying the same thing the bean > >> > could not use any camel imports but do the same. > >> > > >> > what do you think of a file like: > >> > > >> > <methods> > >> > <method class="aaa" method="bbb"> > >> > <parameter index="ccc"> > >> > <annotation class="ddd"> > >> > <annotation-parameter name="eee" value="fff" /> > >> > </annotation> > >> > </parameter> > >> > </method> > >> > </methods> > >> > > >> > - Romain > >> > > >> > 2011/5/6 Romain Manni-Bucau <rmannibu...@gmail.com>: > >> >> Hi, > >> >> > >> >> i would like to do a route with a bit more bean invocations than > >> >> usually and i realise the use of array body to specify parameters is > >> >> not very nice, i always have something like: > >> >> > >> >> from(...).to(<create my array>).to("bean:...").to(<save my output in > >> >> headers and replace the body to continue>).... > >> >> > >> >> do you think it could be improved specifying in the bean component > >> >> input/output from headers for example? > >> >> > >> >> example: > >> > from(...).to("bean:foo.bar.MyClass?method=hello¶meter[0]=header(first)&aprameter[2]=header(other)&result=header(out)").to(...) > >> >> > >> >> - Romain > >> >> > >> > > >> > >> > > > > > > -- > Claus Ibsen > ----------------- > FuseSource > Email: cib...@fusesource.com > Web: http://fusesource.com > CamelOne 2011: http://fusesource.com/camelone2011/ > Twitter: davsclaus > Blog: http://davsclaus.blogspot.com/ > Author of Camel in Action: http://www.manning.com/ibsen/ >