You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by cm...@apache.org on 2010/11/09 00:27:28 UTC

svn commit: r1032785 - in /camel/trunk/components/camel-smpp/src: main/java/org/apache/camel/component/smpp/SmppBinding.java test/java/org/apache/camel/component/smpp/SmppBindingTest.java

Author: cmueller
Date: Mon Nov  8 23:27:27 2010
New Revision: 1032785

URL: http://svn.apache.org/viewvc?rev=1032785&view=rev
Log:
CAMEL-3321: SmppBinding raises NullPointerException when an SMSC insert the Short Message Data inside the message_payload field
Thanks Vincenzo for reporting the issue and providing the patch.

Modified:
    camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
    camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java

Modified: camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java?rev=1032785&r1=1032784&r2=1032785&view=diff
==============================================================================
--- camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java (original)
+++ camel/trunk/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppBinding.java Mon Nov  8 23:27:27 2010
@@ -17,7 +17,9 @@
 package org.apache.camel.component.smpp;
 
 import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
 import java.util.Date;
+import java.util.List;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
@@ -26,6 +28,8 @@ import org.jsmpp.bean.Command;
 import org.jsmpp.bean.DataSm;
 import org.jsmpp.bean.DeliverSm;
 import org.jsmpp.bean.DeliveryReceipt;
+import org.jsmpp.bean.OptionalParameter;
+import org.jsmpp.bean.OptionalParameter.OctetString;
 import org.jsmpp.bean.SubmitSm;
 import org.jsmpp.util.AbsoluteTimeFormatter;
 import org.jsmpp.util.TimeFormatter;
@@ -214,8 +218,19 @@ public class SmppBinding {
             smppMessage.setHeader(SUBMITTED, smscDeliveryReceipt.getSubmitted());
             smppMessage.setHeader(FINAL_STATUS, smscDeliveryReceipt.getFinalStatus());
         } else {
-            smppMessage.setBody(String.valueOf(new String(deliverSm.getShortMessage(),
-                    configuration.getEncoding())));
+            if (deliverSm.getShortMessage() != null) {
+                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;
+                    }
+                }
+            }
 
             smppMessage.setHeader(SEQUENCE_NUMBER, deliverSm.getSequenceNumber());
             smppMessage.setHeader(COMMAND_ID, deliverSm.getCommandId());

Modified: camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java?rev=1032785&r1=1032784&r2=1032785&view=diff
==============================================================================
--- camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java (original)
+++ camel/trunk/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppBindingTest.java Mon Nov  8 23:27:27 2010
@@ -26,13 +26,19 @@ import org.jsmpp.bean.AlertNotification;
 import org.jsmpp.bean.DataSm;
 import org.jsmpp.bean.DeliverSm;
 import org.jsmpp.bean.NumberingPlanIndicator;
+import org.jsmpp.bean.OptionalParameter;
+import org.jsmpp.bean.OptionalParameter.OctetString;
 import org.jsmpp.bean.SubmitSm;
 import org.jsmpp.bean.TypeOfNumber;
 import org.jsmpp.util.DeliveryReceiptState;
 import org.junit.Before;
 import org.junit.Test;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
 
 /**
  * JUnit test class for <code>org.apache.camel.component.smpp.SmppBinding</code>
@@ -214,6 +220,30 @@ public class SmppBindingTest {
     }
     
     @Test
+    public void createSmppMessageFromDeliverSmWithPayloadInOptionalParameterShouldReturnASmppMessage() throws Exception {
+        DeliverSm deliverSm = new DeliverSm();
+        deliverSm.setSequenceNumber(1);
+        deliverSm.setCommandId(1);
+        deliverSm.setSourceAddr("1818");
+        deliverSm.setDestAddress("1919");
+        deliverSm.setScheduleDeliveryTime("090831230627004+");
+        deliverSm.setValidityPeriod("090901230627004+");
+        deliverSm.setServiceType("WAP");
+        deliverSm.setOptionalParametes(new OctetString(OptionalParameter.Tag.MESSAGE_PAYLOAD, "Hello SMPP world!"));
+        SmppMessage smppMessage = binding.createSmppMessage(deliverSm);
+        
+        assertEquals("Hello SMPP world!", smppMessage.getBody());
+        assertEquals(7, smppMessage.getHeaders().size());
+        assertEquals(1, smppMessage.getHeader(SmppBinding.SEQUENCE_NUMBER));
+        assertEquals(1, smppMessage.getHeader(SmppBinding.COMMAND_ID));
+        assertEquals("1818", smppMessage.getHeader(SmppBinding.SOURCE_ADDR));
+        assertEquals("1919", smppMessage.getHeader(SmppBinding.DEST_ADDR));
+        assertEquals("090831230627004+", smppMessage.getHeader(SmppBinding.SCHEDULE_DELIVERY_TIME));
+        assertEquals("090901230627004+", smppMessage.getHeader(SmppBinding.VALIDITY_PERIOD));
+        assertEquals("WAP", smppMessage.getHeader(SmppBinding.SERVICE_TYPE));
+    }
+    
+    @Test
     public void createSmppMessageFromDataSmShouldReturnASmppMessage() throws Exception {
         DataSm dataSm = new DataSm();
         dataSm.setSequenceNumber(1);