Arnaud CHOTARD created CAMEL-9560:
-------------------------------------

             Summary: RabbitMQ InOut Producer generates a null body response 
when a correlationId is used
                 Key: CAMEL-9560
                 URL: https://issues.apache.org/jira/browse/CAMEL-9560
             Project: Camel
          Issue Type: Bug
          Components: camel-rabbitmq
    Affects Versions: 2.16.2
            Reporter: Arnaud CHOTARD


The use case uses a correlationId with RabbitMQ InOut Producer :

{code}
from("direct:route")
   .setHeader(RabbitMQConstants.EXCHANGE_NAME, constant("exchange"))
   .setHeader(RabbitMQConstants.CORRELATIONID, constant("123"))
   .inOut("rabbitmq://...")
{code}

The response always contains a null out body message.

The problem is located when restoring the original correlation id in 
org.apache.camel.component.rabbitmq.reply.ReplyManagerSupport : 
{code}
public void processReply(ReplyHolder holder)
{code}

{code}
// restore correlation id in case the remote server messed with it
if (holder.getOriginalCorrelationId() != null) {
   if (exchange.getOut() != null) {
      exchange.getOut().setHeader(RabbitMQConstants.CORRELATIONID, 
         holder.getOriginalCorrelationId());
   } else {
      exchange.getIn().setHeader(RabbitMQConstants.CORRELATIONID, 
         holder.getOriginalCorrelationId());
   }
}
{code}

The test exchange.getOut() is always successful because of the lazy creation in 
DefaultExchange.getOut

{code}
public Message getOut() {
   // lazy create
   if (out == null) {
      out = (in != null && in instanceof MessageSupport)
      ? ((MessageSupport)in).newInstance() : new DefaultMessage();
      configureMessage(out);
   }
   return out;
}
{code}

The in body message contains the correct response from RabbitMQ. However, since 
the out message will be always created with a null body, the null body response 
will be returned in the pipeline



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to