使用SMPP服务器发送短信时出现“无效的源地址”异常

问题描述:

过去8个月一切正常,我们突然间开始出现此错误。使用SMPP服务器发送短信时出现“无效的源地址”异常

我们在Oracle EM控制台中配置了SMPP驱动程序属性,并使用与Oracle SOA服务器集成的UMS发送SMS。

找到了一个链接与此相关的错误,但它并不能帮助:

https://support.nowsms.com/discus/messages/485/1176.html

[2017-10-17T10:33:16.806 + 05:30] [WLS_SOA] [错误] [SDP-25700] [oracle.sdp.messaging.driver.smpp] [tid:Workmanager:,Version:0, Scheduled = false,Started = false,等待时间:0 ms \ n] [userId: OracleSystemUser] [ecid: 49d20b62a8084325:-5336381e:15f247fea2f:-8000-000000000001c322,0] [APP: usermessagingdriver-smpp]一个意外的exce ption被抓[[ oracle.sdp.messaging.driver.DriverException:无效源地址并[a]在 oracle.sdpinternal.messaging.driver.smpp.SMPPDriver.send(SMPPDriver.java:1073) 在 预言.sdpinternal.messaging.driver.smpp.SMPPDriver.send(SMPPDriver.java:3268) 在 oracle.sdpinternal.messaging.driver.smpp.SMPPDriver.send(SMPPDriver.java:2849) 在 oracle.sdpinternal.messaging .driver.smpp.SMPPDriver.send(SMPPDriver.java:2724) 在 oracle.sdpinternal.messaging.driver.smpp.SMPPManagedConnection.send(SMPPManagedConnection.java:95) 在 oracle.sdpinternal.messaging.driver.DriverConnectionIm pl.send(DriverConnectionImpl.java:41) 处 sun.reflect oracle.sdpinternal.messaging.dispatcher.DriverDispatcherBean.onMessage(DriverDispatcherBean.java:296) 在sun.reflect.GeneratedMethodAccessor1629.invoke(未知来源)。 DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606)at com.bea.core.repackaged.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils。的java:310) 在 com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182) 在 com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethod Invocation.proceed(ReflectiveMethodInvocation.java:149) 在 com.bea.core.repackaged.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) 在 com.bea.core.repackaged.springframework。 aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171) 在 com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131) 在 com.bea.core。 repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119) at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInv ocation.proceed(ReflectiveMethodInvocation.java:171) at com.bea.core.repackaged.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at com.sun.proxy。$ Proxy532.onMessage(未知来源)在 oracle.sdpinternal.messaging.dispatcher.DriverDispatcherBean_xfokw2_MDOImpl。__WL_invoke(未知 源)在 weblogic.ejb.container.internal.MDOMethodInvoker.invoke(MDOMethodInvoker.java:35) 在 oracle.sdpinternal.messaging.dispatcher.DriverDispatcherBean_xfokw2_MDOImpl.onMessage(未知 源)在 oracle.sdpinternal .messaging.jmsmessagereceiver.ResourceAdapterImpl $ RaMessageListener.onMessage在 oracle.sdpinternal.messaging.jms.QueueWorker.run(QueueWorker.java:73)(ResourceAdapterImpl.java:167) 在 weblogic.work.j2ee.J2EEWorkManager $ WorkWithListener .run(J2EEWorkManager.java:184) at weblogic.work.DaemonWorkThread.run(DaemonWorkThread.java:30)

]] [2017-10-17T10:33:16.807 + 05:30] [WLS_SOA] [通知] [SDP-26003] [oracle.sdp.messaging.driver.dispatcher] [tid: Workmanager: :0,Scheduled = false,Started = false,等待时间: 0 ms \ n] [userId:OracleSystemUser] [ecid: 49d20b62a8084325:-5336381e:15f247fea2f:-8000-000000000001c322,0] [APP: usermessagingdriver-smpp ]调度员发送带有ID的消息: eb50c4cdc0a800ab12d5fbbdbbbbd46a。

网络日志(使用Wireshark的):

enter image description here

我们想通了,并解决这个问题。在此发布解决方案。也许它可以帮助别人,节省宝贵的时间。

在Oracle EM控制台中配置的SMPP驱动程序存在一个缺陷,即使您从驱动程序配置中传递它,源地址和缺省源地址也始终为空。

这是由于在SMSC多个源地址和我们的系统传递null在源地址字段 值。由于此SMSC不能 识别正确的源地址并抛出“无效源 地址”例外。

如果在SMSC上配置单/静态源地址,则您可以通过 传递空值,并且SMSC将自动识别源地址。