У меня возникла проблема с обработкой запросов МО из определенного соединения SMSC с помощью jsmpp.JSMPP - MO Получено, но короткое сообщение Байт-массив Пусто
Соответствующее соединение правильно связано и отлично работает для запросов MT; однако, когда мы получаем обратный вызов, который получен MO, свойство short_message PDU читается как пустое. Вот распечатка из того, что я вижу в журналах:
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; однако, когда мы пытаемся прочитать короткое сообщение, он возвращает пустой массив байтов. Другие поля (например, адрес источника и dest) возвращаются в порядке.
Кроме того, когда у нас есть люди, отправляющие переменную длину MOs, длина команды является переменной - это указывает на то, что данные есть, так или иначе, она просто не может быть прочитана по какой-либо причине.
Поблагодарили бы за какие-либо выводы о том, что может привести к тому, что массив байтов коротких сообщений будет возвращен как пустой и настройки конфигурации, чтобы попытаться исправить проблему.