text: Hi
  I got curious with your problem and hacked a small unit test in camel-jms component that mimic
  your routes. I am able to with success to get the reponse regardless in what order the bean
  is place in the route path.
  Note: This is on Camel 1.4-SNAPSHOT that is soon to be released in a new RC that hopefully
  gets voted as final.
  What version of Camel are you using?: 6. juli 2008 15:43
  To: camel-user@activemq.apache.org
  Subject: Problem with InOut pattern and JMS component
  Hi,
  I'm new to Camel, but this problem looks like the bug in JMS component.
  I have a following route:
  from("jms:sourceQueue").to("bean:testBean?methodName=test").to("jms:AQueue").to("jms:BQueue").
  Scenario:
  1. Initial message producer (IMP) sends the message (with JMSReplyTo field
  set to "jms:replies") to the jms:sourceQueue, and starts listening the
  jms:replies queue for replies;
  2. Camel router gets the message from jms:sourceQueue and passes it to the
  testBean.test(exchange) method, that creates new message and set it to
  exchange.out field (see code bellow);
  3. New Out message sends as In message to the jms:AQueue. Then other
  listener (AQueueListener, see code bellow) listens the jms:AQueue for new
  message and replies to its JMSReplyTo destination (that is
  changed by Camel to some temp dest.)
  4. Camel gets reply from AQueueListener (from temp Camel's queue) and sends
  it as In message to jms:BQueue;
  5. The third listener (BQueueListener) listens the jms:BQueue message and
  replies to its JMSReplyTo destination (that was also replaced with Camel's
  temp queue);
  6. Last step - Camel gets reply from BQueueListener (also from temp Camel's
  queue) and sends it as a response message to the jms:replies queue that is
  listened by IMP.
  So If IMP sends the message like "abcd", finally it will get response like
  "[BQueueListener] Reply for [[AQueueListener] Reply for [[testBean] Reply
  for [abcd]]]"
  That's all OK, but...
  Then I want to change the endpoint's order to set JMS endpoint to the first
  place, like:
  from("jms:sourceQueue").to("jms:AQueue").to("bean:testBean?methodName=test").to("jms:BQueue")
  It is obviously that if IMP would send message "abcd", it would get response
  like "[BQueueListener] Reply for [[testBean] Reply for [[AQueueListener]
  Reply for [abcd]]]",
  but actually it gets the "[AQueueListener] Reply for [abcd]"!
  It means that after AQueueListener has responded on the message "abcd", the
  response "[AQueueListener] Reply for [abcd]" is immediately sent to the
  IMP's jms:replies queue as well as to further endpoints of route (I checked
  it by loging); and after BQueueListener (last element in chain) has
  responded on the message, the response isn't sent to the IMP's jms:replies.
  Why? Is that expected behaviour? Or this is a bug?
  Code Examples:
  AQueueListener and BQueueListener (the same as AQueueListener):
  public class AQueueListener implements MessageListener {
  private JmsTemplate jmsTemplate = ...;
  public void onMessage(Message message) {
  final TextMessage msg = (TextMessage) message;
  try {
  if (msg.getJMSReplyTo() != null) {
  // do reply
  jmsTemplate.convertAndSend(msg.getJMSReplyTo(),
  "[AQueueListener] Reply for [" + msg.getText() + "]", new
  MessagePostProcessor() {
  public Message postProcessMessage(Message
  message) throws JMSException {
  message.setJMSCorrelationID(msg.getJMSCorrelationID());
  return message;
  }
  });
  }
  } catch (JMSException e) {
  throw new RuntimeException(e);
  }
  }
  }
  TestBean:
  class TestBean {
  public void test(Exchange ex) {
  Message msg = new JmsMessage();
  msg.setBody("[testBean] Reply for [" +
  ex.getIn().getBody().toString() + "]");
  ex.setOut(msg);
  }
  }
  I'm looking forward to your response.
  Thanks in advance.
  Sergey
  --
  View this message in context:
  Sent from the Camel - Users mailing list archive at Nabble.com.