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 <davscl...@apache.org> Authored: Wed Nov 25 14:36:04 2015 +0100 Committer: Claus Ibsen <davscl...@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 +}