How about introducing Async requestBody API to the template?
It just return a Future object, then we can turn the value of Future
into what we want.

Willem

Claus Ibsen wrote:
> Hi
> 
> Its me again. Yeah I am due for a run in due time, but just wanted to
> demo something that is either powerful or scary
> 
> The code below uses the same route. But as we request a body and we
> have declared we want the response as a String.class (the last
> parameter)
> Then Camel is "clever" or "scary" to use the Future to wait and get
> the result and convert the body to the desired type, eg a String.
> 
> So the routing is really divided into sync/async but the end user sees
> it as a single sync.
> 
>     public void testAsyncRouteWithTypeConverted() throws Exception {
>         MockEndpoint mock = getMockEndpoint("mock:result");
>         mock.expectedBodiesReceived("Bye World");
> 
>         // send a request reply to the direct start endpoint, but will use
>         // future type converter that will wait for the response
>         String response = template.requestBody("direct:start",
> "Hello", String.class);
>         assertEquals("Bye World", response);
> 
>         assertMockEndpointsSatisfied();
>     }
> 
> So whats next is that you can just pass in the Future<String.class> to
> instruct Camel that you want the future handle back
> and that it should return a String as the response.
> 
> Then Camel should be able to take it from there. With the future
> handle the caller gets back in control when the routes hits the
> async() DSL.
> And can do other work as he like.
> 
> And when he want the response, he just:
> Future<String> future = template.requestBody("direct:start", "Hello",
> Future<String>.class);
> 
> String response = future.get();
> 
> But then I guess this is impossible due to type erasure in java generics :(
> No its not!!!
> 
> Okay time to hit the streets
> 
> 

Reply via email to