You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Claus Ibsen (JIRA)" <ji...@apache.org> on 2010/01/16 14:00:43 UTC

[jira] Resolved: (CAMEL-2368) Bean Expression for Non Registry beans can't reference an instance

     [ 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.