[ 
https://issues.apache.org/activemq/browse/CAMEL-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=53401#action_53401
 ] 

Mark White commented on CAMEL-1867:
-----------------------------------

In JmsMessage the getHeader() always looks for the original message property 
and doesn't use message header map unless the header doesn't exist in the 
original;

public Object getHeader(String name) {
...
            answer = jmsMessage.getObjectProperty(name);
...

This dates back to the original implementation, but at that time the 
setHeader() also used jmsMessage.setObjectProperty(), so it probably made sense 
then.

Why does the JmsMessage getHeader() still use the 
jmsMessage.getObjectProperty() to return the original value rather than the 
message value (which can be modified)?



> JmsKeyFormatStrategy not used consistently and JmsMessage.getHeader() not 
> returning correct value
> -------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-1867
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1867
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-jms
>    Affects Versions: 2.0-M3
>         Environment: 2.0-M3
>            Reporter: Mark White
>         Attachments: JmsPassThroughtJmsKeyFormatStrategyTest.java, log.out, 
> MessageTester.java
>
>
> On entry to a route from a JMS endpoint configured with 
> PassthroughJmsKeyFormatStrategy the headers with underscores (_) are passed 
> through correctly.
> However, when any header value in the message is then changed, the original 
> headers are added back into the message using the 
> DefaultJmsKeyFormatStrategy.  For example, sending a JMS message with headers;
> HEADER_1=VALUE_1
> HEADER_2=VALUE_1
> we do see just these two headers in the message received into the route.
> However, if we then set a header value in the route, say HEADER_1=VALUE_2, we 
> now see the headers;
> HEADER.1=VALUE_1
> HEADER.2=VALUE_1
> HEADER_1=VALUE_2
> HEADER_2=VALUE_1
> For some reason in the set header process the original message headers and 
> values get added into the message after being passed through the 
> DefaultJmsKeyFormatStrategy.  This has the implication of unnecessary 
> duplication of the headers.
> Also, when a message header is accessed using the getHeader(key) method it 
> also goes through the DefaultJmsKeyFormatStrategy to decode the key that is 
> passed.  
> In the example above, if after we have updated 'HEADER_1' to 'VALUE_2', we do;
> message.getHeader("HEADER_1") this goes through the 
> DefaultJmsKeyFormatStrategy and actually gets executed as 
> message.getHeader("HEADER.1") which returns VALUE_1 (wrong!).
> Note: if instead we lookup the header through message.getHeaders() which 
> returns the all headers in a Map, we can correctly access the 'HEADER_1' key. 
>  (Why is getHeader(key) even going through the KeyFormatStrategy anyway if 
> setHeader() isn't?)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to