camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Brad Johnson <brad.john...@mediadriver.com>
Subject Re: Camel route set map object in body
Date Sun, 10 Apr 2016 03:57:04 GMT
By the way, when the quartz timer fires what are you expecting that data to
be in the bodyMap?  Is that just an instance variable at that point?
Perhaps if you posted the complete code it would make that a bit clearer.
>From what I can see of your route snippet I'd expect some quartz timer
event to be received. Again, putting a .log() statement in there would let
you see what you are getting.  If you look at an example of Quartz in
action from the Camel web page you can see.

from("file:inbox?scheduler=quartz2&scheduler.cron=0/2+*+*+*+*+?")
   .to("bean:process");

You can see that it is using the timer to fire a read from a file. In your
case you appear to be firing the timer and sending a timer event into your
route.  It's been a while since I've used Quartz so take that observation
with a grain of salt but I'd definitely put a log statement in to see what
you are getting there.

Brad


On Sat, Apr 9, 2016 at 10:47 PM, Brad Johnson <brad.johnson@mediadriver.com>
wrote:

>   .setBody(new SimpleExpression(bodyMap.toString()))
>                                 .convertBodyTo(Map.class)
>
> Aren't you converting the object twice?  First to a String and then
> telling it to convert the String to a Map (which it doesn't know how to
> handle)?
>
> bodyMap.toString().  Assuming it does that correctly you are now passing
> it to a converter and telling it to convert the string to a map.  Perhaps
> put some .log("${body}") in between them and see what you are getting there.
>
> On Sat, Apr 9, 2016 at 9:33 PM, VinothKR <vinsmailid@gmail.com> wrote:
>
>> Hi,
>> I'm accessing a route through both producertemplate and a QuartzScheduler.
>>
>> *Route:*
>> <route id="uaasRoute">
>>  <from uri="direct:hivein" />
>>  <setBody>
>>   <el>select * from table where empId=${in.body.EmpId}</el>
>>  </setBody>
>>  <to uri="jdbc:hive-ds?resetAutoCommit=false" />
>>  <to uri="mock:result" />
>> </route>
>>
>> *I'm able to successfully pass employee id using producer template like
>> below,*
>>
>> Map<String,Object> bodyMap = new HashMap<String,Object>();
>>                 bodyMap.put("EmpId", "23456");
>> Object out = ProducerTemplate.requestBody("direct:hivein",bodyMap);
>>
>> But unable to achieve the same using quartzScheduler route,
>> camel.addRoutes( new RouteBuilder() {
>>                         @Override
>>                         public void configure() throws Exception {
>>
>> from("quartz2://sampleGroup/sampleTimer?trigger.repeatCount=1")
>>                                 .routeId("scheduler").noAutoStartup()
>>                                 .setBody(new
>> SimpleExpression(bodyMap.toString()))
>>                                 .convertBodyTo(Map.class)
>>                                 .to("direct:hivein");
>>                         }
>>                 });
>>
>> Facing the issue,
>> Caused by: org.apache.camel.NoTypeConversionAvailableException: No type
>> converter available to convert from type: java.lang.String to the required
>> type: java.util.Map
>>
>> Is there any other way to achieve similar logic as ProducerTemplate in
>> QuartzScheduler?
>>
>> Thanks,
>> Vinoth.
>>
>>
>>
>> --
>> View this message in context:
>> http://camel.465427.n5.nabble.com/Camel-route-set-map-object-in-body-tp5780863.html
>> Sent from the Camel - Users mailing list archive at Nabble.com.
>>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message