Hello!
In DefaultUnitOfWork (line 86 -93) we have the following code:
if
(exchange.getIn().getClass().getSimpleName().equals("JmsMessage")) {
this.originalInMessage = new DefaultMessage();
this.originalInMessage.setBody(exchange.getIn().getBody());
// cannot copy headers with a JmsMessage as the underlying
javax.jms.Message object goes nuts
} else {
this.originalInMessage = exchange.getIn().copy();
}
Because of this, the following unit test will fail:
@Test
public void testUseOriginalMessage() throws Exception {
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
onException(Exception.class)
.useOriginalMessage()
.to(mockResult);
from("jms:queue:foo")
.throwException(new Exception("forced exception for
test"));
}
});
context.start();
mockResult.expectedBodiesReceived("Hello World");
mockResult.expectedHeaderReceived("header-key", "header-value"); //
will fail here
template.sendBodyAndHeader("jms:queue:foo", "Hello World",
"header-key", "header-value");
assertMockEndpointsSatisfied();
}
I propose to change the DefaultUnitOfWork to also copy the headers in this
way:
if
(exchange.getIn().getClass().getSimpleName().equals("JmsMessage")) {
this.originalInMessage = new DefaultMessage();
this.originalInMessage.setBody(exchange.getIn().getBody());
this.originalInMessage.setHeaders(exchange.getIn().getHeaders());
// cannot copy headers with a JmsMessage as the underlying
javax.jms.Message object goes nuts
} else {
this.originalInMessage = exchange.getIn().copy();
}
After this change the unit test passed. Also all unit tests in camel-core
and camel-jms passed. Any doubts for this change?
Best,
Christian