[ https://issues.apache.org/activemq/browse/CAMEL-1867?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=53045#action_53045 ]
Mark White commented on CAMEL-1867: ----------------------------------- Here is the Spring bean configuration we use to test; <bean id="ConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop"> <property name="connectionFactory"> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="failover:tcp://localhost:61616"/> </bean> </property> </bean> <bean id="PassThroughHeader" class="org.apache.camel.component.jms.PassThroughJmsKeyFormatStrategy"/> <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration"> <property name="connectionFactory" ref="ConnectionFactory"/> <property name="jmsKeyFormatStrategy" ref="PassThroughHeader"/> <property name="explicitQosEnabled" value="true"/> <property name="deliveryPersistent" value="false"/> <property name="concurrentConsumers" value="1"/> </bean> <bean id="jms" class="org.apache.camel.component.jms.JmsComponent"> <property name="configuration" ref="jmsConfig"/> </bean> > 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 > > 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.