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");
+ }
+ };
+ }
+}