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);