...
Bean
...
Component
...
The
...
bean:
...
component
...
binds
...
beans
...
to
...
Camel
...
message
...
exchanges.
...
URI
...
format
Code Block |
---|
} bean:beanID[?options] {code |
Where beanID can be any string which is used to look up the bean in the Registry
Options
Wiki Markup |
---|
} Where *beanID* can be any string which is used to look up the bean in the [Registry] h3. Options {div:class=confluenceTableSmall} || Name || Type || Default || Description || | {{method}} | {{String}} | {{null}} | The method name from the bean that will be invoked. If not provided, Camel will try to determine the method itself. In case of ambiguity an exception will be thrown. See [Bean Binding] for more details. From *Camel 2.8* onwards you can specify type qualifiers to pin-point the exact method to use for overloaded methods. From *Camel 2.9* onwards you can specify parameter values directly in the method syntax. See more details at [Bean Binding]. | | {{cache}} | {{boolean}} | {{false}} | If enabled, Camel will cache the result of the first [Registry] look-up. Cache can be enabled if the bean in the [Registry] is defined as a singleton scope. | | {{multiParameterArray}} | {{boolean}} | {{false}} | How to treat the parameters which are passed from the message body; if it is {{true}}, the In message body should be an array of parameters. | {div} |
You
...
can
...
append
...
query
...
options
...
to
...
the
...
URI
...
in
...
the
...
following
...
format,
...
?option=value&option=value&...
Using
The object instance that is used to consume messages must be explicitly registered with the Registry. For example, if you are using Spring you must define the bean in the Spring configuration, spring.xml
; or if you don't use Spring, by registering the bean in JNDI.
Wiki Markup |
---|
}} h3. Using The object instance that is used to consume messages must be explicitly registered with the [Registry]. For example, if you are using Spring you must define the bean in the Spring configuration, {{spring.xml}}; or if you don't use Spring, by registering the bean in JNDI. {snippet:id=register|lang=java|url=camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/PojoRouteTest.java} |
Once
...
an
...
endpoint
...
has
...
been
...
registered,
...
you
...
can
...
build
...
Camel
...
routes
...
that
...
use
...
it
...
to
...
process
...
exchanges.
Wiki Markup |
---|
{snippet:id=route|lang=java|url=camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/PojoRouteTest.java} |
A
...
bean:
...
endpoint
...
cannot
...
be
...
defined
...
as
...
the
...
input
...
to
...
the
...
route;
...
i.e.
...
you
...
cannot
...
consume
...
from
...
it,
...
you
...
can
...
only
...
route
...
from
...
some
...
inbound
...
message
...
...
to
...
the
...
bean
...
endpoint
...
as
...
output.
...
So
...
consider
...
using
...
a
...
direct:
...
or
...
queue:
...
endpoint
...
as
...
the
...
input.
...
You
...
can
...
use
...
the
...
createProxy()
...
methods
...
on
...
...
to
...
create
...
a
...
proxy
...
that
...
will
...
generate
...
BeanExchanges
...
and
...
send
...
them
...
to
...
any
...
endpoint:
Wiki Markup |
---|
{snippet:id=invoke|lang=java|url=camel/trunk/camel-core/src/test/java/org/apache/camel/component/pojo/PojoRouteTest.java} |
And
...
the
...
same
...
route
...
using
...
Spring
...
DSL:
Code Block | ||||
---|---|---|---|---|
| ||||
{code:xml} <route> <from uri="direct:hello"> <to uri="bean:bye"/> </route> {code} h3. Bean as endpoint Camel also supports invoking [Bean] as an Endpoint. In the route below: |
Bean as endpoint
Camel also supports invoking Bean as an Endpoint. In the route below:
Wiki Markup |
---|
{snippet:id=e1|lang=xml|url=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/bind/beanAsEndpoint.xml}
|
What
...
happens
...
is
...
that
...
when
...
the
...
exchange
...
is
...
routed
...
to
...
the
...
myBean
...
Camel
...
will
...
use
...
the
...
...
...
to
...
invoke
...
the
...
bean.
...
The
...
source
...
for
...
the
...
bean
...
is
...
just
...
a
...
plain
...
POJO:
Wiki Markup |
---|
{snippet:id=e1|lang=java|url=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/bind/ExampleBean.java} |
Camel
...
will
...
use
...
...
...
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
...
...
component.
...
Instead
...
of
...
specifying
...
the
...
bean
...
explicitly
...
as
...
the
...
endpoint
...
(i.e.
...
to("bean:beanName")
...
)
...
you
...
can
...
use
...
the
...
following
...
syntax:
Code Block | ||||
---|---|---|---|---|
| ||||
{code: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"); {code} |
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:
Code Block | ||||
---|---|---|---|---|
| ||||
{code: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); {code} h3. 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 [Message] are all defined by the [Bean Binding] mechanism which is used throughout all of the various [Bean Integration] mechanisms in Camel. {include:Endpoint See Also} * [Class] component * [Bean Binding] * [Bean Integration] |
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 Message are all defined by the Bean Binding mechanism which is used throughout all of the various Bean Integration mechanisms in Camel.
Include Page | ||||
---|---|---|---|---|
|
- Class component
- Bean Binding
- Bean Integration