Updated Branches: refs/heads/camel-2.11.x 9e3e7254e -> 0497e22df
CAMEL-6370: Populate all optional parameter for SubmitSm, SubmitMulti and DataSm to SMSC Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/0497e22d Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/0497e22d Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/0497e22d Branch: refs/heads/camel-2.11.x Commit: 0497e22df468215ad6099729f7a7907e17b16aad Parents: 9e3e725 Author: cmueller <cmuel...@apache.org> Authored: Thu May 30 23:03:40 2013 +0200 Committer: cmueller <cmuel...@apache.org> Committed: Thu May 30 23:11:33 2013 +0200 ---------------------------------------------------------------------- .../camel/component/smpp/AbstractSmppCommand.java | 54 +++++- .../apache/camel/component/smpp/SmppBinding.java | 3 +- .../camel/component/smpp/SmppDataSmCommand.java | 67 +++++- .../component/smpp/SmppSubmitMultiCommand.java | 12 +- .../camel/component/smpp/SmppSubmitSmCommand.java | 44 +---- .../component/smpp/AbstractSmppCommandTest.java | 13 + .../component/smpp/SmppDataSmCommandTest.java | 171 +++++++++++++++ .../component/smpp/SmppSubmitMultiCommandTest.java | 124 ++++++++--- .../component/smpp/SmppSubmitSmCommandTest.java | 21 +-- 9 files changed, 400 insertions(+), 109 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/0497e22d/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java ---------------------------------------------------------------------- diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java index d37bead..54d93da 100644 --- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java +++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/AbstractSmppCommand.java @@ -16,8 +16,18 @@ */ package org.apache.camel.component.smpp; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + import org.apache.camel.Exchange; import org.apache.camel.Message; +import org.jsmpp.bean.OptionalParameter; +import org.jsmpp.bean.OptionalParameter.COctetString; +import org.jsmpp.bean.OptionalParameter.OctetString; +import org.jsmpp.bean.OptionalParameter.Tag; import org.jsmpp.session.SMPPSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,7 +43,7 @@ public abstract class AbstractSmppCommand implements SmppCommand { this.session = session; this.config = config; } - + protected Message getResponseMessage(Exchange exchange) { Message message; if (exchange.getPattern().isOutCapable()) { @@ -44,4 +54,46 @@ public abstract class AbstractSmppCommand implements SmppCommand { return message; } + + @SuppressWarnings("rawtypes") + protected List<OptionalParameter> createOptionalParameters(Map<String, String> optinalParamaters) { + List<OptionalParameter> optParams = new ArrayList<OptionalParameter>(); + + for (Entry<String, String> entry : optinalParamaters.entrySet()) { + OptionalParameter optParam = null; + + try { + Tag tag = Tag.valueOf(entry.getKey()); + Class type = determineTypeClass(tag); + + if (OctetString.class.equals(type)) { + optParam = new OptionalParameter.OctetString(tag.code(), entry.getValue()); + } else if (COctetString.class.equals(type)) { + optParam = new OptionalParameter.COctetString(tag.code(), entry.getValue()); + } else if (org.jsmpp.bean.OptionalParameter.Byte.class.equals(type)) { + optParam = new OptionalParameter.Byte(tag.code(), Byte.valueOf(entry.getValue())); + } else if (org.jsmpp.bean.OptionalParameter.Int.class.equals(type)) { + optParam = new OptionalParameter.Int(tag.code(), Integer.valueOf(entry.getValue())); + } else if (org.jsmpp.bean.OptionalParameter.Short.class.equals(type)) { + optParam = new OptionalParameter.Short(tag.code(), Short.valueOf(entry.getValue())); + } else if (org.jsmpp.bean.OptionalParameter.Null.class.equals(type)) { + optParam = new OptionalParameter.Null(tag); + } + + optParams.add(optParam); + } catch (Exception e) { + log.info("Couldn't determine optional parameter for key {} and value {}. Skip this one.", entry.getKey(), entry.getValue()); + } + } + + return optParams; + } + + @SuppressWarnings("unchecked") + protected Class<? extends OptionalParameter> determineTypeClass(Tag tag) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { + // we have to use reflection because the type field is private + Field f = tag.getClass().getDeclaredField("type"); + f.setAccessible(true); + return (Class<? extends OptionalParameter>) f.get(tag); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/0497e22d/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 94d1d9d..5c86c9c 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 @@ -134,8 +134,7 @@ public class SmppBinding { if (SmppUtils.parseAlphabetFromDataCoding(deliverSm.getDataCoding()) == Alphabet.ALPHA_8_BIT) { smppMessage.setBody(deliverSm.getShortMessage()); } else { - smppMessage.setBody(String.valueOf(new String(deliverSm.getShortMessage(), - configuration.getEncoding()))); + 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()); http://git-wip-us.apache.org/repos/asf/camel/blob/0497e22d/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java ---------------------------------------------------------------------- diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java index 1ffd352..b33fa2a 100644 --- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java +++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppDataSmCommand.java @@ -16,12 +16,24 @@ */ package org.apache.camel.component.smpp; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import org.apache.camel.Exchange; import org.apache.camel.Message; import org.jsmpp.bean.DataCoding; import org.jsmpp.bean.DataSm; import org.jsmpp.bean.ESMClass; import org.jsmpp.bean.NumberingPlanIndicator; +import org.jsmpp.bean.OptionalParameter; +import org.jsmpp.bean.OptionalParameter.Byte; +import org.jsmpp.bean.OptionalParameter.COctetString; +import org.jsmpp.bean.OptionalParameter.Int; +import org.jsmpp.bean.OptionalParameter.Null; +import org.jsmpp.bean.OptionalParameter.OctetString; +import org.jsmpp.bean.OptionalParameter.Short; +import org.jsmpp.bean.OptionalParameter.Tag; import org.jsmpp.bean.RegisteredDelivery; import org.jsmpp.bean.TypeOfNumber; import org.jsmpp.session.DataSmResult; @@ -40,7 +52,7 @@ public class SmppDataSmCommand extends AbstractSmppCommand { if (log.isDebugEnabled()) { log.debug("Sending a data short message for exchange id '{}'...", exchange.getExchangeId()); } - + DataSmResult result; try { result = session.dataShortMessage( @@ -53,7 +65,8 @@ public class SmppDataSmCommand extends AbstractSmppCommand { dataSm.getDestAddress(), new ESMClass(dataSm.getEsmClass()), new RegisteredDelivery(dataSm.getRegisteredDelivery()), - DataCoding.newInstance(dataSm.getDataCoding())); + DataCoding.newInstance(dataSm.getDataCoding()), + dataSm.getOptionalParametes()); } catch (Exception e) { throw new SmppException(e); } @@ -65,14 +78,44 @@ public class SmppDataSmCommand extends AbstractSmppCommand { Message message = getResponseMessage(exchange); message.setHeader(SmppConstants.ID, result.getMessageId()); + message.setHeader(SmppConstants.OPTIONAL_PARAMETERS, getOptionalParametersAsMap(result.getOptionalParameters())); } + protected Map<String, String> getOptionalParametersAsMap(OptionalParameter[] optionalParameters) { + if (optionalParameters == null) { + return null; + } + + Map<String, String> optParams = new HashMap<String, String>(); + for (OptionalParameter optionalParameter : optionalParameters) { + + String value = null; + if (optionalParameter instanceof COctetString) { + value = ((COctetString) optionalParameter).getValueAsString(); + } else if (optionalParameter instanceof OctetString) { + value = ((OctetString) optionalParameter).getValueAsString(); + } else if (optionalParameter instanceof Int) { + value = String.valueOf(((Int) optionalParameter).getValue()); + } else if (optionalParameter instanceof Short) { + value = String.valueOf(((Short) optionalParameter).getValue()); + } else if (optionalParameter instanceof Byte) { + value = String.valueOf(((Byte) optionalParameter).getValue()); + } else if (optionalParameter instanceof Null) { + value = null; + } + optParams.put(Tag.valueOf(optionalParameter.tag).name(), value); + } + + return optParams; + } + + @SuppressWarnings({"unchecked"}) protected DataSm createDataSm(Exchange exchange) { Message in = exchange.getIn(); DataSm dataSm = new DataSm(); if (in.getHeaders().containsKey(SmppConstants.DATA_CODING)) { - dataSm.setDataCoding(in.getHeader(SmppConstants.DATA_CODING, Byte.class)); + dataSm.setDataCoding(in.getHeader(SmppConstants.DATA_CODING, java.lang.Byte.class)); } else { dataSm.setDataCoding(config.getDataCoding()); } @@ -84,13 +127,13 @@ public class SmppDataSmCommand extends AbstractSmppCommand { } if (in.getHeaders().containsKey(SmppConstants.DEST_ADDR_TON)) { - dataSm.setDestAddrTon(in.getHeader(SmppConstants.DEST_ADDR_TON, Byte.class)); + dataSm.setDestAddrTon(in.getHeader(SmppConstants.DEST_ADDR_TON, java.lang.Byte.class)); } else { dataSm.setDestAddrTon(config.getDestAddrTon()); } if (in.getHeaders().containsKey(SmppConstants.DEST_ADDR_NPI)) { - dataSm.setDestAddrNpi(in.getHeader(SmppConstants.DEST_ADDR_NPI, Byte.class)); + dataSm.setDestAddrNpi(in.getHeader(SmppConstants.DEST_ADDR_NPI, java.lang.Byte.class)); } else { dataSm.setDestAddrNpi(config.getDestAddrNpi()); } @@ -102,13 +145,13 @@ public class SmppDataSmCommand extends AbstractSmppCommand { } if (in.getHeaders().containsKey(SmppConstants.SOURCE_ADDR_TON)) { - dataSm.setSourceAddrTon(in.getHeader(SmppConstants.SOURCE_ADDR_TON, Byte.class)); + dataSm.setSourceAddrTon(in.getHeader(SmppConstants.SOURCE_ADDR_TON, java.lang.Byte.class)); } else { dataSm.setSourceAddrTon(config.getSourceAddrTon()); } if (in.getHeaders().containsKey(SmppConstants.SOURCE_ADDR_NPI)) { - dataSm.setSourceAddrNpi(in.getHeader(SmppConstants.SOURCE_ADDR_NPI, Byte.class)); + dataSm.setSourceAddrNpi(in.getHeader(SmppConstants.SOURCE_ADDR_NPI, java.lang.Byte.class)); } else { dataSm.setSourceAddrNpi(config.getSourceAddrNpi()); } @@ -120,11 +163,19 @@ public class SmppDataSmCommand extends AbstractSmppCommand { } if (in.getHeaders().containsKey(SmppConstants.REGISTERED_DELIVERY)) { - dataSm.setRegisteredDelivery(in.getHeader(SmppConstants.REGISTERED_DELIVERY, Byte.class)); + dataSm.setRegisteredDelivery(in.getHeader(SmppConstants.REGISTERED_DELIVERY, java.lang.Byte.class)); } else { dataSm.setRegisteredDelivery(config.getRegisteredDelivery()); } + Map<String, String> optinalParamaters = in.getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class); + if (optinalParamaters != null) { + List<OptionalParameter> optParams = createOptionalParameters(optinalParamaters); + dataSm.setOptionalParametes(optParams.toArray(new OptionalParameter[optParams.size()])); + } else { + dataSm.setOptionalParametes(); + } + return dataSm; } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/0497e22d/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java ---------------------------------------------------------------------- diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java index 1d49bf6..00c8638 100644 --- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java +++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitMultiCommand.java @@ -75,7 +75,7 @@ public class SmppSubmitMultiCommand extends SmppSmCommand { DataCoding.newInstance(submitMulti.getDataCoding()), submitMulti.getSmDefaultMsgId(), submitMulti.getShortMessage(), - new OptionalParameter[0]); + submitMulti.getOptionalParameters()); results.add(result); } catch (Exception e) { throw new SmppException(e); @@ -145,7 +145,7 @@ public class SmppSubmitMultiCommand extends SmppSmCommand { return submitMulties; } - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked"}) protected SubmitMulti createSubmitMultiTemplate(Exchange exchange) { Message in = exchange.getIn(); SubmitMulti submitMulti = new SubmitMulti(); @@ -246,6 +246,14 @@ public class SmppSubmitMultiCommand extends SmppSmCommand { submitMulti.setReplaceIfPresentFlag(config.getReplaceIfPresentFlag()); } + Map<String, String> optinalParamaters = in.getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class); + if (optinalParamaters != null) { + List<OptionalParameter> optParams = createOptionalParameters(optinalParamaters); + submitMulti.setOptionalParameters(optParams.toArray(new OptionalParameter[optParams.size()])); + } else { + submitMulti.setOptionalParameters(new OptionalParameter[]{}); + } + return submitMulti; } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/0497e22d/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java ---------------------------------------------------------------------- diff --git a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java index bb630af..4a8166e 100644 --- a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java +++ b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppSubmitSmCommand.java @@ -16,12 +16,10 @@ */ package org.apache.camel.component.smpp; -import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import org.apache.camel.Exchange; import org.apache.camel.Message; @@ -32,9 +30,6 @@ import org.jsmpp.bean.MessageMode; import org.jsmpp.bean.MessageType; import org.jsmpp.bean.NumberingPlanIndicator; import org.jsmpp.bean.OptionalParameter; -import org.jsmpp.bean.OptionalParameter.COctetString; -import org.jsmpp.bean.OptionalParameter.OctetString; -import org.jsmpp.bean.OptionalParameter.Tag; import org.jsmpp.bean.RegisteredDelivery; import org.jsmpp.bean.SubmitSm; import org.jsmpp.bean.TypeOfNumber; @@ -117,7 +112,7 @@ public class SmppSubmitSmCommand extends SmppSmCommand { return submitSms; } - @SuppressWarnings({ "rawtypes", "unchecked" }) + @SuppressWarnings({"unchecked"}) protected SubmitSm createSubmitSmTemplate(Exchange exchange) { Message in = exchange.getIn(); SubmitSm submitSm = new SubmitSm(); @@ -213,34 +208,7 @@ public class SmppSubmitSmCommand extends SmppSmCommand { Map<String, String> optinalParamaters = in.getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class); if (optinalParamaters != null) { - List<OptionalParameter> optParams = new ArrayList<OptionalParameter>(); - for (Entry<String, String> entry : optinalParamaters.entrySet()) { - OptionalParameter optParam = null; - - try { - Tag tag = Tag.valueOf(entry.getKey()); - Class type = determineTypeClass(tag); - - if (OctetString.class.equals(type)) { - optParam = new OptionalParameter.OctetString(tag.code(), entry.getValue()); - } else if (COctetString.class.equals(type)) { - optParam = new OptionalParameter.COctetString(tag.code(), entry.getValue()); - } else if (org.jsmpp.bean.OptionalParameter.Byte.class.equals(type)) { - optParam = new OptionalParameter.Byte(tag.code(), Byte.valueOf(entry.getValue())); - } else if (org.jsmpp.bean.OptionalParameter.Int.class.equals(type)) { - optParam = new OptionalParameter.Int(tag.code(), Integer.valueOf(entry.getValue())); - } else if (org.jsmpp.bean.OptionalParameter.Short.class.equals(type)) { - optParam = new OptionalParameter.Short(tag.code(), Short.valueOf(entry.getValue())); - } else if (org.jsmpp.bean.OptionalParameter.Null.class.equals(type)) { - optParam = new OptionalParameter.Null(tag); - } - - optParams.add(optParam); - } catch (Exception e) { - log.info("Couldn't determine optional parameter for key {} and value {}. Skip this one.", entry.getKey(), entry.getValue()); - } - } - + List<OptionalParameter> optParams = createOptionalParameters(optinalParamaters); submitSm.setOptionalParametes(optParams.toArray(new OptionalParameter[optParams.size()])); } else { submitSm.setOptionalParametes(); @@ -248,12 +216,4 @@ public class SmppSubmitSmCommand extends SmppSmCommand { return submitSm; } - - @SuppressWarnings("unchecked") - protected Class<? extends OptionalParameter> determineTypeClass(Tag tag) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { - // we have to use reflection because the type field is private - Field f = tag.getClass().getDeclaredField("type"); - f.setAccessible(true); - return (Class<? extends OptionalParameter>) f.get(tag); - } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/0497e22d/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/AbstractSmppCommandTest.java ---------------------------------------------------------------------- diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/AbstractSmppCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/AbstractSmppCommandTest.java index 2bd5fc4..33c5d18 100644 --- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/AbstractSmppCommandTest.java +++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/AbstractSmppCommandTest.java @@ -20,6 +20,9 @@ import org.apache.camel.Exchange; import org.apache.camel.ExchangePattern; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultExchange; +import org.jsmpp.bean.OptionalParameter.COctetString; +import org.jsmpp.bean.OptionalParameter.OctetString; +import org.jsmpp.bean.OptionalParameter.Tag; import org.jsmpp.session.SMPPSession; import org.junit.Before; import org.junit.Test; @@ -58,4 +61,14 @@ public class AbstractSmppCommandTest { assertSame(inOnlyExchange.getIn(), command.getResponseMessage(inOnlyExchange)); assertSame(inOutExchange.getOut(), command.getResponseMessage(inOutExchange)); } + + @Test + public void determineTypeClass() throws Exception { + assertSame(OctetString.class, command.determineTypeClass(Tag.SOURCE_SUBADDRESS)); + assertSame(COctetString.class, command.determineTypeClass(Tag.ADDITIONAL_STATUS_INFO_TEXT)); + assertSame(org.jsmpp.bean.OptionalParameter.Byte.class, command.determineTypeClass(Tag.DEST_ADDR_SUBUNIT)); + assertSame(org.jsmpp.bean.OptionalParameter.Short.class, command.determineTypeClass(Tag.DEST_TELEMATICS_ID)); + assertSame(org.jsmpp.bean.OptionalParameter.Int.class, command.determineTypeClass(Tag.QOS_TIME_TO_LIVE)); + assertSame(org.jsmpp.bean.OptionalParameter.Null.class, command.determineTypeClass(Tag.ALERT_ON_MESSAGE_DELIVERY)); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/0497e22d/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java ---------------------------------------------------------------------- diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java new file mode 100644 index 0000000..28714ec --- /dev/null +++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppDataSmCommandTest.java @@ -0,0 +1,171 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.smpp; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.TimeZone; + +import org.apache.camel.Exchange; +import org.apache.camel.ExchangePattern; +import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.impl.DefaultExchange; +import org.jsmpp.bean.DataCoding; +import org.jsmpp.bean.ESMClass; +import org.jsmpp.bean.NumberingPlanIndicator; +import org.jsmpp.bean.OptionalParameter; +import org.jsmpp.bean.OptionalParameter.Tag; +import org.jsmpp.bean.RegisteredDelivery; +import org.jsmpp.bean.SMSCDeliveryReceipt; +import org.jsmpp.bean.TypeOfNumber; +import org.jsmpp.session.DataSmResult; +import org.jsmpp.session.SMPPSession; +import org.jsmpp.util.MessageId; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.easymock.EasyMock.createMock; +import static org.easymock.EasyMock.eq; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +public class SmppDataSmCommandTest { + + private static TimeZone defaultTimeZone; + + private SMPPSession session; + private SmppConfiguration config; + private SmppDataSmCommand command; + + @BeforeClass + public static void setUpBeforeClass() { + defaultTimeZone = TimeZone.getDefault(); + + TimeZone.setDefault(TimeZone.getTimeZone("GMT")); + } + + @AfterClass + public static void tearDownAfterClass() { + if (defaultTimeZone != null) { + TimeZone.setDefault(defaultTimeZone); + } + } + + @Before + public void setUp() { + session = createMock(SMPPSession.class); + config = new SmppConfiguration(); + + command = new SmppDataSmCommand(session, config); + } + + @Test + public void executeWithConfigurationData() throws Exception { + Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut); + exchange.getIn().setHeader(SmppConstants.COMMAND, "DataSm"); + expect(session.dataShortMessage(eq("CMT"), eq(TypeOfNumber.UNKNOWN), eq(NumberingPlanIndicator.UNKNOWN), eq("1616"), + eq(TypeOfNumber.UNKNOWN), eq(NumberingPlanIndicator.UNKNOWN), eq("1717"), eq(new ESMClass()), + eq(new RegisteredDelivery((byte) 1)), eq(DataCoding.newInstance((byte) 0)))) + .andReturn(new DataSmResult(new MessageId("1"), null)); + + replay(session); + + command.execute(exchange); + + verify(session); + + assertEquals("1", exchange.getOut().getHeader(SmppConstants.ID)); + assertNull(exchange.getOut().getHeader(SmppConstants.OPTIONAL_PARAMETERS)); + } + + @Test + public void execute() throws Exception { + Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut); + exchange.getIn().setHeader(SmppConstants.COMMAND, "DataSm"); + exchange.getIn().setHeader(SmppConstants.SERVICE_TYPE, "XXX"); + exchange.getIn().setHeader(SmppConstants.SOURCE_ADDR_TON, TypeOfNumber.NATIONAL.value()); + exchange.getIn().setHeader(SmppConstants.SOURCE_ADDR_NPI, NumberingPlanIndicator.NATIONAL.value()); + exchange.getIn().setHeader(SmppConstants.SOURCE_ADDR, "1818"); + exchange.getIn().setHeader(SmppConstants.DEST_ADDR_TON, TypeOfNumber.INTERNATIONAL.value()); + exchange.getIn().setHeader(SmppConstants.DEST_ADDR_NPI, NumberingPlanIndicator.INTERNET.value()); + exchange.getIn().setHeader(SmppConstants.DEST_ADDR, "1919"); + exchange.getIn().setHeader(SmppConstants.REGISTERED_DELIVERY, new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS).value()); + expect(session.dataShortMessage(eq("XXX"), eq(TypeOfNumber.NATIONAL), eq(NumberingPlanIndicator.NATIONAL), eq("1818"), + eq(TypeOfNumber.INTERNATIONAL), eq(NumberingPlanIndicator.INTERNET), eq("1919"), eq(new ESMClass()), + eq(new RegisteredDelivery((byte) 2)), eq(DataCoding.newInstance((byte) 0)))) + .andReturn(new DataSmResult(new MessageId("1"), null)); + + replay(session); + + command.execute(exchange); + + verify(session); + + assertEquals("1", exchange.getOut().getHeader(SmppConstants.ID)); + assertNull(exchange.getOut().getHeader(SmppConstants.OPTIONAL_PARAMETERS)); + } + + @SuppressWarnings("unchecked") + @Test + public void executeWithOptionalParameter() throws Exception { + Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut); + exchange.getIn().setHeader(SmppConstants.COMMAND, "DataSm"); + Map<String, String> optionalParameters = new LinkedHashMap<String, String>(); + optionalParameters.put("SOURCE_SUBADDRESS", "1292"); + optionalParameters.put("ADDITIONAL_STATUS_INFO_TEXT", "urgent"); + optionalParameters.put("DEST_ADDR_SUBUNIT", "4"); + optionalParameters.put("DEST_TELEMATICS_ID", "2"); + optionalParameters.put("QOS_TIME_TO_LIVE", "3600000"); + optionalParameters.put("ALERT_ON_MESSAGE_DELIVERY", null); + exchange.getIn().setHeader(SmppConstants.OPTIONAL_PARAMETERS, optionalParameters); + expect(session.dataShortMessage(eq("CMT"), eq(TypeOfNumber.UNKNOWN), eq(NumberingPlanIndicator.UNKNOWN), eq("1616"), + eq(TypeOfNumber.UNKNOWN), eq(NumberingPlanIndicator.UNKNOWN), eq("1717"), eq(new ESMClass()), + eq(new RegisteredDelivery((byte) 1)), eq(DataCoding.newInstance((byte) 0)), + eq(new OptionalParameter.OctetString(Tag.SOURCE_SUBADDRESS, "1292")), + eq(new OptionalParameter.COctetString(Tag.ADDITIONAL_STATUS_INFO_TEXT.code(), "urgent")), + eq(new OptionalParameter.Byte(Tag.DEST_ADDR_SUBUNIT, (byte) 4)), + eq(new OptionalParameter.Short(Tag.DEST_TELEMATICS_ID.code(), (short) 2)), + eq(new OptionalParameter.Int(Tag.QOS_TIME_TO_LIVE, 3600000)), + eq(new OptionalParameter.Null(Tag.ALERT_ON_MESSAGE_DELIVERY)))) + .andReturn(new DataSmResult(new MessageId("1"), new OptionalParameter[]{ + new OptionalParameter.OctetString(Tag.SOURCE_SUBADDRESS, "1292"), new OptionalParameter.COctetString(Tag.ADDITIONAL_STATUS_INFO_TEXT.code(), "urgent"), + new OptionalParameter.Byte(Tag.DEST_ADDR_SUBUNIT, (byte) 4), new OptionalParameter.Short(Tag.DEST_TELEMATICS_ID.code(), (short) 2), + new OptionalParameter.Int(Tag.QOS_TIME_TO_LIVE, 3600000), new OptionalParameter.Null(Tag.ALERT_ON_MESSAGE_DELIVERY)})); + + replay(session); + + command.execute(exchange); + + verify(session); + + assertEquals("1", exchange.getOut().getHeader(SmppConstants.ID)); + Map<String, String> optParamMap = exchange.getOut().getHeader(SmppConstants.OPTIONAL_PARAMETERS, Map.class); + assertEquals(6, optParamMap.size()); + assertEquals("1292", optParamMap.get("SOURCE_SUBADDRESS")); + // FIXME: fix required in JSMPP. See http://code.google.com/p/jsmpp/issues/detail?id=140 + //assertEquals("urgent", optParamMap.get("ADDITIONAL_STATUS_INFO_TEXT")); + assertEquals("4", optParamMap.get("DEST_ADDR_SUBUNIT")); + assertEquals("2", optParamMap.get("DEST_TELEMATICS_ID")); + assertEquals("3600000", optParamMap.get("QOS_TIME_TO_LIVE")); + assertNull(optParamMap.get("ALERT_ON_MESSAGE_DELIVERY")); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/0497e22d/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java ---------------------------------------------------------------------- diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java index 3dc74e5..01e24de 100644 --- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java +++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitMultiCommandTest.java @@ -18,6 +18,8 @@ package org.apache.camel.component.smpp; import java.util.Arrays; import java.util.Date; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.TimeZone; import org.apache.camel.Exchange; @@ -30,6 +32,7 @@ import org.jsmpp.bean.DataCoding; import org.jsmpp.bean.ESMClass; import org.jsmpp.bean.NumberingPlanIndicator; import org.jsmpp.bean.OptionalParameter; +import org.jsmpp.bean.OptionalParameter.Tag; import org.jsmpp.bean.RegisteredDelivery; import org.jsmpp.bean.ReplaceIfPresentFlag; import org.jsmpp.bean.SMSCDeliveryReceipt; @@ -54,27 +57,27 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; public class SmppSubmitMultiCommandTest { - + private static TimeZone defaultTimeZone; private SMPPSession session; private SmppConfiguration config; private SmppSubmitMultiCommand command; - + @BeforeClass public static void setUpBeforeClass() { defaultTimeZone = TimeZone.getDefault(); TimeZone.setDefault(TimeZone.getTimeZone("GMT")); } - + @AfterClass public static void tearDownAfterClass() { if (defaultTimeZone != null) { TimeZone.setDefault(defaultTimeZone); } } - + @Before public void setUp() { session = createMock(SMPPSession.class); @@ -82,7 +85,7 @@ public class SmppSubmitMultiCommandTest { command = new SmppSubmitMultiCommand(session, config); } - + @Test public void executeWithConfigurationData() throws Exception { Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut); @@ -95,18 +98,18 @@ public class SmppSubmitMultiCommandTest { eq(ReplaceIfPresentFlag.DEFAULT), eq(DataCoding.newInstance((byte) 0)), eq((byte) 0), aryEq("short message body".getBytes()), aryEq(new OptionalParameter[0]))) .andReturn(new SubmitMultiResult("1", new UnsuccessDelivery(new Address(TypeOfNumber.UNKNOWN, NumberingPlanIndicator.UNKNOWN, "1717"), 0))); - + replay(session); - + command.execute(exchange); - + verify(session); - + assertEquals(Arrays.asList("1"), exchange.getOut().getHeader(SmppConstants.ID)); assertEquals(1, exchange.getOut().getHeader(SmppConstants.SENT_MESSAGE_COUNT)); assertNotNull(exchange.getOut().getHeader(SmppConstants.ERROR)); } - + @Test public void execute() throws Exception { Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut); @@ -131,18 +134,18 @@ public class SmppSubmitMultiCommandTest { eq(ReplaceIfPresentFlag.REPLACE), eq(DataCoding.newInstance((byte) 0)), eq((byte) 0), aryEq("short message body".getBytes()), aryEq(new OptionalParameter[0]))) .andReturn(new SubmitMultiResult("1")); - + replay(session); - + command.execute(exchange); - + verify(session); - + assertEquals(Arrays.asList("1"), exchange.getOut().getHeader(SmppConstants.ID)); assertEquals(1, exchange.getOut().getHeader(SmppConstants.SENT_MESSAGE_COUNT)); assertNull(exchange.getOut().getHeader(SmppConstants.ERROR)); } - + @Test public void executeWithValidityPeriodAsString() throws Exception { Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut); @@ -167,13 +170,13 @@ public class SmppSubmitMultiCommandTest { eq(ReplaceIfPresentFlag.REPLACE), eq(DataCoding.newInstance((byte) 0)), eq((byte) 0), aryEq("short message body".getBytes()), aryEq(new OptionalParameter[0]))) .andReturn(new SubmitMultiResult("1")); - + replay(session); - + command.execute(exchange); - + verify(session); - + assertEquals(Arrays.asList("1"), exchange.getOut().getHeader(SmppConstants.ID)); assertEquals(1, exchange.getOut().getHeader(SmppConstants.SENT_MESSAGE_COUNT)); assertNull(exchange.getOut().getHeader(SmppConstants.ERROR)); @@ -212,11 +215,11 @@ public class SmppSubmitMultiCommandTest { aryEq(bodyNarrowed), aryEq(new OptionalParameter[0]))) .andReturn(new SubmitMultiResult("1")); - + replay(session); - + command.execute(exchange); - + verify(session); } @@ -253,11 +256,11 @@ public class SmppSubmitMultiCommandTest { aryEq(bodyNarrowed), aryEq(new OptionalParameter[0]))) .andReturn(new SubmitMultiResult("1")); - + replay(session); - + command.execute(exchange); - + verify(session); } @@ -293,11 +296,11 @@ public class SmppSubmitMultiCommandTest { aryEq(body), aryEq(new OptionalParameter[0]))) .andReturn(new SubmitMultiResult("1")); - + replay(session); - + command.execute(exchange); - + verify(session); } @@ -333,11 +336,11 @@ public class SmppSubmitMultiCommandTest { aryEq(body), aryEq(new OptionalParameter[0]))) .andReturn(new SubmitMultiResult("1")); - + replay(session); - + command.execute(exchange); - + verify(session); } @@ -374,11 +377,11 @@ public class SmppSubmitMultiCommandTest { aryEq(body), aryEq(new OptionalParameter[0]))) .andReturn(new SubmitMultiResult("1")); - + replay(session); - + command.execute(exchange); - + verify(session); } @@ -416,11 +419,58 @@ public class SmppSubmitMultiCommandTest { aryEq(bodyNarrowed), aryEq(new OptionalParameter[0]))) .andReturn(new SubmitMultiResult("1")); - + replay(session); - + command.execute(exchange); - + + verify(session); + } + + @Test + public void executeWithOptionalParameter() throws Exception { + Exchange exchange = new DefaultExchange(new DefaultCamelContext(), ExchangePattern.InOut); + exchange.getIn().setHeader(SmppConstants.COMMAND, "SubmitMulti"); + exchange.getIn().setHeader(SmppConstants.ID, "1"); + exchange.getIn().setHeader(SmppConstants.SOURCE_ADDR_TON, TypeOfNumber.NATIONAL.value()); + exchange.getIn().setHeader(SmppConstants.SOURCE_ADDR_NPI, NumberingPlanIndicator.NATIONAL.value()); + exchange.getIn().setHeader(SmppConstants.SOURCE_ADDR, "1818"); + exchange.getIn().setHeader(SmppConstants.DEST_ADDR_TON, TypeOfNumber.INTERNATIONAL.value()); + exchange.getIn().setHeader(SmppConstants.DEST_ADDR_NPI, NumberingPlanIndicator.INTERNET.value()); + exchange.getIn().setHeader(SmppConstants.DEST_ADDR, Arrays.asList("1919")); + exchange.getIn().setHeader(SmppConstants.SCHEDULE_DELIVERY_TIME, new Date(1111111)); + exchange.getIn().setHeader(SmppConstants.VALIDITY_PERIOD, new Date(2222222)); + exchange.getIn().setHeader(SmppConstants.PROTOCOL_ID, (byte) 1); + exchange.getIn().setHeader(SmppConstants.PRIORITY_FLAG, (byte) 2); + exchange.getIn().setHeader(SmppConstants.REGISTERED_DELIVERY, new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS).value()); + exchange.getIn().setHeader(SmppConstants.REPLACE_IF_PRESENT_FLAG, ReplaceIfPresentFlag.REPLACE.value()); + Map<String, String> optionalParameters = new LinkedHashMap<String, String>(); + optionalParameters.put("SOURCE_SUBADDRESS", "1292"); + optionalParameters.put("ADDITIONAL_STATUS_INFO_TEXT", "urgent"); + optionalParameters.put("DEST_ADDR_SUBUNIT", "4"); + optionalParameters.put("DEST_TELEMATICS_ID", "2"); + optionalParameters.put("QOS_TIME_TO_LIVE", "3600000"); + optionalParameters.put("ALERT_ON_MESSAGE_DELIVERY", null); + exchange.getIn().setHeader(SmppConstants.OPTIONAL_PARAMETERS, optionalParameters); + exchange.getIn().setBody("short message body"); + expect(session.submitMultiple(eq("CMT"), eq(TypeOfNumber.NATIONAL), eq(NumberingPlanIndicator.NATIONAL), eq("1818"), + aryEq(new Address[]{new Address(TypeOfNumber.INTERNATIONAL, NumberingPlanIndicator.INTERNET, "1919")}), + eq(new ESMClass()), eq((byte) 1), eq((byte) 2), eq("-300101001831100-"), eq("-300101003702200-"), eq(new RegisteredDelivery(SMSCDeliveryReceipt.SUCCESS)), + eq(ReplaceIfPresentFlag.REPLACE), eq(DataCoding.newInstance((byte) 0)), eq((byte) 0), aryEq("short message body".getBytes()), + aryEq(new OptionalParameter[]{new OptionalParameter.OctetString(Tag.SOURCE_SUBADDRESS, "1292"), + new OptionalParameter.COctetString(Tag.ADDITIONAL_STATUS_INFO_TEXT.code(), "urgent"), new OptionalParameter.Byte(Tag.DEST_ADDR_SUBUNIT, (byte) 4), + new OptionalParameter.Short(Tag.DEST_TELEMATICS_ID.code(), (short) 2), new OptionalParameter.Int(Tag.QOS_TIME_TO_LIVE, 3600000), + new OptionalParameter.Null(Tag.ALERT_ON_MESSAGE_DELIVERY)}))) + .andReturn(new SubmitMultiResult("1")); + + replay(session); + + command.execute(exchange); + verify(session); + + assertEquals(Arrays.asList("1"), exchange.getOut().getHeader(SmppConstants.ID)); + assertEquals(1, exchange.getOut().getHeader(SmppConstants.SENT_MESSAGE_COUNT)); + assertNull(exchange.getOut().getHeader(SmppConstants.ERROR)); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/0497e22d/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java ---------------------------------------------------------------------- diff --git a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java index 22d9ecb..e13d0c0 100644 --- a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java +++ b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppSubmitSmCommandTest.java @@ -31,8 +31,6 @@ import org.jsmpp.bean.DataCoding; import org.jsmpp.bean.ESMClass; import org.jsmpp.bean.NumberingPlanIndicator; import org.jsmpp.bean.OptionalParameter; -import org.jsmpp.bean.OptionalParameter.COctetString; -import org.jsmpp.bean.OptionalParameter.OctetString; import org.jsmpp.bean.OptionalParameter.Tag; import org.jsmpp.bean.RegisteredDelivery; import org.jsmpp.bean.ReplaceIfPresentFlag; @@ -46,15 +44,14 @@ import org.junit.Ignore; import org.junit.Test; import static org.easymock.EasyMock.aryEq; +import static org.easymock.EasyMock.createMock; import static org.easymock.EasyMock.eq; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.isNull; import static org.easymock.EasyMock.not; -import static org.easymock.classextension.EasyMock.createMock; -import static org.easymock.classextension.EasyMock.replay; -import static org.easymock.classextension.EasyMock.verify; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; public class SmppSubmitSmCommandTest { @@ -74,7 +71,7 @@ public class SmppSubmitSmCommandTest { @AfterClass public static void tearDownAfterClass() { if (defaultTimeZone != null) { - TimeZone.setDefault(defaultTimeZone); + TimeZone.setDefault(defaultTimeZone); } } @@ -492,14 +489,4 @@ public class SmppSubmitSmCommandTest { verify(session); } - - @Test - public void determineTypeClass() throws Exception { - assertSame(OctetString.class, command.determineTypeClass(Tag.SOURCE_SUBADDRESS)); - assertSame(COctetString.class, command.determineTypeClass(Tag.ADDITIONAL_STATUS_INFO_TEXT)); - assertSame(org.jsmpp.bean.OptionalParameter.Byte.class, command.determineTypeClass(Tag.DEST_ADDR_SUBUNIT)); - assertSame(org.jsmpp.bean.OptionalParameter.Short.class, command.determineTypeClass(Tag.DEST_TELEMATICS_ID)); - assertSame(org.jsmpp.bean.OptionalParameter.Int.class, command.determineTypeClass(Tag.QOS_TIME_TO_LIVE)); - assertSame(org.jsmpp.bean.OptionalParameter.Null.class, command.determineTypeClass(Tag.ALERT_ON_MESSAGE_DELIVERY)); - } } \ No newline at end of file