This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 2c6b3acfc0f [CAMEL-5963] camel-smpp: add Transceiver (TRX) support 
(#8955)
2c6b3acfc0f is described below

commit 2c6b3acfc0f1713daee676567574741676ddc52c
Author: Yasser Zamani <[email protected]>
AuthorDate: Tue Jan 3 10:01:15 2023 +0330

    [CAMEL-5963] camel-smpp: add Transceiver (TRX) support (#8955)
    
    * [CAMEL-5963] camel-smpp: add Transceiver (TRX) support
    
    fixes CAMEL-5963
    
    * [CAMEL-5963] camel-smpp: add corresponding docs
---
 components/camel-smpp/pom.xml                      |   6 +
 .../component/smpp/SmppComponentConfigurer.java    |  11 +-
 .../component/smpp/SmppEndpointConfigurer.java     |  11 +-
 .../component/smpp/SmppEndpointUriFactory.java     |   1 +
 .../camel-smpp/src/main/docs/smpp-component.adoc   |  20 ++-
 .../smpp/MessageReceiverListenerImpl.java          |  19 ++-
 .../camel/component/smpp/SmppConfiguration.java    |  18 +++
 .../apache/camel/component/smpp/SmppProducer.java  |  14 +-
 .../component/smpp/SmppConfigurationTest.java      |   6 +
 .../smpp/integration/SmppTRXProducerIT.java        | 148 +++++++++++++++++++++
 10 files changed, 239 insertions(+), 15 deletions(-)

diff --git a/components/camel-smpp/pom.xml b/components/camel-smpp/pom.xml
index 1122cec8e87..f35b1ce504a 100644
--- a/components/camel-smpp/pom.xml
+++ b/components/camel-smpp/pom.xml
@@ -72,5 +72,11 @@
             <artifactId>log4j-slf4j-impl</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.jsmpp</groupId>
+            <artifactId>jsmpp-examples</artifactId>
+            <scope>test</scope>
+            <version>${jsmpp-version}</version>
+        </dependency>
     </dependencies>
 </project>
diff --git 
a/components/camel-smpp/src/generated/java/org/apache/camel/component/smpp/SmppComponentConfigurer.java
 
b/components/camel-smpp/src/generated/java/org/apache/camel/component/smpp/SmppComponentConfigurer.java
index 37169f832f5..a7b9c82175e 100644
--- 
a/components/camel-smpp/src/generated/java/org/apache/camel/component/smpp/SmppComponentConfigurer.java
+++ 
b/components/camel-smpp/src/generated/java/org/apache/camel/component/smpp/SmppComponentConfigurer.java
@@ -1,14 +1,9 @@
 /* Generated by camel build tools - do NOT edit this file! */
 package org.apache.camel.component.smpp;
 
-import java.util.Map;
-
 import org.apache.camel.CamelContext;
-import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
 import org.apache.camel.spi.PropertyConfigurerGetter;
-import org.apache.camel.spi.ConfigurerStrategy;
 import org.apache.camel.spi.GeneratedPropertyConfigurer;
-import org.apache.camel.util.CaseInsensitiveMap;
 import org.apache.camel.support.component.PropertyConfigurerSupport;
 
 /**
@@ -59,6 +54,8 @@ public class SmppComponentConfigurer extends 
PropertyConfigurerSupport implement
         case "initialReconnectDelay": 
getOrCreateConfiguration(target).setInitialReconnectDelay(property(camelContext,
 long.class, value)); return true;
         case "lazysessioncreation":
         case "lazySessionCreation": 
getOrCreateConfiguration(target).setLazySessionCreation(property(camelContext, 
boolean.class, value)); return true;
+        case "messagereceiverrouteid":
+        case "messageReceiverRouteId": 
getOrCreateConfiguration(target).setMessageReceiverRouteId(property(camelContext,
 String.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": 
target.setLazyStartProducer(property(camelContext, boolean.class, value)); 
return true;
         case "maxreconnect":
@@ -144,6 +141,8 @@ public class SmppComponentConfigurer extends 
PropertyConfigurerSupport implement
         case "initialReconnectDelay": return long.class;
         case "lazysessioncreation":
         case "lazySessionCreation": return boolean.class;
+        case "messagereceiverrouteid":
+        case "messageReceiverRouteId": return String.class;
         case "lazystartproducer":
         case "lazyStartProducer": return boolean.class;
         case "maxreconnect":
@@ -230,6 +229,8 @@ public class SmppComponentConfigurer extends 
PropertyConfigurerSupport implement
         case "initialReconnectDelay": return 
getOrCreateConfiguration(target).getInitialReconnectDelay();
         case "lazysessioncreation":
         case "lazySessionCreation": return 
getOrCreateConfiguration(target).isLazySessionCreation();
+        case "messagereceiverrouteid":
+        case "messageReceiverRouteId": return 
getOrCreateConfiguration(target).getMessageReceiverRouteId();
         case "lazystartproducer":
         case "lazyStartProducer": return target.isLazyStartProducer();
         case "maxreconnect":
diff --git 
a/components/camel-smpp/src/generated/java/org/apache/camel/component/smpp/SmppEndpointConfigurer.java
 
b/components/camel-smpp/src/generated/java/org/apache/camel/component/smpp/SmppEndpointConfigurer.java
index b0a0f976cea..bb317aa1965 100644
--- 
a/components/camel-smpp/src/generated/java/org/apache/camel/component/smpp/SmppEndpointConfigurer.java
+++ 
b/components/camel-smpp/src/generated/java/org/apache/camel/component/smpp/SmppEndpointConfigurer.java
@@ -1,14 +1,9 @@
 /* Generated by camel build tools - do NOT edit this file! */
 package org.apache.camel.component.smpp;
 
-import java.util.Map;
-
 import org.apache.camel.CamelContext;
-import org.apache.camel.spi.ExtendedPropertyConfigurerGetter;
 import org.apache.camel.spi.PropertyConfigurerGetter;
-import org.apache.camel.spi.ConfigurerStrategy;
 import org.apache.camel.spi.GeneratedPropertyConfigurer;
-import org.apache.camel.util.CaseInsensitiveMap;
 import org.apache.camel.support.component.PropertyConfigurerSupport;
 
 /**
@@ -53,6 +48,8 @@ public class SmppEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "initialReconnectDelay": 
target.getConfiguration().setInitialReconnectDelay(property(camelContext, 
long.class, value)); return true;
         case "lazysessioncreation":
         case "lazySessionCreation": 
target.getConfiguration().setLazySessionCreation(property(camelContext, 
boolean.class, value)); return true;
+        case "messagereceiverrouteid":
+        case "messageReceiverRouteId": 
target.getConfiguration().setMessageReceiverRouteId(property(camelContext, 
String.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": 
target.setLazyStartProducer(property(camelContext, boolean.class, value)); 
return true;
         case "maxreconnect":
@@ -139,6 +136,8 @@ public class SmppEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "initialReconnectDelay": return long.class;
         case "lazysessioncreation":
         case "lazySessionCreation": return boolean.class;
+        case "messagereceiverrouteid":
+        case "messageReceiverRouteId": return String.class;
         case "lazystartproducer":
         case "lazyStartProducer": return boolean.class;
         case "maxreconnect":
@@ -226,6 +225,8 @@ public class SmppEndpointConfigurer extends 
PropertyConfigurerSupport implements
         case "initialReconnectDelay": return 
target.getConfiguration().getInitialReconnectDelay();
         case "lazysessioncreation":
         case "lazySessionCreation": return 
target.getConfiguration().isLazySessionCreation();
+        case "messagereceiverrouteid":
+        case "messageReceiverRouteId": return 
target.getConfiguration().getMessageReceiverRouteId();
         case "lazystartproducer":
         case "lazyStartProducer": return target.isLazyStartProducer();
         case "maxreconnect":
diff --git 
a/components/camel-smpp/src/generated/java/org/apache/camel/component/smpp/SmppEndpointUriFactory.java
 
b/components/camel-smpp/src/generated/java/org/apache/camel/component/smpp/SmppEndpointUriFactory.java
index 5212c996de2..e3a87e7053c 100644
--- 
a/components/camel-smpp/src/generated/java/org/apache/camel/component/smpp/SmppEndpointUriFactory.java
+++ 
b/components/camel-smpp/src/generated/java/org/apache/camel/component/smpp/SmppEndpointUriFactory.java
@@ -41,6 +41,7 @@ public class SmppEndpointUriFactory extends 
org.apache.camel.support.component.E
         props.add("httpProxyUsername");
         props.add("initialReconnectDelay");
         props.add("lazySessionCreation");
+        props.add("messageReceiverRouteId");
         props.add("lazyStartProducer");
         props.add("maxReconnect");
         props.add("numberingPlanIndicator");
diff --git a/components/camel-smpp/src/main/docs/smpp-component.adoc 
b/components/camel-smpp/src/main/docs/smpp-component.adoc
index a79c5c77264..ab147d900b8 100644
--- a/components/camel-smpp/src/main/docs/smpp-component.adoc
+++ b/components/camel-smpp/src/main/docs/smpp-component.adoc
@@ -256,13 +256,31 @@ A route which receives an SMS using the Spring XML DSL:
   </route>
 
----------------------------------------------------------------------------------------------------------------
 
+An example of using transceiver (TRX) binding type:
+
+[source,java]
+--------------------------------------------------------------------------------------------------------------------------
+from("direct:start")
+        .to("smpp://j@localhost:8056?password=jpwd&systemType=producer" +
+            "&messageReceiverRouteId=sampleMessageReceiverRouteId");
+
+from("direct:messageReceiver").id("sampleMessageReceiverRouteId")
+        .to("bean:foo");
+--------------------------------------------------------------------------------------------------------------------------
+
+Please note that with TRX binding type, you wouldn't define a corresponding 
redundant SMPP consumer. Camel will use the
+specified route by `messageReceiverRouteId` as the corresponding consumer. 
Internally it uses one and same SmppSession
+as producer for the provided consumer.
+
+When the SMPP Server doesn't support TRX then you have to define separate 
producer (TX by default) and consumer (RX by default).
+
 [TIP]
 ====
 *SMSC simulator*
 
 If you need an SMSC simulator for your test, you can use the simulator
 provided by
-http://opensmpp.logica.com/CommonPart/Download/download2.html#simulator[Logica].
+https://github.com/opentelecoms-org/jsmpp/wiki/GettingStarted#running-smpp-server[JSMPP].
 ====
 
 == Debug logging
diff --git 
a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/MessageReceiverListenerImpl.java
 
b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/MessageReceiverListenerImpl.java
index 9eb4e2e8977..6aa2a12f34c 100644
--- 
a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/MessageReceiverListenerImpl.java
+++ 
b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/MessageReceiverListenerImpl.java
@@ -16,10 +16,13 @@
  */
 package org.apache.camel.component.smpp;
 
+import org.apache.camel.Consumer;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.spi.ExceptionHandler;
+import org.apache.camel.support.LoggingExceptionHandler;
 import org.jsmpp.bean.AlertNotification;
 import org.jsmpp.bean.DataSm;
 import org.jsmpp.bean.DeliverSm;
@@ -38,7 +41,7 @@ public class MessageReceiverListenerImpl implements 
MessageReceiverListener {
     private static final Logger LOG = 
LoggerFactory.getLogger(MessageReceiverListenerImpl.class);
 
     private MessageIDGenerator messageIDGenerator = new 
RandomMessageIDGenerator();
-    private SmppConsumer consumer;
+    private Consumer consumer;
     private SmppEndpoint endpoint;
     private Processor processor;
     private ExceptionHandler exceptionHandler;
@@ -51,6 +54,20 @@ public class MessageReceiverListenerImpl implements 
MessageReceiverListener {
         this.exceptionHandler = exceptionHandler;
     }
 
+    public MessageReceiverListenerImpl(SmppEndpoint endpoint, String 
messageReceiverRouteId) throws Exception {
+        this.endpoint = endpoint;
+
+        this.endpoint.getCamelContext().addStartupListener((context, 
alreadyStarted) -> {
+            Route route = context.getRoute(messageReceiverRouteId);
+            if (route == null) {
+                throw new IllegalArgumentException("No route with id '" + 
messageReceiverRouteId + "' found!");
+            }
+            this.consumer = route.getConsumer();
+            this.processor = this.consumer.getProcessor();
+            this.exceptionHandler = new 
LoggingExceptionHandler(endpoint.getCamelContext(), this.getClass());
+        });
+    }
+
     @Override
     public void onAcceptAlertNotification(AlertNotification alertNotification) 
{
         LOG.debug("Received an alertNotification {}", alertNotification);
diff --git 
a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConfiguration.java
 
b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConfiguration.java
index f91e192a7fa..8b2e222254d 100644
--- 
a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConfiguration.java
+++ 
b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppConfiguration.java
@@ -98,6 +98,8 @@ public class SmppConfiguration implements Cloneable {
     private int maxReconnect = Integer.MAX_VALUE;
     @UriParam(label = "producer")
     private boolean lazySessionCreation;
+    @UriParam(label = "producer")
+    private String messageReceiverRouteId;
     @UriParam(label = "proxy")
     private String httpProxyHost;
     @UriParam(label = "proxy", defaultValue = "3128")
@@ -580,6 +582,21 @@ public class SmppConfiguration implements Cloneable {
         this.lazySessionCreation = lazySessionCreation;
     }
 
+    public String getMessageReceiverRouteId() {
+        return messageReceiverRouteId;
+    }
+
+    /**
+     * Set this on producer in order to benefit from transceiver (TRX) binding 
type. So once set, you don't need to
+     * define an 'SMTPP consumer' endpoint anymore. You would set this to a 
'Direct consumer' endpoint instead.
+     *
+     * DISCALIMER: This feature is only tested with 'Direct consumer' 
endpoint. The behavior with any other consumer
+     * type is unknown and not tested.
+     */
+    public void setMessageReceiverRouteId(String messageReceiverRouteId) {
+        this.messageReceiverRouteId = messageReceiverRouteId;
+    }
+
     public String getHttpProxyHost() {
         return httpProxyHost;
     }
@@ -750,6 +767,7 @@ public class SmppConfiguration implements Cloneable {
                + ", reconnectDelay=" + reconnectDelay
                + ", maxReconnect=" + maxReconnect
                + ", lazySessionCreation=" + lazySessionCreation
+               + ", messageReceiverRouteId=" + messageReceiverRouteId
                + ", httpProxyHost=" + httpProxyHost
                + ", httpProxyPort=" + httpProxyPort
                + ", httpProxyUsername=" + httpProxyUsername
diff --git 
a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppProducer.java
 
b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppProducer.java
index 52483a2b1c2..7b0b3655b76 100644
--- 
a/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppProducer.java
+++ 
b/components/camel-smpp/src/main/java/org/apache/camel/component/smpp/SmppProducer.java
@@ -24,6 +24,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.support.DefaultProducer;
 import org.apache.camel.support.task.BlockingTask;
+import org.apache.camel.util.ObjectHelper;
 import org.jsmpp.DefaultPDUReader;
 import org.jsmpp.DefaultPDUSender;
 import org.jsmpp.SynchronizedPDUSender;
@@ -96,7 +97,7 @@ public class SmppProducer extends DefaultProducer {
         }
     }
 
-    private SMPPSession createSession() throws IOException {
+    private SMPPSession createSession() throws Exception {
         LOG.debug("Connecting to: {}...", getEndpoint().getConnectionString());
 
         SMPPSession session = createSMPPSession();
@@ -105,11 +106,18 @@ public class SmppProducer extends DefaultProducer {
         
session.setPduProcessorDegree(this.configuration.getPduProcessorDegree());
         
session.setQueueCapacity(this.configuration.getPduProcessorQueueCapacity());
         session.addSessionStateListener(internalSessionStateListener);
+        BindType bindType = BindType.BIND_TX;
+        if 
(ObjectHelper.isNotEmpty(this.configuration.getMessageReceiverRouteId())) {
+            session.setMessageReceiverListener(new MessageReceiverListenerImpl(
+                    getEndpoint(),
+                    this.configuration.getMessageReceiverRouteId()));
+            bindType = BindType.BIND_TRX;
+        }
         session.connectAndBind(
                 this.configuration.getHost(),
                 this.configuration.getPort(),
                 new BindParameter(
-                        BindType.BIND_TX,
+                        bindType,
                         this.configuration.getSystemId(),
                         this.configuration.getPassword(),
                         this.configuration.getSystemType(),
@@ -235,7 +243,7 @@ public class SmppProducer extends DefaultProducer {
 
             session = createSession();
             return true;
-        } catch (IOException e) {
+        } catch (Exception e) {
             LOG.warn("Failed to reconnect to {}", 
getEndpoint().getConnectionString());
             closeSession();
 
diff --git 
a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppConfigurationTest.java
 
b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppConfigurationTest.java
index 65db31ef61a..44a346c06b4 100644
--- 
a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppConfigurationTest.java
+++ 
b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/SmppConfigurationTest.java
@@ -32,6 +32,7 @@ import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * JUnit test class for 
<code>org.apache.camel.component.smpp.SmppConfiguration</code>
@@ -81,6 +82,7 @@ public class SmppConfigurationTest {
         assertEquals(3, configuration.getPduProcessorDegree());
         assertEquals(100, configuration.getPduProcessorQueueCapacity());
         assertEquals(false, configuration.isSingleDLR());
+        assertNull(configuration.getMessageReceiverRouteId());
     }
 
     @Test
@@ -120,6 +122,7 @@ public class SmppConfigurationTest {
         assertEquals(80, configuration.getPduProcessorQueueCapacity());
         assertEquals(1, configuration.getPduProcessorDegree());
         assertEquals(true, configuration.isSingleDLR());
+        assertEquals("testMessageReceiverRouteId", 
configuration.getMessageReceiverRouteId());
     }
 
     @Test
@@ -180,6 +183,7 @@ public class SmppConfigurationTest {
         assertEquals(config.getSessionStateListener(), 
configuration.getSessionStateListener());
         assertEquals(config.getProxyHeaders(), 
configuration.getProxyHeaders());
         assertEquals(config.isSingleDLR(), configuration.isSingleDLR());
+        assertEquals(config.getMessageReceiverRouteId(), 
configuration.getMessageReceiverRouteId());
     }
 
     @Test
@@ -217,6 +221,7 @@ public class SmppConfigurationTest {
                           + "reconnectDelay=5000, "
                           + "maxReconnect=2147483647, "
                           + "lazySessionCreation=false, "
+                          + "messageReceiverRouteId=null, "
                           + "httpProxyHost=null, "
                           + "httpProxyPort=3128, "
                           + "httpProxyUsername=null, "
@@ -266,5 +271,6 @@ public class SmppConfigurationTest {
         config.setPduProcessorQueueCapacity(80);
         config.setPduProcessorDegree(1);
         config.setSingleDLR(true);
+        config.setMessageReceiverRouteId("testMessageReceiverRouteId");
     }
 }
diff --git 
a/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/integration/SmppTRXProducerIT.java
 
b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/integration/SmppTRXProducerIT.java
new file mode 100644
index 00000000000..b2662b8659a
--- /dev/null
+++ 
b/components/camel-smpp/src/test/java/org/apache/camel/component/smpp/integration/SmppTRXProducerIT.java
@@ -0,0 +1,148 @@
+/*
+ * 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.integration;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.ExchangePattern;
+import org.apache.camel.FailedToStartRouteException;
+import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.smpp.SmppConstants;
+import org.apache.camel.component.smpp.SmppMessageType;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.jsmpp.examples.SMPPServerSimulator;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.fail;
+
+class SmppTRXProducerIT extends CamelTestSupport {
+    private static final Thread SMPP_SERVER_SIMULATOR = new Thread(() -> 
SMPPServerSimulator.main(null));
+
+    @EndpointInject("mock:result")
+    private MockEndpoint result;
+
+    @EndpointInject("direct:start")
+    private Endpoint start;
+
+    @EndpointInject("mock:result2")
+    private MockEndpoint result2;
+
+    @EndpointInject("direct:start2")
+    private Endpoint start2;
+
+    @BeforeAll
+    public static void runSMPPServerSimulator() {
+        SMPP_SERVER_SIMULATOR.start();
+    }
+
+    @AfterAll
+    public static void stopSMPPServerSimulator() {
+        SMPP_SERVER_SIMULATOR.interrupt();
+    }
+
+    @Test
+    void sendSubmitSMInOnly() throws Exception {
+        result.expectedMessageCount(1);
+
+        Exchange exchange = start.createExchange(ExchangePattern.InOnly);
+        exchange.getIn().setBody("Hello SMPP World!");
+
+        template.send(start, exchange);
+
+        MockEndpoint.assertIsSatisfied(context);
+        Exchange resultExchange = result.getExchanges().get(0);
+        assertEquals(SmppMessageType.DeliveryReceipt.toString(), 
resultExchange.getIn().getHeader(SmppConstants.MESSAGE_TYPE));
+        assertEquals("Hello SMPP World!", resultExchange.getIn().getBody());
+        assertNotNull(resultExchange.getIn().getHeader(SmppConstants.ID));
+        assertEquals(1, 
resultExchange.getIn().getHeader(SmppConstants.SUBMITTED));
+        assertEquals(1, 
resultExchange.getIn().getHeader(SmppConstants.DELIVERED));
+        
assertNotNull(resultExchange.getIn().getHeader(SmppConstants.DONE_DATE));
+        
assertNotNull(resultExchange.getIn().getHeader(SmppConstants.SUBMIT_DATE));
+        assertNull(resultExchange.getIn().getHeader(SmppConstants.ERROR));
+
+        assertNotNull(exchange.getIn().getHeader(SmppConstants.ID));
+        assertEquals(1, 
exchange.getIn().getHeader(SmppConstants.SENT_MESSAGE_COUNT));
+    }
+
+    @Test
+    void testTypoInMessageReceiverRouteId() throws Exception {
+        try {
+            context.addRoutes(new RouteBuilder() {
+                @Override
+                public void configure() {
+                    from("direct:start2")
+                            
.to("smpp://j@localhost:8056?password=jpwd&systemType=producer" +
+                                
"&messageReceiverRouteId=TYPO_IN_MessageReceiverRouteId");
+                }
+            });
+
+            fail("FailedToStartRouteException expected!");
+
+        } catch (FailedToStartRouteException expected) {
+            assertEquals("java.lang.IllegalArgumentException:" +
+                         " No route with id 'TYPO_IN_MessageReceiverRouteId' 
found!",
+                    expected.getCause().getMessage());
+        }
+    }
+
+    @Test
+    void testFindRouteAfterStartupToo() throws Exception {
+        result2.expectedMessageCount(1);
+
+        context.addRoutes(new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:start2")
+                        
.to("smpp://j@localhost:8056?password=jpwd&systemType=producer" +
+                            
"&messageReceiverRouteId=testMessageReceiverRouteId2");
+            }
+        });
+
+        Exchange exchange = start2.createExchange(ExchangePattern.InOnly);
+        exchange.getIn().setBody("Hello SMPP World!");
+
+        template.send(start2, exchange);
+
+        MockEndpoint.assertIsSatisfied(context);
+    }
+
+    @Override
+    protected RoutesBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:start")
+                        
.to("smpp://j@localhost:8056?password=jpwd&systemType=producer" +
+                            
"&messageReceiverRouteId=testMessageReceiverRouteId");
+
+                from("direct:messageReceiver").id("testMessageReceiverRouteId")
+                        .to("mock:result");
+
+                
from("direct:messageReceiver2").id("testMessageReceiverRouteId2")
+                        .to("mock:result2");
+            }
+        };
+    }
+}

Reply via email to