| [[bean-eip]] |
| = Bean EIP |
| :page-source: core/camel-core-engine/src/main/docs/eips/bean-eip.adoc |
| |
| The Bean EIP binds beans to Camel message exchanges. |
| |
| == URI Format |
| |
| [source] |
| ---- |
| bean:beanID[?options] |
| ---- |
| |
| Where *beanID* can be any string which is used to look up the bean in |
| the xref:registry.adoc[Registry] |
| |
| == EIP options |
| |
| // eip options: START |
| The Bean EIP supports 4 options which are listed below: |
| |
| [width="100%",cols="2,5,^1,2",options="header"] |
| |=== |
| | Name | Description | Default | Type |
| | *ref* | Sets a reference to a bean to use | | String |
| | *method* | Sets the method name on the bean to use | | String |
| | *beanType* | Sets the Class of the bean | | String |
| | *cache* | Caches the bean lookup, to avoid lookup up bean on every usage. | true | Boolean |
| |=== |
| // eip options: END |
| |
| == Bean as endpoint |
| |
| Camel also supports invoking xref:components::bean-component.adoc[Bean] as an Endpoint. In the |
| route below: |
| |
| What happens is that when the exchange is routed to the `myBean` Camel |
| will use the xref:bean-binding.adoc[Bean Binding] to invoke the bean. + |
| The source for the bean is just a plain POJO: |
| |
| Camel will use xref:bean-binding.adoc[Bean Binding] to invoke the |
| `sayHello` method, by converting the Exchange's In body to the `String` |
| type and storing the output of the method on the Exchange Out body. |
| |
| == Java DSL bean syntax |
| |
| Java DSL comes with syntactic sugar for the xref:components::bean-component.adoc[Bean] |
| component. Instead of specifying the bean explicitly as the endpoint |
| (i.e. `to("bean:beanName")`) you can use the following syntax: |
| |
| [source,java] |
| ---- |
| // Send message to the bean endpoint |
| // and invoke method resolved using Bean Binding. |
| from("direct:start").beanRef("beanName"); |
| |
| // Send message to the bean endpoint |
| // and invoke given method. |
| from("direct:start").beanRef("beanName", "methodName"); |
| ---- |
| |
| Instead of passing name of the reference to the bean (so that Camel will |
| lookup for it in the registry), you can specify the bean itself: |
| |
| [source,java] |
| ---- |
| // Send message to the given bean instance. |
| from("direct:start").bean(new ExampleBean()); |
| |
| // Explicit selection of bean method to be invoked. |
| from("direct:start").bean(new ExampleBean(), "methodName"); |
| |
| // Camel will create the instance of bean and cache it for you. |
| from("direct:start").bean(ExampleBean.class); |
| ---- |
| |
| == Bean binding |
| |
| How bean methods to be invoked are chosen (if they are not specified |
| explicitly through the *method* parameter) and how parameter values are |
| constructed from the xref:message.adoc[Message] are all defined by the |
| xref:bean-binding.adoc[Bean Binding] mechanism which is used throughout |
| all of the various xref:bean-integration.adoc[Bean Integration] |
| mechanisms in Camel. |
| |