camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ashwin Karpe <aska...@progress.com>
Subject Re: JmsMessage headers and body
Date Thu, 30 Jul 2009 19:29:59 GMT

Hi,

There is no need for a fix. Please find the answers to your questions below.

> 1. I can't use setBody(null) to remove the payload of the message.
> instead, I have to use setBody("") or similar value to represent an
> empty payload, which can be problematic in some cases, as NULL and
> non-NULL value will suggest completely different to other components.

If you wish to use a payload with no body element, please use the Message
base class.This message type is used for event notification and does not
have a payload. If you any of the other Message Types (BytesMessage,
TestMessage, StreamMessage, MapMessage, ObjectMessage) a body object is
assumed and needed. This is per the JMS spec.

> 2. getHeader(key) and getHeaders().get(key) can return different
> results, because getHeader will look first in the original jms message
> if the header is available, but the same header in the internal map
> may be modified as setHeader will only modify the internal map. this
> is all very confusing and 'inconsistent' if people don't know. Since
> the original properties of the jms message are copied into the
> internal map, why do we ever need to have these operations like
> set/getBody, set/getHeader and removeHeader have to tackle on the
> original jms message?

These are APIs to easily parse JMS messages and simply stated needed to
prevent folks from doing exactly what you have stated above. Directly
manipulating JMS data structures is not good programming practise. It is
better accomplished using helper classes.

Hope this clarifies things.

Cheers,

Ashwin...   


Zhi Zhou wrote:
> 
> Hi,
> 
> I've been working with camel 2.0-m2 so far. Some behaviors related to
> getting and setting JmsMessage header and body appear very annoying.
> 
> Just try to confirm/discuss here if they are like so in design or require
> a fix:
> 
> 1. I can't use setBody(null) to remove the payload of the message.
> instead, I have to use setBody("") or similar value to represent an
> empty payload, which can be problematic in some cases, as NULL and
> non-NULL value will suggest completely different to other components.
> 
> 2. getHeader(key) and getHeaders().get(key) can return different
> results, because getHeader will look first in the original jms message
> if the header is available, but the same header in the internal map
> may be modified as setHeader will only modify the internal map. this
> is all very confusing and 'inconsistent' if people don't know. Since
> the original properties of the jms message are copied into the
> internal map, why do we ever need to have these operations like
> set/getBody, set/getHeader and removeHeader have to tackle on the
> original jms message?
> 
> Thanks!
> 
> Zhi
> 
> 


-----
--- 
Ashwin Karpe, Principal Consultant, PS - Opensource Center of Competence 
Progress Software Corporation
14 Oak Park Drive
Bedford, MA 01730
--- 
+1-972-304-9084 (Office) 
+1-972-971-1700 (Mobile) 
---- 
Blog: http://opensourceknowledge.blogspot.com/


-- 
View this message in context: http://www.nabble.com/JmsMessage-headers-and-body-tp24731110p24745828.html
Sent from the Camel - Users mailing list archive at Nabble.com.


Mime
View raw message