Repository: camel Updated Branches: refs/heads/master 2ec2b8750 -> 7ca0c8756
CAMEL-8696: Allow ApnsNotification/EnhancedApnsNotification instances to be send to apns endpoints. Thanks to Justin Heesemann for the patch. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7ca0c875 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7ca0c875 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7ca0c875 Branch: refs/heads/master Commit: 7ca0c8756fa237ba1b9c9caf662dffd0df66c4ae Parents: 2ec2b87 Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Apr 27 08:19:52 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Apr 27 08:19:52 2015 +0200 ---------------------------------------------------------------------- .../camel/component/apns/ApnsProducer.java | 19 +++++++++++++----- .../camel/component/apns/model/MessageType.java | 2 +- .../camel/component/apns/ApnsProducerTest.java | 21 ++++++++++++++++++++ 3 files changed, 36 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/7ca0c875/components/camel-apns/src/main/java/org/apache/camel/component/apns/ApnsProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-apns/src/main/java/org/apache/camel/component/apns/ApnsProducer.java b/components/camel-apns/src/main/java/org/apache/camel/component/apns/ApnsProducer.java index 76f6a49..ce021fb 100644 --- a/components/camel-apns/src/main/java/org/apache/camel/component/apns/ApnsProducer.java +++ b/components/camel-apns/src/main/java/org/apache/camel/component/apns/ApnsProducer.java @@ -23,6 +23,7 @@ import java.util.Date; import java.util.List; import com.notnoop.apns.APNS; +import com.notnoop.apns.ApnsNotification; import com.notnoop.exceptions.ApnsException; import org.apache.camel.Exchange; import org.apache.camel.component.apns.model.ApnsConstants; @@ -64,8 +65,18 @@ public class ApnsProducer extends DefaultProducer { } private void notify(Exchange exchange) throws ApnsException { - String message = exchange.getIn().getBody(String.class); + MessageType messageType = getHeaderMessageType(exchange, MessageType.STRING); + + if (messageType == MessageType.APNS_NOTIFICATION) { + ApnsNotification apnsNotification = exchange.getIn().getBody(ApnsNotification.class); + getEndpoint().getApnsService().push(apnsNotification); + } else { + constructNotificationAndNotify(exchange, messageType); + } + } + private void constructNotificationAndNotify(Exchange exchange, MessageType messageType) { + String payload; Collection<String> tokens; if (isTokensConfiguredUsingUri()) { if (hasTokensHeader(exchange)) { @@ -76,13 +87,11 @@ public class ApnsProducer extends DefaultProducer { String tokensHeader = getHeaderTokens(exchange); tokens = extractTokensFromString(tokensHeader); } - - MessageType messageType = getHeaderMessageType(exchange, MessageType.STRING); - - String payload; if (messageType == MessageType.STRING) { + String message = exchange.getIn().getBody(String.class); payload = APNS.newPayload().alertBody(message).build(); } else { + String message = exchange.getIn().getBody(String.class); payload = message; } Date expiry = exchange.getIn().getHeader(ApnsConstants.HEADER_EXPIRY, Date.class); http://git-wip-us.apache.org/repos/asf/camel/blob/7ca0c875/components/camel-apns/src/main/java/org/apache/camel/component/apns/model/MessageType.java ---------------------------------------------------------------------- diff --git a/components/camel-apns/src/main/java/org/apache/camel/component/apns/model/MessageType.java b/components/camel-apns/src/main/java/org/apache/camel/component/apns/model/MessageType.java index bbba780..9b90271 100644 --- a/components/camel-apns/src/main/java/org/apache/camel/component/apns/model/MessageType.java +++ b/components/camel-apns/src/main/java/org/apache/camel/component/apns/model/MessageType.java @@ -18,6 +18,6 @@ package org.apache.camel.component.apns.model; public enum MessageType { - STRING, PAYLOAD; + STRING, PAYLOAD, APNS_NOTIFICATION; } http://git-wip-us.apache.org/repos/asf/camel/blob/7ca0c875/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsProducerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsProducerTest.java b/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsProducerTest.java index 3fe4502..c130c76 100644 --- a/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsProducerTest.java +++ b/components/camel-apns/src/test/java/org/apache/camel/component/apns/ApnsProducerTest.java @@ -26,6 +26,7 @@ import org.apache.camel.CamelContext; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.apns.factory.ApnsServiceFactory; import org.apache.camel.component.apns.model.ApnsConstants; +import org.apache.camel.component.apns.model.MessageType; import org.apache.camel.component.apns.util.ApnsUtils; import org.apache.camel.test.junit4.CamelTestSupport; import org.junit.After; @@ -65,6 +66,23 @@ public class ApnsProducerTest extends CamelTestSupport { assertArrayEquals(apnsNotification.marshall(), server.received.toByteArray()); } + + @Test(timeout = 5000) + public void testProducerWithApnsNotification() throws InterruptedException { + String message = "Hello World"; + String messagePayload = APNS.newPayload().alertBody(message).build(); + + final EnhancedApnsNotification apnsNotification = + new EnhancedApnsNotification(14, EnhancedApnsNotification.MAXIMUM_EXPIRY, FAKE_TOKEN, messagePayload); + server.stopAt(apnsNotification.length()); + + template.sendBody("direct:testWithApnsNotification", apnsNotification); + + server.messages.acquire(); + assertArrayEquals(apnsNotification.marshall(), server.received.toByteArray()); + + } + protected CamelContext createCamelContext() throws Exception { CamelContext camelContext = super.createCamelContext(); @@ -81,6 +99,9 @@ public class ApnsProducerTest extends CamelTestSupport { return new RouteBuilder() { public void configure() throws Exception { from("direct:test").setHeader(ApnsConstants.HEADER_TOKENS, constant(FAKE_TOKEN)).to("apns:notify"); + from("direct:testWithApnsNotification") + .setHeader(ApnsConstants.HEADER_MESSAGE_TYPE, constant(MessageType.APNS_NOTIFICATION.name())) + .to("apns:notify"); } }; }