You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/09/04 17:41:03 UTC
[camel] branch camel-2.x updated: CAMEL-12471: Fix overriding
rabbit mq exchange name with EXCHANGE_OVERRIDE_NAME header.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-2.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-2.x by this push:
new 969ca54 CAMEL-12471: Fix overriding rabbit mq exchange name with EXCHANGE_OVERRIDE_NAME header.
969ca54 is described below
commit 969ca549a19e9e6c4eb07da5d8a041d036228971
Author: Alexey Oparin <ao...@esphere.ru>
AuthorDate: Fri Aug 30 18:44:48 2019 +0300
CAMEL-12471: Fix overriding rabbit mq exchange name with EXCHANGE_OVERRIDE_NAME header.
---
.../apache/camel/component/rabbitmq/RabbitMQMessageConverter.java | 7 +++++--
.../apache/camel/component/rabbitmq/RabbitMQMessagePublisher.java | 3 +--
.../org/apache/camel/component/rabbitmq/RabbitMQProducer.java | 6 ++----
.../org/apache/camel/component/rabbitmq/RabbitMQProducerTest.java | 8 ++++++++
4 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQMessageConverter.java b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQMessageConverter.java
index 07902ca..c81e27c 100644
--- a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQMessageConverter.java
+++ b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQMessageConverter.java
@@ -167,12 +167,15 @@ public class RabbitMQMessageConverter {
for (Map.Entry<String, Object> header : headers.entrySet()) {
// filter header values.
Object value = getValidRabbitMQHeaderValue(header.getValue());
-
- if (value != null || isAllowNullHeaders()) {
+
+ // additionaly filter out the OVERRIDE header so it does not propagate
+ if ((value != null || isAllowNullHeaders()) && !header.getKey().equals(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME)) {
filteredHeaders.put(header.getKey(), header.getValue());
} else if (LOG.isDebugEnabled()) {
if (header.getValue() == null) {
LOG.debug("Ignoring header: {} with null value", header.getKey());
+ } else if (header.getKey().equals(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME)) {
+ LOG.debug("Preventing header propagation: {} with value {}:", header.getKey(), header.getValue());
} else {
LOG.debug("Ignoring header: {} of class: {} with value: {}",
header.getKey(), ObjectHelper.classCanonicalName(header.getValue()), header.getValue());
diff --git a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQMessagePublisher.java b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQMessagePublisher.java
index 5c52ead..4680cfc 100644
--- a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQMessagePublisher.java
+++ b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQMessagePublisher.java
@@ -104,8 +104,7 @@ public class RabbitMQMessagePublisher {
}
private void publishToRabbitMQ(final AMQP.BasicProperties properties, final byte[] body) throws IOException {
- // remove the OVERRIDE header so it does not propagate
- String exchangeName = (String) message.removeHeader(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME);
+ String exchangeName = (String) message.getHeader(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME);
// If it is BridgeEndpoint we should ignore the message header of EXCHANGE_OVERRIDE_NAME
if (exchangeName == null || endpoint.isBridgeEndpoint()) {
exchangeName = endpoint.getExchangeName();
diff --git a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQProducer.java b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQProducer.java
index 23e7fe2..1398acc 100644
--- a/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQProducer.java
+++ b/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQProducer.java
@@ -219,8 +219,7 @@ public class RabbitMQProducer extends DefaultAsyncProducer {
in.setHeader(RabbitMQConstants.REPLY_TO, replyManager.getReplyTo());
- // remove the OVERRIDE header so it does not propagate
- String exchangeName = (String) exchange.getIn().removeHeader(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME);
+ String exchangeName = (String) exchange.getIn().getHeader(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME);
// If it is BridgeEndpoint we should ignore the message header of EXCHANGE_OVERRIDE_NAME
if (exchangeName == null || getEndpoint().isBridgeEndpoint()) {
exchangeName = getEndpoint().getExchangeName();
@@ -251,8 +250,7 @@ public class RabbitMQProducer extends DefaultAsyncProducer {
}
private boolean processInOnly(Exchange exchange, AsyncCallback callback) throws Exception {
- // remove the OVERRIDE header so it does not propagate
- String exchangeName = (String) exchange.getIn().removeHeader(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME);
+ String exchangeName = (String) exchange.getIn().getHeader(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME);
// If it is BridgeEndpoint we should ignore the message header of EXCHANGE_OVERRIDE_NAME
if (exchangeName == null || getEndpoint().isBridgeEndpoint()) {
exchangeName = getEndpoint().getExchangeName();
diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQProducerTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQProducerTest.java
index d955ccb..a7a5f13 100644
--- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQProducerTest.java
+++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQProducerTest.java
@@ -152,6 +152,14 @@ public class RabbitMQProducerTest {
}
@Test
+ public void testPropertiesOverrideNameHeader() throws IOException {
+ RabbitMQProducer producer = new RabbitMQProducer(endpoint);
+ message.setHeader(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME, "qweeqwe");
+ AMQP.BasicProperties props = producer.buildProperties(exchange).build();
+ assertNull(props.getHeaders().get(RabbitMQConstants.EXCHANGE_OVERRIDE_NAME));
+ }
+
+ @Test
public void testPropertiesUsesTimestampHeaderAsLongValue() throws IOException {
RabbitMQProducer producer = new RabbitMQProducer(endpoint);
message.setHeader(RabbitMQConstants.TIMESTAMP, "12345123");