You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Jason Parr <ja...@usa.net> on 2011/07/28 15:52:03 UTC

Camel, Dates and JMS MapMessages

I'm new to Camel so if this is the wrong mailing list my apologies.
 
In our system we want to send a tibco rendezvous (TibRv) message (basically a key/value message), Camel doesn't come with a TibRv component so we are going to use JMS. Then use a bridge available within Tibco EMS to export the JMS message onto TibRv.
 
This works mostly fine but the problem is with dates.
 
We have a camel route with a translator that turns our canonical pojo into a java.util.Map which we then send as a JMS MapMessage.
 
Route:
 
from("file:src/data?noop=true")
      .unmarshal(jaxb)
      .transform().method("myTranslator")
      .to("activemq:queue:nomura.fiet.stp.radial.trades?jmsMessageType=Map");
 
Class:
 
public class MyTranslator {
  public Map<String, Object> translate(Transaction tradeTransaction) {...}
 
The map can hold java primatives and dates. Now a JMS MapMessage can't hold a Date so I need to format any dates as a string. How is this based acheived in Camel? I could just not put any dates into the map created during transformation, but preformat them as strings. But this doesnt feel right as the translator is worrying about the transport being JMS.
 
I know Camel has plugable type convertors - can I use an existing one / implement a new one that hides the transport date conversion?
 
Thanks

Re: Camel, Dates and JMS MapMessages

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

By default Camel converts java.util.Date to a toString representation.
That may be sufficient?

You can use a custom messageConverter
http://camel.apache.org/jms

Which allows you to implement logic how to map the message to/from JMS.

You could maybe also use a interceptSendToEndpoint and convert all the
java.util.Date headers to your format.
http://camel.apache.org/intercept


On Thu, Jul 28, 2011 at 3:52 PM, Jason Parr <ja...@usa.net> wrote:
>
> I'm new to Camel so if this is the wrong mailing list my apologies.
>
> In our system we want to send a tibco rendezvous (TibRv) message (basically a key/value message), Camel doesn't come with a TibRv component so we are going to use JMS. Then use a bridge available within Tibco EMS to export the JMS message onto TibRv.
>
> This works mostly fine but the problem is with dates.
>
> We have a camel route with a translator that turns our canonical pojo into a java.util.Map which we then send as a JMS MapMessage.
>
> Route:
>
> from("file:src/data?noop=true")
>      .unmarshal(jaxb)
>      .transform().method("myTranslator")
>      .to("activemq:queue:nomura.fiet.stp.radial.trades?jmsMessageType=Map");
>
> Class:
>
> public class MyTranslator {
>  public Map<String, Object> translate(Transaction tradeTransaction) {...}
>
> The map can hold java primatives and dates. Now a JMS MapMessage can't hold a Date so I need to format any dates as a string. How is this based acheived in Camel? I could just not put any dates into the map created during transformation, but preformat them as strings. But this doesnt feel right as the translator is worrying about the transport being JMS.
>
> I know Camel has plugable type convertors - can I use an existing one / implement a new one that hides the transport date conversion?
>
> Thanks



-- 
Claus Ibsen
-----------------
FuseSource
Email: cibsen@fusesource.com
Web: http://fusesource.com
Twitter: davsclaus, fusenews
Blog: http://davsclaus.blogspot.com/
Author of Camel in Action: http://www.manning.com/ibsen/