This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch camel-3.18.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-3.18.x by this push: new 6408d9f3ba6 CAMEL-18239: [DOCS] Bean components - missing examples 6408d9f3ba6 is described below commit 6408d9f3ba6f5c2f77dbd19f6ffcd0a30c42ba9e Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Sep 5 20:18:11 2022 +0200 CAMEL-18239: [DOCS] Bean components - missing examples --- .../camel-bean/src/main/docs/bean-component.adoc | 75 ++++++++++++---------- 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/components/camel-bean/src/main/docs/bean-component.adoc b/components/camel-bean/src/main/docs/bean-component.adoc index 3eeb3ffd195..cba63e81b25 100644 --- a/components/camel-bean/src/main/docs/bean-component.adoc +++ b/components/camel-bean/src/main/docs/bean-component.adoc @@ -42,51 +42,53 @@ include::partial$component-endpoint-options.adoc[] include::partial$component-endpoint-headers.adoc[] // component headers: END -== Using +== Examples -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 XML file. +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 +Endpoint to the bean endpoint as output, such as the *direct* endpoint as input. -You can also register beans manually via Camel's `Registry` with the `bind` method. +Suppose you have the following POJO class to be used by Camel -Once an endpoint has been registered, you can build Camel routes that -use it to process exchanges. +[source,java] +---- +package com.foo; -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 -Endpoint to the bean endpoint as output. So consider -using a *direct:* or *queue:* endpoint as the input. +public class MyBean { + + public String saySomething(String input) { + return "Hello " + input; + } +} +---- -You can use the `createProxy()` methods on -https://www.javadoc.io/doc/org.apache.camel/camel-bean/current/org/apache/camel/component/bean/ProxyHelper.html[ProxyHelper] -to create a proxy that will generate exchanges and send them to any -endpoint: +Then the bean can be called in a Camel route by the fully qualified classname: -And the same route using XML DSL: +[source,java] +---- +from("direct:hello") + .to("bean:com.foo.MyBean"); +---- + +And in XML DSL: [source,xml] ---------------------------- <route> <from uri="direct:hello"/> - <to uri="bean:bye"/> + <to uri="bean:com.foo.MyBean"/> </route> ---------------------------- -== Bean as endpoint - -Camel also supports invoking xref:bean-component.adoc[Bean] as an Endpoint. In the -route below: +What happens is that when the exchange is routed to the MyBean, then Camel +will use the Bean Binding to invoke the bean, in this case the _saySomethinh_ method, +by converting the `Exchange` in body to the `String` +type and storing the output of the method back to the Exchange again. -What happens is that when the exchange is routed to the `myBean` Camel -will use the Bean Binding to invoke the bean. + - The source for the bean is just a plain POJO: +TIP: The bean component can also call a bean by _bean id_ by looking up the bean +in the xref:manual::registry.adoc[Registry] instead of using the class name. -Camel will use 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 specific bean syntax Java DSL comes with syntactic sugar for the xref:bean-component.adoc[Bean] component. Instead of specifying the bean explicitly as the endpoint @@ -104,7 +106,7 @@ from("direct:start").bean("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: +lookup for it in the xref:manual::registry.adoc[Registry]), you can specify the bean itself: [source,java] --------------------------------------------------------------- @@ -126,8 +128,9 @@ This bean could be a lambda if you cast the lambda to a `@FunctionalInterface` public interface ExampleInterface() { @Handler String methodName(); } -/* - - - - - - - - - - - */ -from("direct:start").bean((ExampleInterface) () -> "")) + +from("direct:start") + .bean((ExampleInterface) () -> "")) --------------------------------------------------------------- == Bean Binding @@ -135,9 +138,11 @@ from("direct:start").bean((ExampleInterface) () -> "")) 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. +xref:manual::bean-binding.adoc[Bean Binding] mechanism which is used throughout +all the various xref:manual::bean-integration.adoc[Bean Integration] mechanisms in Camel. + +See also related xref:bean-language.adoc[Bean Language]. +