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 2015/11/25 14:36:12 UTC

camel git commit: CAMEL-9356: Allow delivery receipts with empty shortMessage field. Thanks to Anshu Avinash for the patch.

Repository: camel
Updated Branches:
  refs/heads/master 006b4594a -> ad7f37fab


CAMEL-9356: Allow delivery receipts with empty shortMessage field. Thanks to Anshu Avinash 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/ad7f37fa
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ad7f37fa
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ad7f37fa

Branch: refs/heads/master
Commit: ad7f37fab42ed6e70ad27052737ec77f3f1ae71b
Parents: 006b459
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Nov 25 14:36:04 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Nov 25 14:36:04 2015 +0100

----------------------------------------------------------------------
 .../camel/component/smpp/SmppBinding.java       | 58 +++++++++++++-------
 .../camel/component/smpp/SmppBindingTest.java   | 45 ++++++++++++++-
 2 files changed, 81 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/ad7f37fa/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
index b44658f..cbb5c64 100644
--- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
+++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
@@ -35,6 +35,7 @@ import org.jsmpp.bean.OptionalParameter.COctetString;
 import org.jsmpp.bean.OptionalParameter.Null;
 import org.jsmpp.bean.OptionalParameter.OctetString;
 import org.jsmpp.session.SMPPSession;
