Sms 接收到JSMPP-MO,但短消息字节数组为空
我在使用jsmpp处理来自特定SMSC连接的MO请求时遇到问题 所讨论的连接是正确绑定的,可以完美地满足MT请求;但是,当我们得到接收到MO的回调时,PDU的short_message属性读取为空。下面是我在日志中看到的打印件:Sms 接收到JSMPP-MO,但短消息字节数组为空,sms,smpp,jsmpp,Sms,Smpp,Jsmpp,我在使用jsmpp处理来自特定SMSC连接的MO请求时遇到问题 所讨论的连接是正确绑定的,可以完美地满足MT请求;但是,当我们得到接收到MO的回调时,PDU的short_message属性读取为空。下面是我在日志中看到的打印件: 02:05:47,255 DEBUG [SmppConnectionManagerImpl] onAcceptDeliverSm: From: 9178386944 To: 2184 ESM: 0 Msg: 02:05:47,255 DEBUG [SmppConnect
02:05:47,255 DEBUG [SmppConnectionManagerImpl] onAcceptDeliverSm: From: 9178386944 To: 2184 ESM: 0 Msg:
02:05:47,255 DEBUG [SmppConnectionManagerImpl] BYTE ARRAY LENGTH
02:05:47,256 DEBUG [SmppConnectionManagerImpl] 0
02:05:47,256 DEBUG [SmppConnectionManagerImpl] COMMAND STATUS
02:05:47,256 DEBUG [SmppConnectionManagerImpl] 0
02:05:47,256 DEBUG [SmppConnectionManagerImpl] DATA CODING
02:05:47,256 DEBUG [SmppConnectionManagerImpl] 0
02:05:47,256 DEBUG [SmppConnectionManagerImpl] COMMAND LENGTH
02:05:47,256 DEBUG [SmppConnectionManagerImpl] 114
02:05:47,256 DEBUG [SmppConnectionManagerImpl] -
02:05:47,256 DEBUG [SmppConnectionManagerImpl]
02:05:47,256 DEBUG [SmppConnectionManagerImpl] -
02:05:47,256 DEBUG [SmppConnectionManagerImpl]
02:05:47,256 DEBUG [SmppConnectionManagerImpl] -
02:05:47,256 DEBUG [SmppConnectionManagerImpl]
02:05:47,256 DEBUG [SmppConnectionManagerImpl] -
02:05:47,256 DEBUG [SmppConnectionManagerImpl]
02:05:47,256 DEBUG [SmppConnectionManagerImpl] -
02:05:47,256 DEBUG [SmppConnectionManagerImpl]
02:05:47,256 DEBUG [SmppConnectionManagerImpl] ========
以及产生它的代码:
LOG.debug("onAcceptDeliverSm: From: {} To: {} ESM: {} Msg: {}", deliverSm.getSourceAddr(),
deliverSm.getDestAddress(), deliverSm.getEsmClass(), new String(deliverSm.getShortMessage()));
LOG.debug("BYTE ARRAY LENGTH");
LOG.debug(Integer.toString(deliverSm.getShortMessage().length));
LOG.debug("COMMAND STATUS");
LOG.debug(Integer.toString(deliverSm.getCommandStatus()));
LOG.debug("DATA CODING");
LOG.debug(Integer.toString(new Byte(deliverSm.getDataCoding()).intValue()));
LOG.debug("COMMAND LENGTH");
LOG.debug(Integer.toString(deliverSm.getCommandLength()));
LOG.debug("-");
LOG.debug(new String(deliverSm.getShortMessage(), Charset.forName("US-ASCII")));
LOG.debug("-");
LOG.debug(new String(deliverSm.getShortMessage(), Charset.forName("ISO-8859-1")));
LOG.debug("-");
LOG.debug(new String(deliverSm.getShortMessage(), Charset.forName("UTF-16BE")));
LOG.debug("-");
LOG.debug(new String(deliverSm.getShortMessage(), Charset.forName("UTF-16LE")));
LOG.debug("-");
LOG.debug(new String(deliverSm.getShortMessage(), Charset.forName("UTF-16")));
如你所见,我们正在从SMSC获取数据;但是,当我们尝试读取短消息时,它返回一个空字节数组。其他字段(如源和目标地址)返回正常
此外,当我们让人们发送可变长度的MOs时,命令长度是可变的——这表明数据不知何故存在,只是由于某种原因无法读取
如果您能提供任何可能导致短消息字节数组变为空白的线索,并通过配置设置尝试解决问题,我们将不胜感激。也有同样的问题。我需要解决的只是升级到JSMPP2.2.jar 此外,代码无法区分SMSC_交付_接收类型消息和MO类型消息 当我升级到新的库时,所有这些“bug”都被修复了
谢谢。这最终成为了有关SMSC打包其响应方式的问题。在他们的情况下,不是在PDU的短消息部分发送消息数据,而是在PDU的可选消息有效负载部分发送消息数据 下面是我们用来解析消息的代码
private String getMessageBody(DeliverSm deliverSm) {
byte[] bytes = Optional.ofNullable(deliverSm.getOptionalParameter(OptionalParameter.Message_payload.class))
.map(x -> x.getValue())
.filter(x -> x != null && x.length > 0)
.orElse(deliverSm.getShortMessage());
return Optional.ofNullable(bytes)
.filter(x -> x != null && x.length > 0)
.map(x -> new String(x, UTF8))
.orElse("");
}