Camel-smpp Issue with SMPPsim - apache-camel

I am having camel route like as follows.I am using SMPPSim as simulator...
I am facing following issue.....
Failed delivery for exchangeId: Exhausted after delivery attempt: 6 caught: org.jsmpp.extra.NegativeResponseException: Negative response 0000000b found. Processed by failure processor: FatalFallbackErrorHandler[Channel[sendTo(Endpoint[jms://queue:Error])]]
org.jsmpp.extra.NegativeResponseException: Negative response 0000000b found
at org.jsmpp.session.AbstractSession.validateResponse(AbstractSession.java:215)[233:org.apache.servicemix.bundles.jsmpp:2.1.0.1]
at org.jsmpp.session.AbstractSession.executeSendCommand(AbstractSession.java:271)[233:org.apache.servicemix.bundles.jsmpp:2.1.0.1]
at org.jsmpp.session.SMPPSession.submitShortMessage(SMPPSession.java:320)[233:org.apache.servicemix.bundles.jsmpp:2.1.0.1]
at org.apache.camel.component.smpp.SmppProducer.process(SmppProducer.java:146)[232:org.apache.camel.camel-smpp:2.8.0.fuse-07-15]
at org.apache.camel.impl.converter.AsyncProcessorTypeConverter$ProcessorToAsyncProcessorBridge.process(AsyncProcessorTypeConverter.java:50)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.processor.SendProcessor$2.doInAsyncProducer(SendProcessor.java:114)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.impl.ProducerCache.doInAsyncProducer(ProducerCache.java:284)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:109)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:69)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:99)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:78)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)[89:org.apache.camel.camel-core:2.8.0.fuse-07-15]
If anybody helps...that is greatful..

Error Code 0x0000000B means ESME_RINVDSTADR Invalid destination address. Most likely you are passing a blank value in the destination address field for JSMPP. I faced this error in the past and the destination address was incorrect

Related

Setting handled as true in onException block prevents redeliveries

I am reading a file from a directory, and trying to call an API based on the data in the file.
While trying to handle the exceptions, I am facing an issue. I am trying to configure the onException block to redeliver 3 times, with a delay of 5 seconds. The issue occurs, when I am setting handled(true). This configuration does not redeliver, and stops as soon as the exception occurs.
This is my onException block:
onException(HttpOperationFailedException.class)
.log(LoggingLevel.ERROR, logger, "Error occurred while connecting to API for file ${header.CamelFileName} :: ${exception.message}")
.log("redelivery counter :: ${header.CamelRedeliveryCounter}")
.maximumRedeliveries(3)
.redeliveryDelay(5000)
.handled(true);
How do I do both, i.e. handle as well as redeliver?
Unless you use a buggy version of Camel, the redeliveries are made as expected whatever if it is handled or not.
The only difference between handled or not, is the fact that the result sent back to the client once the retries are exhausted will be either the exception (not handled) or the result of your onException (handled).
Your mistake here, is the fact that you assume that the log EIPs that you have defined in your onException are called for each retry while they are actually called only when the retries are exhausted.
If you want to see the retries in your logs, you can use retryAttemptedLogLevel as next:
onException(HttpOperationFailedException.class)
.maximumRedeliveries(3)
.redeliveryDelay(5000)
.retryAttemptedLogLevel(LoggingLevel.WARN);
You will then get warning messages of type:
Failed delivery for (MessageId: X on ExchangeId: Y). On delivery attempt: Z caught: ...

Fatalfallbackerrorhandler getting called though handled is set to true

