[ 
https://issues.apache.org/activemq/browse/CAMEL-2368?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen resolved CAMEL-2368.
--------------------------------

       Resolution: Fixed
    Fix Version/s: 2.2.0

> Bean Expression for Non Registry beans can't reference an instance
> ------------------------------------------------------------------
>
>                 Key: CAMEL-2368
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-2368
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.0.0, 2.1.0
>         Environment: Compile issue.  Java 6, Windows, Eclipse/Gallileo
>            Reporter: Michael Mathers
>            Assignee: Claus Ibsen
>            Priority: Minor
>             Fix For: 2.2.0
>
>
> The documentation at the bottom of this page:  
> http://camel.apache.org/bean-language.html says that I can use the bean 
> expression DSL to work with beans that are not in the registry in two 
> different ways (2.0-M2+).
> # Specify Class/method and Camel will create a new instance of the bean and 
> call the method.
> #  Specify instance/method and Camel will use the the specified instance and 
> call the method.  
> In fact, the doc shows examples of both:
> h4. Method 1)
> {code}
>         from("activemq:topic:OrdersTopic").
>                 filter().expression(bean(MyBean.class, "isGoldCustomer")).
>                 to("activemq:BigSpendersQueue");
> {code}
> h4. Method 2)
> {code}
>    private MyBean my;
>         from("activemq:topic:OrdersTopic").
>                 filter().expression(bean(my, "isGoldCustomer")).
>                 to("activemq:BigSpendersQueue");
> {code}
> I am unable to do the latter (#2) as the methods are not defined.  I'm using 
> Camel 2.1.0 but I've tried 2.0.0 as well. So either the doc is wrong or the 
> methods are missing/not visible. My code specifically is:
> {code}
> private Object list;
> ...
> from (getErrorEndpoint())
>         .recipientList(list, "getRecipients");
> {code}
> Yes, there are easy ways to avoid this.  But I prefer not to have to create 
> more XML and/or specify a Class name here.
> Finally, is there a good reason ".recipientList()" isn't overloaded to take 
> an Endpoint[] instead of only an Expression?   The @RecipientList annotation 
> seems to anticipate this form but there doesn't seem to be a good way to plug 
> the @RecipientList annotated bean into the route definition.  Even if the 
> bean is in the registry it looks as if you still have to supply the method 
> name anyway despite that its already annotated (unless you also annotate with 
> @Handler which might be undesirable). 
> Ideally, I could have...
> {code}
> Object list = new Object() {
>    @RecipientList public Collection<Endpoint> getRecipents(Object body) {... }
> }
> ...
> from (endpoint).recipientList(<any instance annotated with @RecipientList>)
> {code}
> or even
> {code}
> // Look for method "errors" then look for annotation @RecipientList("errors")
> from (endpoint).recipientList( bean, "errors" )
> {code}
> Is this making any sense?  (I'm still very wet behind the ears)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to