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 <john+nab...@bekas.org> 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

Reply via email to