I have a camel route as that of below. Though I set handled(true), I am not getting why defaulterrorhandler is calling fatalfallbackerrorhandler after all retries got exhausted.
onException(Exception.class)
.handled(true)
.to("direct:errors") -----> (1)
;
from("direct:errors")
.log("hello world ");
from("timer:testRoute")
.routeId("testRoute_1")
.throwException(new Exception("Dummy Exception"))
.pollEnrich("file://source")
.to(http://localhost:8080)
Logs:
20.04.03 11:46:53.907 INFO ad #6 - timer://testRoute route1 BreadCrumbId=ID-xxxxxx-1585894556662-0-4 | hello world
20.04.03 11:46:53.913 ERROR ad #6 - timer://testRoute mel.processor.DefaultErrorHandler BreadCrumbId=ID-xxxxxx-1585894556662-0-4 | Failed delivery for (MessageId: ID-xxxxxx-1585894556662-0-5 on ExchangeId: ID-xxxxxx-1585894556662-0-4). Exhausted after delivery attempt: 4 caught: java.lang.Exception: Dummy exception. Processed by failure processor: FatalFallbackErrorHandler[Channel[sendTo(direct://errors)]]
If, I comment the line (1) defaulterrorhandler is not calling fatalfallbackerrorhandler.
This look perfectly valid. I even tried it in a test class and it worked as you expect, the timer "generates" a log entry every second.
In fact it is the message forward to direct:errors that is retried 5 times and does not succeed. This is strange because the direct component is part of camel-core.
I would suggest to check your project dependencies. Have you different Camel JARs with different versions on your classpath? If you use Maven, you can try the Maven enforcer plugin to check for classpath conflicts.

RuntimeException - bad second byte at 19

Following is the error log from App in the production. what is the easy way to understand the bad second byte issue here. Provide me any guidance here.
This error getting thrown on different bytes..sometimes at 2 and sometimes at 19 etc. I'm not able to reproduce this issue on simulator. This happens rare but I'm not sure what is causing this issue.
[EDT] 0:23:57,929 - Exception: java.lang.RuntimeException - bad second byte at 19
java.lang.RuntimeException
at java_io_DataInputStream.decode:207
at java_io_DataInputStream.decodeUTF:187
at java_io_DataInputStream.decodeUTF:181
at java_io_DataInputStream.readUTF:177
at com_codename1_io_Util.readUTF:1081
at com__server_Activity.internalize:571
at com_codename1_io_Util.readObject:714
at com_codename1_io_Util.readObject:689
at com_codename1_io_Storage.readObject:264
at com_server_ServerImpl.getActivitiesOfflineMode:1898
at com__forms_AppointmentForm.lambda$onShowCompleted$14:636
at com__forms_AppointmentForm__Lambda_9.run:276
at com_codename1_ui_Display.processSerialCalls:1298
at com_codename1_ui_Display.edtLoopImpl:1242
at com_codename1_ui_Display.mainEDTLoop:1130
at com_codename1_ui_RunnableWrapper.run:120
at com_codename1_impl_CodenameOneThread.run:176
at java_lang_Thread.runImpl:153
It looks like Activity internalize and externalize aren't symmetric and you're writing different data than you're reading leading to corruption. You're doing that before the readUTF line. By the time you reach the readUTF call the data is corrupt hence this error.

CamelExchangeException Invalid Correlation Key on exchange header

Apache Camel is throwing Invalid Correlation Key exception when trying to aggregate messages from my AWS SQS queue.
The messages were placed in the queue using ZipSplitter and they all appear in the queue with matching "parentId" values (which I added using a random uuid as part of the splitting -I've tried CamelSourceFile as well). I get the Exception repeatedly until the retries are exhausted.
My aggregate expression:
from(--queue--).aggregate(header("parentId"), customAggregationStrategy).completionTimeout(3000).processor(new Processor() {...}.to(--next queue--);
There is no logging emitted from my customAggregationStrategy nor from any of the subsequent processors. It fails to aggregate:
... DeadLetterChannel - Failed delivery for (MessageId: ...). On Delivery attempt: 0 caught ...CamelExchangeException: Invalid correlation key. Exchange[ID...]
The delivery attempt is 0 through 9 for my retry attempts.
The infuriating thing is that the code works everywhere but locally...which you think would narrow things down, but neither the exception nor anything else logged sheds any light onto what is going on here.
You could try to use Camel simple language when expressing the correlation key, ie:
.aggregate(simple("${headers.parentId}", customAggregationStrategy)
This way, the exceptions might be silently ignored ?
Did you activate Camel tracer (http://camel.apache.org/tracer.html) to analyse your exchanges and ease the debugging ?
I suspect you have an Exchange which does NOT have the "parentId" header. If you want to skip them, just activate the ignoreInvalidCorrelationKeys option (see http://camel.apache.org/aggregator2.html)

Mule 3.6 with JTDS insertion in to SQl Server

Its a basic mule Database Connector where i am using a JTDS driver to insert in to Database. I get the below error, I observed if i hard code it to some value it gets inserted, But if i want to dynamically send it with payload:'column name' I get the below error. I am using it in the wrong way, i tried everything. Please let me know if i am doing something wrong.
INFO 2015-07-28 14:47:15,461 [[mule_edesk_integration].Pricing_Integration.stage1.02] org.mule.api.processor.LoggerMessageProcessor: ==========>Inserted Data : 22733.0,102520 ,FRR ,1082838 ,USD,28.0
ERROR 2015-07-28 14:47:15,583 [[mule_edesk_integration].Pricing_Integration.stage1.02] org.mule.exception.DefaultMessagingExceptionStrategy:
********************************************************************************
Message : Unable to convert value 22733.0 to NULL. (java.sql.SQLException). Message payload is of type: CaseInsensitiveHashMap
Code : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. Unable to convert value 22733.0 to NULL. (java.sql.SQLException)
net.sourceforge.jtds.jdbc.Support:742 (null)
2. Unable to convert value 22733.0 to NULL. (java.sql.SQLException). Message payload is of type: CaseInsensitiveHashMap (org.mule.api.MessagingException)
org.mule.module.db.internal.processor.AbstractDbMessageProcessor:93 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
java.sql.SQLException: Unable to convert value 22733.0 to NULL.
at net.sourceforge.jtds.jdbc.Support.convert(Support.java:742)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setObjectBase(JtdsPreparedStatement.java:590)
at net.sourceforge.jtds.jdbc.JtdsPreparedStatement.setObject(JtdsPreparedStatement.java:913)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
Use the "from Template" option instead. A little more tedious but works.

Resources