Hi
The problem is that you are setting the header on the backing javax.jms.Message.
What you should do is set the header on the Camel Exchange/Message API.
So the code in your bean should be like this:
exchange.getIn().setHeader("route", "b");
On Tue, Apr 28, 2009 at 8:36 PM, jbekas <[email protected]> wrote:
>
> activemq 5.2.0
> camel-2.0-M1
>
> I'm trying to set a header on a JmsMessage based on content contained in the
> message. I then use a choice statement to route to the next destination.
> However, I receive the log message "The jmsMessage is not set yet, call the
> super's createMessageId" when the header is tested.
>
> I'm testing the content in a bean, pseudo-coded as
>
> public class PreProcessor {
> public void determineRouting(Exchange exchange) {
> Message message = exchange.getIn().getBody(Message.class);
> message.setHeader("route", "a");
> }
> }
>
> My route configuration looks like this
>
> Predicate isA = header("route").isEqualTo("a");
> Predicate isB = header("route").isEqualTo("b");
>
> from("jms:queue:msgin")
> .to("bean:preProcessor?method=determineRouting")
> .choice()
> .when(isA).to("direct:aProcessor")
> .when(isB).to("direct:bProcessor");
>
>
> Debugging where the log message happens, it appears that it occurs after my
> PrePrecessor and before the choice:
> at
> org.apache.camel.component.jms.JmsMessage.createMessageId(JmsMessage.java:165)
> at
> org.apache.camel.impl.MessageSupport.getMessageId(MessageSupport.java:146)
> at
> org.apache.camel.component.jms.JmsMessage.copyFrom(JmsMessage.java:77)
> at
> org.apache.camel.processor.Pipeline.createNextExchange(Pipeline.java:183)
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:86)
> ...
>
> I've dug through the source and discovered that this log message is made if
> the javax.jms.Message (aka jmsMessage) is not set on the
> org.apache.camel.component.jms.JmsMessage in the exchange. It is set on the
> copy in my original Exchange object. Judging from the code, it should be
> copied when the Exchange is replicated, but that does not appear to be the
> case.
>
> My processing is successful, so the log message is a nuisance more than
> anything. I'll have to tweak the log4j settings so that this message
> doesn't pollute the logs a few million times a day.
>
> Obviously someone thought it was important to check and see if the original
> JmsMessage was passed along the processing route or not. Is this a bug?
>
> I've tried various ways to prevent this, but without modifying camel source
> code, it doesn't appear feasible.
>
> Thoughts or suggestions?
>
> -----
> Freelance Application Development Consultant
> LinkedIn Profile: http://www.linkedin.com/in/johnbekasjr
> http://www.linkedin.com/in/johnbekasjr
>
> --
> View this message in context:
> http://www.nabble.com/The-jmsMessage-is-not-set-yet%2C-call-the-super%27s-createMessageId-tp23283591p23283591.html
> Sent from the Camel Development mailing list archive at Nabble.com.
>
>
--
Claus Ibsen
Apache Camel Committer
Open Source Integration: http://fusesource.com
Blog: http://davsclaus.blogspot.com/
Twitter: http://twitter.com/davsclaus
Apache Camel Reference Card:
http://refcardz.dzone.com/refcardz/enterprise-integration