You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2021/04/30 15:49:01 UTC
[camel-quarkus] 02/02: Test bean binding #2492
This is an automated email from the ASF dual-hosted git repository.
ppalaga pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit bdbc3554a361ba840c75fd6b5a90ab4311feab46
Author: Peter Palaga <pp...@redhat.com>
AuthorDate: Thu Apr 29 16:58:28 2021 +0200
Test bean binding #2492
---
.../camel/quarkus/component/bean/BeanResource.java | 101 ++++++++---------
.../camel/quarkus/component/bean/BeanRoutes.java | 19 ++++
.../{NamedBean.java => CompletionStageBean.java} | 21 +++-
.../{NamedBean.java => ConsumeAnnotationBean.java} | 18 ++--
.../component/bean/EagerAppScopedRouteBuilder.java | 2 +-
.../{NamedBean.java => EndpointInjectBean.java} | 19 ++--
.../camel/quarkus/component/bean/NamedBean.java | 15 +++
.../bean/{NamedBean.java => ParametersBean.java} | 33 +++++-
.../quarkus/component/bean/BeanInjectMockTest.java | 4 +-
.../camel/quarkus/component/bean/BeanTest.java | 119 +++++++++++++++++++--
10 files changed, 254 insertions(+), 97 deletions(-)
diff --git a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/BeanResource.java b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/BeanResource.java
index 369fdac..ce095bc 100644
--- a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/BeanResource.java
+++ b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/BeanResource.java
@@ -22,10 +22,14 @@ import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
+import org.apache.camel.ConsumerTemplate;
+import org.apache.camel.Exchange;
import org.apache.camel.ProducerTemplate;
+import org.apache.camel.quarkus.component.bean.model.Employee;
@Path("/bean")
@ApplicationScoped
@@ -39,51 +43,38 @@ public class BeanResource {
@Inject
EagerAppScopedRouteBuilder routeBuilder;
- @Path("/process-order")
- @POST
- @Consumes(MediaType.TEXT_PLAIN)
- @Produces(MediaType.TEXT_PLAIN)
- public String processOrder(String statement) {
- return template.requestBody("direct:process-order", statement, String.class);
- }
+ @Inject
+ EndpointInjectBean endpointInjectBean;
- @Path("/named")
- @POST
- @Consumes(MediaType.TEXT_PLAIN)
- @Produces(MediaType.TEXT_PLAIN)
- public String named(String statement) {
- return template.requestBody("direct:named", statement, String.class);
- }
+ @Inject
+ ConsumerTemplate endpointInjectConsumer;
- @Path("/method")
+ @Path("/route/{route}")
@POST
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
- public String method(String statement) {
- return template.requestBody("direct:method", statement, String.class);
+ public String route(String statement, @PathParam("route") String route) {
+ return template.requestBody("direct:" + route, statement, String.class);
}
- @Path("/handler")
- @POST
- @Consumes(MediaType.TEXT_PLAIN)
+ @Path("/route/{route}")
+ @GET
@Produces(MediaType.TEXT_PLAIN)
- public String handler(String statement) {
- return template.requestBody("direct:handler", statement, String.class);
+ public String route(@PathParam("route") String route) {
+ return template.requestBody("direct:" + route, null, String.class);
}
- @Path("/handlerOnProxy")
+ @Path("/beanMethodInHeader")
@POST
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
- public String handlerOnProxy(String statement) {
- return template.requestBody("direct:handlerOnProxy", statement, String.class);
- }
-
- @Path("/increment")
- @GET
- @Produces(MediaType.TEXT_PLAIN)
- public String increment() {
- return template.requestBody("direct:counter", null, String.class);
+ public String beanMethodInHeader(String statement) {
+ return template.requestBodyAndHeader(
+ "direct:named",
+ statement,
+ Exchange.BEAN_METHOD_NAME,
+ "hi",
+ String.class);
}
@Path("/counter")
@@ -93,13 +84,6 @@ public class BeanResource {
return counter.getValue();
}
- @Path("/config-property")
- @GET
- @Produces(MediaType.TEXT_PLAIN)
- public String configProperty() {
- return template.requestBody("direct:config-property", null, String.class);
- }
-
@Path("/route-builder-instance-counter")
@GET
@Produces(MediaType.TEXT_PLAIN)
@@ -121,13 +105,6 @@ public class BeanResource {
return routeBuilder.getCounter().getValue();
}
- @Path("/lazy")
- @GET
- @Produces(MediaType.TEXT_PLAIN)
- public String lazy() {
- return template.requestBody("direct:lazy", null, String.class);
- }
-
@Path("/camel-configure-counter")
@GET
@Produces(MediaType.TEXT_PLAIN)
@@ -135,18 +112,34 @@ public class BeanResource {
return BeanRoutes.CONFIGURE_COUNTER.get();
}
- @Path("/with-producer")
- @GET
+ @Path("/endpointInject")
+ @POST
+ @Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
- public String withProducer() {
- return template.requestBody("direct:with-producer", null, String.class);
+ public String endpointInject(String payload) {
+ endpointInjectBean.forward(payload);
+ return endpointInjectConsumer.receiveBody("direct:endpointInject", 10000, String.class);
}
- @Path("/with-language-param-bindings")
- @GET
+ @Path("/employee/{route}")
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.TEXT_PLAIN)
+ public String methodWithExchangeArg(Employee employee, @PathParam("route") String route) {
+ return template.requestBody("direct:" + route, employee, String.class);
+ }
+
+ @Path("/parameterBindingAnnotations/{greeting}")
+ @POST
+ @Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.TEXT_PLAIN)
- public String withLanguageParamBindings() {
- return template.requestBody("direct:with-language-param-bindings", null, String.class);
+ public String parameterBindingAnnotations(String statement, @PathParam("greeting") String greeting) {
+ return template.requestBodyAndHeader(
+ "direct:parameterBindingAnnotations",
+ statement,
+ "parameterBinding.greeting",
+ greeting,
+ String.class);
}
}
diff --git a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/BeanRoutes.java b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/BeanRoutes.java
index 93c41b0..1eb9b64 100644
--- a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/BeanRoutes.java
+++ b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/BeanRoutes.java
@@ -84,6 +84,25 @@ public class BeanRoutes extends RouteBuilder {
.routeId("wlpb-route-31wp")
.to("bean:withLanguageParamBindingsBean")
.to("log:withLanguageParamBindings");
+
+ from("direct:methodWithExchangeArg")
+ .to("bean:namedBean");
+
+ from("direct:completionStageBean")
+ .to("bean:completionStageBean?method=hello");
+
+ from("direct:multiArgMethod")
+ .to("bean:parametersBean?method=multiArgMethod");
+
+ from("direct:parameterBindingAnnotations")
+ .to("bean:parametersBean?method=parameterBindingAnnotations");
+
+ from("direct:parameterLiterals")
+ .to("bean:parametersBean?method=parameterLiterals(*, true)");
+
+ from("direct:parameterTypes")
+ .to("bean:parametersBean?method=parameterTypes(String)");
+
}
@SuppressWarnings("unchecked")
diff --git a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/CompletionStageBean.java
similarity index 66%
copy from integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java
copy to integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/CompletionStageBean.java
index 6a6e053..75f5dc0 100644
--- a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java
+++ b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/CompletionStageBean.java
@@ -16,6 +16,9 @@
*/
package org.apache.camel.quarkus.component.bean;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.CompletionStage;
+
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
@@ -25,11 +28,19 @@ import io.quarkus.runtime.annotations.RegisterForReflection;
* A bean referenced from a route (and from nowhere else) by name.
*/
@ApplicationScoped
-@Named("namedBean")
-@RegisterForReflection // Let Quarkus register this class for reflection during the native build
-public class NamedBean {
+@Named("completionStageBean")
+@RegisterForReflection
+public class CompletionStageBean {
- public String hello(String name) {
- return "Hello " + name + " from the NamedBean";
+ public CompletionStage<String> hello(final String name) {
+ return CompletableFuture.supplyAsync(() -> {
+ try {
+ Thread.sleep(200);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ }
+ return "Hello " + name + " from CompletionStageBean";
+ });
}
+
}
diff --git a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/ConsumeAnnotationBean.java
similarity index 65%
copy from integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java
copy to integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/ConsumeAnnotationBean.java
index 6a6e053..2119785 100644
--- a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java
+++ b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/ConsumeAnnotationBean.java
@@ -16,20 +16,16 @@
*/
package org.apache.camel.quarkus.component.bean;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Named;
-
-import io.quarkus.runtime.annotations.RegisterForReflection;
+import org.apache.camel.Consume;
/**
- * A bean referenced from a route (and from nowhere else) by name.
+ * A bean annotated with {@code @Consume}
*/
-@ApplicationScoped
-@Named("namedBean")
-@RegisterForReflection // Let Quarkus register this class for reflection during the native build
-public class NamedBean {
+public class ConsumeAnnotationBean {
- public String hello(String name) {
- return "Hello " + name + " from the NamedBean";
+ @Consume("direct:consumeAnnotation")
+ public String consumeAnnotation(String name) {
+ return "Consumed " + name;
}
+
}
diff --git a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/EagerAppScopedRouteBuilder.java b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/EagerAppScopedRouteBuilder.java
index f6cfc37..7fdf57f 100644
--- a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/EagerAppScopedRouteBuilder.java
+++ b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/EagerAppScopedRouteBuilder.java
@@ -59,7 +59,7 @@ public class EagerAppScopedRouteBuilder extends RouteBuilder {
* counter and config-property should actually work without the bean extension. Doing it here because we have
* quarkus.camel.enable-main=true in the core itest
*/
- from("direct:counter")
+ from("direct:increment")
.id("counter")
.setBody(exchange -> counter.increment())
.to("log:counter");
diff --git a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/EndpointInjectBean.java
similarity index 74%
copy from integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java
copy to integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/EndpointInjectBean.java
index 6a6e053..aa62160 100644
--- a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java
+++ b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/EndpointInjectBean.java
@@ -17,19 +17,20 @@
package org.apache.camel.quarkus.component.bean;
import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Named;
import io.quarkus.runtime.annotations.RegisterForReflection;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.ProducerTemplate;
-/**
- * A bean referenced from a route (and from nowhere else) by name.
- */
@ApplicationScoped
-@Named("namedBean")
-@RegisterForReflection // Let Quarkus register this class for reflection during the native build
-public class NamedBean {
+@RegisterForReflection
+public class EndpointInjectBean {
+
+ @EndpointInject("direct:endpointInject")
+ ProducerTemplate producer;
- public String hello(String name) {
- return "Hello " + name + " from the NamedBean";
+ public void forward(String payload) {
+ producer.sendBody("Sent to an @EndpointInject: " + payload);
}
+
}
diff --git a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java
index 6a6e053..8be2c04 100644
--- a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java
+++ b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java
@@ -20,6 +20,8 @@ import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import io.quarkus.runtime.annotations.RegisterForReflection;
+import org.apache.camel.Exchange;
+import org.apache.camel.quarkus.component.bean.model.Employee;
/**
* A bean referenced from a route (and from nowhere else) by name.
@@ -32,4 +34,17 @@ public class NamedBean {
public String hello(String name) {
return "Hello " + name + " from the NamedBean";
}
+
+ public String hello(Integer i) {
+ return "Hello number " + i + " from the NamedBean";
+ }
+
+ public String hi(String name) {
+ return "Hi " + name + " from the NamedBean";
+ }
+
+ public void methodWithExchangeArg(Exchange exchange) {
+ exchange.getMessage().setBody("Hello " + exchange.getMessage().getBody(Employee.class).getFirstName());
+ }
+
}
diff --git a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/ParametersBean.java
similarity index 51%
copy from integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java
copy to integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/ParametersBean.java
index 6a6e053..f400e98 100644
--- a/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/NamedBean.java
+++ b/integration-tests/bean/src/main/java/org/apache/camel/quarkus/component/bean/ParametersBean.java
@@ -20,16 +20,41 @@ import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;
import io.quarkus.runtime.annotations.RegisterForReflection;
+import org.apache.camel.Body;
+import org.apache.camel.Exchange;
+import org.apache.camel.Header;
+import org.apache.camel.quarkus.component.bean.model.Employee;
+import org.apache.camel.spi.Registry;
/**
* A bean referenced from a route (and from nowhere else) by name.
*/
@ApplicationScoped
-@Named("namedBean")
+@Named("parametersBean")
@RegisterForReflection // Let Quarkus register this class for reflection during the native build
-public class NamedBean {
+public class ParametersBean {
- public String hello(String name) {
- return "Hello " + name + " from the NamedBean";
+ public String parameterTypes(String employeeAsString) {
+ return "employeeAsString: " + employeeAsString;
}
+
+ public String parameterTypes(Employee employee) {
+ return "Employee: " + employee.getFirstName();
+ }
+
+ public String parameterBindingAnnotations(
+ @Header("parameterBinding.greeting") String greeting,
+ @Body String body) {
+ return greeting + " " + body + " from parameterBindingAnnotations";
+ }
+
+ public String parameterLiterals(String body, boolean bool) {
+ return "Hello " + body + " from parameterLiterals(*, " + bool + ")";
+ }
+
+ public String multiArgMethod(String body, Exchange exchange, Registry registry) {
+ return "Hello " + body + " from multiArgMethod: " + (exchange != null ? "got exchange" : "") + " "
+ + (registry != null ? "got registry" : "");
+ }
+
}
diff --git a/integration-tests/bean/src/test/java/org/apache/camel/quarkus/component/bean/BeanInjectMockTest.java b/integration-tests/bean/src/test/java/org/apache/camel/quarkus/component/bean/BeanInjectMockTest.java
index 124c9fc..815b74b 100644
--- a/integration-tests/bean/src/test/java/org/apache/camel/quarkus/component/bean/BeanInjectMockTest.java
+++ b/integration-tests/bean/src/test/java/org/apache/camel/quarkus/component/bean/BeanInjectMockTest.java
@@ -41,7 +41,7 @@ public class BeanInjectMockTest {
public void namedBeanMockedForAllTests() {
RestAssured.given()
.body("Kermit")
- .post("/bean/named")
+ .post("/bean/route/named")
.then()
.body(is("Hello * from NamedBean mock (class level)"));
}
@@ -51,7 +51,7 @@ public class BeanInjectMockTest {
when(mockNamedBean.hello(anyString())).thenReturn("Hello * from NamedBean mock (test level)");
RestAssured.given()
.body("Kermit")
- .post("/bean/named")
+ .post("/bean/route/named")
.then()
.body(is("Hello * from NamedBean mock (test level)"));
}
diff --git a/integration-tests/bean/src/test/java/org/apache/camel/quarkus/component/bean/BeanTest.java b/integration-tests/bean/src/test/java/org/apache/camel/quarkus/component/bean/BeanTest.java
index f7c189f..540c3b2 100644
--- a/integration-tests/bean/src/test/java/org/apache/camel/quarkus/component/bean/BeanTest.java
+++ b/integration-tests/bean/src/test/java/org/apache/camel/quarkus/component/bean/BeanTest.java
@@ -19,6 +19,8 @@ package org.apache.camel.quarkus.component.bean;
import io.quarkus.test.junit.QuarkusTest;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
+import org.apache.camel.quarkus.component.bean.model.Employee;
+import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import static org.hamcrest.Matchers.equalTo;
@@ -27,7 +29,10 @@ import static org.hamcrest.Matchers.equalTo;
public class BeanTest {
@Test
public void testRoutes() {
- RestAssured.given().contentType(ContentType.TEXT).body("nuts@bolts").post("/bean/process-order").then()
+ RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .body("nuts@bolts")
+ .post("/bean/route/process-order").then()
.body(equalTo("{success=true, lines=[(id=1,item=nuts), (id=2,item=bolts)]}"));
/* Ensure that the RoutesBuilder.configure() was not called multiple times on CamelRoute */
@@ -43,17 +48,27 @@ public class BeanTest {
RestAssured.given()
.contentType(ContentType.TEXT)
.body("Kermit")
- .post("/bean/named")
+ .post("/bean/route/named")
.then()
.body(equalTo("Hello Kermit from the NamedBean"));
}
@Test
+ public void beanMethodInHeader() {
+ RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .body("Kermit")
+ .post("/bean/beanMethodInHeader")
+ .then()
+ .body(equalTo("Hi Kermit from the NamedBean"));
+ }
+
+ @Test
public void method() {
RestAssured.given()
.contentType(ContentType.TEXT)
.body("Kermit")
- .post("/bean/method")
+ .post("/bean/route/method")
.then()
.body(equalTo("Hello Kermit from the MyBean"));
}
@@ -63,7 +78,7 @@ public class BeanTest {
RestAssured.given()
.contentType(ContentType.TEXT)
.body("Kermit")
- .post("/bean/handler")
+ .post("/bean/route/handler")
.then()
.body(equalTo("Hello Kermit from the WithHandlerBean"));
}
@@ -73,7 +88,7 @@ public class BeanTest {
RestAssured.given()
.contentType(ContentType.TEXT)
.body("Kermit")
- .post("/bean/handlerOnProxy")
+ .post("/bean/route/handlerOnProxy")
.then()
.body(equalTo("Hello Kermit from the WithHandlerBean"));
}
@@ -84,16 +99,16 @@ public class BeanTest {
/* Ensure that @Inject works */
RestAssured.when().get("/bean/counter").then().body(equalTo("0"));
RestAssured.when().get("/bean/route-builder-injected-count").then().body(equalTo("0"));
- RestAssured.when().get("/bean/increment").then().body(equalTo("1"));
+ RestAssured.when().get("/bean/route/increment").then().body(equalTo("1"));
RestAssured.when().get("/bean/counter").then().body(equalTo("1"));
RestAssured.when().get("/bean/route-builder-injected-count").then().body(equalTo("1"));
- RestAssured.when().get("/bean/increment").then().body(equalTo("2"));
+ RestAssured.when().get("/bean/route/increment").then().body(equalTo("2"));
RestAssured.when().get("/bean/counter").then().body(equalTo("2"));
RestAssured.when().get("/bean/route-builder-injected-count").then().body(equalTo("2"));
/* Ensure that @ConfigProperty works */
RestAssured.when()
- .get("/bean/config-property")
+ .get("/bean/route/config-property")
.then()
.statusCode(200)
.body(equalTo("myFooValue = foo"));
@@ -115,18 +130,100 @@ public class BeanTest {
@Test
public void lazy() {
- RestAssured.when().get("/bean/lazy").then().body(equalTo("lazy"));
+ RestAssured.when().get("/bean/route/lazy").then().body(equalTo("lazy"));
}
@Test
public void withProducer() {
- RestAssured.when().get("/bean/with-producer").then().body(equalTo("with-producer"));
+ RestAssured.when().get("/bean/route/with-producer").then().body(equalTo("with-producer"));
}
@Test
public void withLanguageParamBindings() {
- RestAssured.when().get("/bean/with-language-param-bindings").then()
+ RestAssured.when().get("/bean/route/with-language-param-bindings").then()
.body(equalTo("wlpb-hello(wlpb-route-31wp,cflap-bean-31wp)"));
}
+ @Disabled("https://github.com/apache/camel-quarkus/issues/2539")
+ @Test
+ public void consumeAnnotation() {
+ RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .body("foo")
+ .post("/bean/route/consumeAnnotation")
+ .then()
+ .body(equalTo("Consumed foo"));
+ }
+
+ @Disabled("https://github.com/apache/camel-quarkus/issues/2539")
+ @Test
+ public void endpointInject() {
+ RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .body("bar")
+ .post("/bean/endpointInject")
+ .then()
+ .body(equalTo("Sent to an @EndpointInject: bar"));
+ }
+
+ @Test
+ public void methodWithExchangeArg() {
+ RestAssured.given()
+ .contentType(ContentType.JSON)
+ .body(new Employee("Joe", "Doe", "senior"))
+ .post("/bean/employee/methodWithExchangeArg")
+ .then()
+ .body(equalTo("Hello Joe"));
+ }
+
+ @Test
+ public void completionStageBean() {
+ RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .body("Franz")
+ .post("/bean/route/completionStageBean")
+ .then()
+ .body(equalTo("Hello Franz from CompletionStageBean"));
+ }
+
+ @Test
+ public void multiArgMethod() {
+ RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .body("Max")
+ .post("/bean/route/multiArgMethod")
+ .then()
+ .body(equalTo("Hello Max from multiArgMethod: got exchange got registry"));
+ }
+
+ @Test
+ public void parameterBindingAnnotations() {
+ RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .body("Umberto")
+ .post("/bean/parameterBindingAnnotations/Ciao")
+ .then()
+ .body(equalTo("Ciao Umberto from parameterBindingAnnotations"));
+ }
+
+ @Test
+ public void parameterLiterals() {
+ RestAssured.given()
+ .contentType(ContentType.TEXT)
+ .body("Leon")
+ .post("/bean/route/parameterLiterals")
+ .then()
+ .body(equalTo("Hello Leon from parameterLiterals(*, true)"));
+ }
+
+ @Test
+ public void parameterTypes() {
+ RestAssured.given()
+ .contentType(ContentType.JSON)
+ .body(new Employee("Joe", "Doe", "senior"))
+ .post("/bean/employee/parameterTypes")
+ .then()
+ .body(equalTo("employeeAsString: Employee [firstName=Joe, lastName=Doe, seniority=senior]"));
+ }
+
}