+import org.jsmpp.util.DefaultDecomposer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -97,20 +98,44 @@ public class SmppBinding {
     public SmppMessage createSmppMessage(DeliverSm deliverSm) throws Exception {
         SmppMessage smppMessage = new SmppMessage(deliverSm, configuration);
 
+        String messagePayload = null;
+
+        if (deliverSm.getShortMessage() == null && deliverSm.getOptionalParametes() != null) {
+            List<OptionalParameter> oplist = Arrays.asList(deliverSm.getOptionalParametes());
+
+            for (OptionalParameter optPara : oplist) {
+                if (OptionalParameter.Tag.MESSAGE_PAYLOAD.code() == optPara.tag && OctetString.class
+                    .isInstance(optPara)) {
+                    messagePayload = ((OctetString) optPara).getValueAsString();
+                    break;
+                }
+            }
+        }
+
         if (deliverSm.isSmscDeliveryReceipt()) {
             smppMessage.setHeader(SmppConstants.MESSAGE_TYPE, SmppMessageType.DeliveryReceipt.toString());
-            DeliveryReceipt smscDeliveryReceipt = deliverSm.getShortMessageAsDeliveryReceipt();
-            smppMessage.setBody(smscDeliveryReceipt.getText());
-
-            smppMessage.setHeader(SmppConstants.ID, smscDeliveryReceipt.getId());
-            smppMessage.setHeader(SmppConstants.DELIVERED, smscDeliveryReceipt.getDelivered());
-            smppMessage.setHeader(SmppConstants.DONE_DATE, smscDeliveryReceipt.getDoneDate());
-            if (!"000".equals(smscDeliveryReceipt.getError())) {
-                smppMessage.setHeader(SmppConstants.ERROR, smscDeliveryReceipt.getError());
+
+            DeliveryReceipt smscDeliveryReceipt = null;
+
+            if (deliverSm.getShortMessage() != null) {
+                smscDeliveryReceipt = deliverSm.getShortMessageAsDeliveryReceipt();
+            } else if (messagePayload != null) {
+                smscDeliveryReceipt = DefaultDecomposer.getInstance().deliveryReceipt(messagePayload);
+            }
+
+            if (smscDeliveryReceipt != null) {
+                smppMessage.setBody(smscDeliveryReceipt.getText());
+
+                smppMessage.setHeader(SmppConstants.ID, smscDeliveryReceipt.getId());
+                smppMessage.setHeader(SmppConstants.DELIVERED, smscDeliveryReceipt.getDelivered());
+                smppMessage.setHeader(SmppConstants.DONE_DATE, smscDeliveryReceipt.getDoneDate());
+                if (!"000".equals(smscDeliveryReceipt.getError())) {
+                    smppMessage.setHeader(SmppConstants.ERROR, smscDeliveryReceipt.getError());
+                }
+                smppMessage.setHeader(SmppConstants.SUBMIT_DATE, smscDeliveryReceipt.getSubmitDate());
+                smppMessage.setHeader(SmppConstants.SUBMITTED, smscDeliveryReceipt.getSubmitted());
+                smppMessage.setHeader(SmppConstants.FINAL_STATUS, smscDeliveryReceipt.getFinalStatus());
             }
-            smppMessage.setHeader(SmppConstants.SUBMIT_DATE, smscDeliveryReceipt.getSubmitDate());
-            smppMessage.setHeader(SmppConstants.SUBMITTED, smscDeliveryReceipt.getSubmitted());
-            smppMessage.setHeader(SmppConstants.FINAL_STATUS, smscDeliveryReceipt.getFinalStatus());
 
             if (deliverSm.getOptionalParametes() != null && deliverSm.getOptionalParametes().length > 0) {
                 // the deprecated way
@@ -130,15 +155,8 @@ public class SmppBinding {
                 } else {
                     smppMessage.setBody(String.valueOf(new String(deliverSm.getShortMessage(), configuration.getEncoding())));
                 }
-            } else if (deliverSm.getOptionalParametes() != null && deliverSm.getOptionalParametes().length > 0) {
-                List<OptionalParameter> oplist = Arrays.asList(deliverSm.getOptionalParametes());
-
-                for (OptionalParameter optPara : oplist) {
-                    if (OptionalParameter.Tag.MESSAGE_PAYLOAD.code() == optPara.tag && OctetString.class.isInstance(optPara)) {
-                        smppMessage.setBody(((OctetString) optPara).getValueAsString());
-                        break;
-                    }
-                }
+            } else if (messagePayload != null) {
+                smppMessage.setBody(messagePayload);
             }
 
             smppMessage.setHeader(SmppConstants.SEQUENCE_NUMBER, deliverSm.getSequenceNumber());

http://git-wip-us.apache.org/repos/asf/camel/blob/ad7f37fa/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
----------------------------------------------------------------------
diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
index 890d871..dea34a4 100644
--- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
+++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
@@ -43,6 +43,8 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 
 /**
  * JUnit test class for <code>org.apache.camel.component.smpp.SmppBinding</code>
@@ -106,7 +108,9 @@ public class SmppBindingTest {
     public void createSmppMessageFromDeliveryReceiptShouldReturnASmppMessage() throws Exception {
         DeliverSm deliverSm = new DeliverSm();
         deliverSm.setSmscDeliveryReceipt();
-        deliverSm.setShortMessage("id:2 sub:001 dlvrd:001 submit date:0908312310 done date:0908312311 stat:DELIVRD err:xxx Text:Hello SMPP world!".getBytes());
+        deliverSm.setShortMessage(
+            "id:2 sub:001 dlvrd:001 submit date:0908312310 done date:0908312311 stat:DELIVRD err:xxx Text:Hello SMPP world!"
+                .getBytes());
         SmppMessage smppMessage = binding.createSmppMessage(deliverSm);
         
         assertEquals("Hello SMPP world!", smppMessage.getBody());
@@ -170,6 +174,43 @@ public class SmppBindingTest {
     }
 
     @Test
+    public void createSmppMessageFromDeliveryReceiptWithPayloadInOptionalParameterShouldReturnASmppMessage() {
+        DeliverSm deliverSm = new DeliverSm();
+        deliverSm.setSmscDeliveryReceipt();
+        deliverSm.setOptionalParametes(new OctetString(OptionalParameter.Tag.MESSAGE_PAYLOAD,
+            "id:2 sub:001 dlvrd:001 submit date:0908312310 done date:0908312311 stat:DELIVRD err:xxx Text:Hello SMPP world!"));
+        try {
+            SmppMessage smppMessage = binding.createSmppMessage(deliverSm);
+
+            assertEquals("Hello SMPP world!", smppMessage.getBody());
+            assertEquals(10, smppMessage.getHeaders().size());
+            assertEquals("2", smppMessage.getHeader(SmppConstants.ID));
+            assertEquals(1, smppMessage.getHeader(SmppConstants.DELIVERED));
+            assertEquals("xxx", smppMessage.getHeader(SmppConstants.ERROR));
+            assertEquals(1, smppMessage.getHeader(SmppConstants.SUBMITTED));
+            assertEquals(DeliveryReceiptState.DELIVRD, smppMessage.getHeader(SmppConstants.FINAL_STATUS));
+            assertEquals(SmppMessageType.DeliveryReceipt.toString(), smppMessage.getHeader(SmppConstants.MESSAGE_TYPE));
+        } catch (Exception e) {
+            fail("Should not throw exception while creating smppMessage.");
+        }
+    }
+
+    @Test
+    public void createSmppMessageFromDeliveryReceiptWithoutShortMessageShouldNotThrowException() {
+        DeliverSm deliverSm = new DeliverSm();
+        deliverSm.setSmscDeliveryReceipt();
+        deliverSm.setOptionalParametes(new OptionalParameter.Short((short) 0x2153, (short) 0));
+
+        try {
+            SmppMessage smppMessage = binding.createSmppMessage(deliverSm);
+            Map<Short, Object> optionalParameter = smppMessage.getHeader(SmppConstants.OPTIONAL_PARAMETER, Map.class);
+            assertEquals(Short.valueOf((short) 0), optionalParameter.get(Short.valueOf((short) 0x2153)));
+        } catch (Exception e) {
+            fail("Should not throw exception while creating smppMessage in absence of shortMessage");
+        }
+    }
+
+    @Test
     public void createSmppMessageFromDeliverSmShouldReturnASmppMessage() throws Exception {
         DeliverSm deliverSm = new DeliverSm();
         deliverSm.setShortMessage("Hello SMPP world!".getBytes());
@@ -376,4 +417,4 @@ public class SmppBindingTest {
         
         assertTrue(command instanceof SmppCancelSmCommand);
     }
-}
\ No newline at end of file
+}