Repository: camel Updated Branches: refs/heads/master 4a5d8297e -> 7f7ce39d2
CAMEL-10291: support java.util.date for timestamps in rabbitmq messages Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/65d372f5 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/65d372f5 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/65d372f5 Branch: refs/heads/master Commit: 65d372f587aa79479753068533fd8b4aa52671ec Parents: 4a5d829 Author: Florian Gessner <flo.gess...@gmail.com> Authored: Mon Sep 5 21:38:08 2016 +0200 Committer: Florian Gessner <flo.gess...@gmail.com> Committed: Mon Sep 5 21:38:08 2016 +0200 ---------------------------------------------------------------------- .../rabbitmq/RabbitMQMessageConverter.java | 9 +++++- .../rabbitmq/RabbitMQConsumerIntTest.java | 32 ++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/65d372f5/components/camel-rabbitmq/src/main/java/org/apache/camel/component/rabbitmq/RabbitMQMessageConverter.java ---------------------------------------------------------------------- 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 1873674..b29b3cf 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 @@ -152,7 +152,7 @@ public class RabbitMQMessageConverter { final Object timestamp = msg.removeHeader(RabbitMQConstants.TIMESTAMP); if (timestamp != null) { - properties.timestamp(new Date(Long.parseLong(timestamp.toString()))); + properties.timestamp(convertTimestamp(timestamp)); } final Map<String, Object> headers = msg.getHeaders(); @@ -179,6 +179,13 @@ public class RabbitMQMessageConverter { return properties; } + private Date convertTimestamp(Object timestamp) { + if(timestamp instanceof Date){ + return (Date)timestamp; + } + return new Date(Long.parseLong(timestamp.toString())); + } + /** * Strategy to test if the given header is valid. Without this, the * com.rabbitmq.client.impl.Frame.java class will throw an http://git-wip-us.apache.org/repos/asf/camel/blob/65d372f5/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQConsumerIntTest.java ---------------------------------------------------------------------- diff --git a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQConsumerIntTest.java b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQConsumerIntTest.java index 2066380..91cefb2 100644 --- a/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQConsumerIntTest.java +++ b/components/camel-rabbitmq/src/test/java/org/apache/camel/component/rabbitmq/RabbitMQConsumerIntTest.java @@ -17,6 +17,8 @@ package org.apache.camel.component.rabbitmq; import java.io.IOException; +import java.util.Calendar; +import java.util.Date; import java.util.concurrent.TimeoutException; import com.rabbitmq.client.AMQP; @@ -74,5 +76,35 @@ public class RabbitMQConsumerIntTest extends CamelTestSupport { to.assertIsSatisfied(); } + + @Test + public void sentMessageWithTimestampIsReceived() throws InterruptedException, IOException, TimeoutException { + Date timestamp = currentTimestampWithoutMillis(); + + to.expectedMessageCount(1); + to.expectedHeaderReceived(RabbitMQConstants.TIMESTAMP, timestamp); + + ConnectionFactory factory = new ConnectionFactory(); + factory.setHost("localhost"); + factory.setPort(5672); + factory.setUsername("cameltest"); + factory.setPassword("cameltest"); + factory.setVirtualHost("/"); + Connection conn = factory.newConnection(); + + AMQP.BasicProperties.Builder properties = new AMQP.BasicProperties.Builder(); + properties.timestamp(timestamp); + + Channel channel = conn.createChannel(); + channel.basicPublish(EXCHANGE, "", properties.build(), "hello world".getBytes()); + + to.assertIsSatisfied(); + } + + private Date currentTimestampWithoutMillis() { + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.MILLISECOND, 0); + return calendar.getTime(); + } }