2015-04-18 9 views
0

Я пытаюсь запустить AutoReconnectGateway пример из библиотеки jsmpp. Моя основная задача - держать сеанс smpp всегда подключенным к серверу smpp.jsmpp SMPPSession - IOException при чтении: null

Функция отправки и доставки работает хорошо, я могу отправлять и получать сообщения, но через некоторое время (~ 1 минута), когда действие связи прекращается.

10:20:49.117 [ActiveMQ Session Task-1] INFO org.jsmpp.session.SMPPSession - Connected 

10:20:49.132 [Thread-4] INFO org.jsmpp.session.SMPPSession - Starting PDUReaderWorker with processor degree:3 ... 

10:20:49.888 [Thread-5] INFO org.jsmpp.session.SMPPSession - Starting EnquireLinkSender 

10:20:50.284 [pool-2-thread-1] INFO ru.ts.oss.alertsmanager.SmsProcessorThread - SMS f46e6945 sent to 79663256299 with Message=Test Message - 1 

10:20:55.634 [pool-3-thread-3] INFO ru.ts.oss.alertsmanager.SmsMessageReceiverListenerImpl - Receiving delivery receipt for message 'F46E6945 ' from xxx to yyy : id:4100876613 sub:001 dlvrd:001 submit date:1504181220 done date:1504181121 stat:DELIVRD err:000 text:Test Message - 1 

10:21:49.926 [Thread-4] INFO ru.ts.oss.alertsmanager.gateway.SmsGateway - Session closed 

10:21:49.927 [Thread-6] INFO ru.ts.oss.alertsmanager.gateway.SmsGateway - Schedule reconnect after 5000 millis 

10:21:49.927 [Thread-4] INFO org.jsmpp.session.SMPPSession - PDUReaderWorker stop 

10:21:51.675 [Thread-5] INFO org.jsmpp.session.SMPPSession - EnquireLinkSender stop 

Для отладки я положил «e.printStackTrace();» в SMPPSession классовой линии 586

 } catch (SocketTimeoutException e) { 
      notifyNoActivity(); 
     } catch (IOException e) { 
      logger.warn("IOException while reading: {}", e.getMessage()); 
      e.printStackTrace(); // God please don't forget about me! 
      close(); 
     } 
    } 

Это получить от StackTrace

3706 [PDUReaderWorker: [email protected]] WARN org.jsmpp.session.SMPPSession - IOException while reading: null 

java.io.EOFException 
    at java.io.DataInputStream.readInt(DataInputStream.java:392) 
    at org.jsmpp.DefaultPDUReader.readPDUHeader(DefaultPDUReader.java:40) 
    at org.jsmpp.session.SMPPSession$PDUReaderWorker.readPDU(SMPPSession.java:619) 
    at org.jsmpp.session.SMPPSession$PDUReaderWorker.run(SMPPSession.java:602) 

Также я пытался изменить параметры EnquireLinkTimer и TransactionTimer, нюхать трафик с tcpdumper, изменение версии библиотеки jsmpp, прочитать StackOverflow :) но было не повезло, я все равно получаю такое же исключение, когда нет активности.

Большое спасибо.

+0

Вы должны включить код, в котором вы подозреваете, что ваше исключение возникает. –

+0

@StephenReindl Я использую стандартный пример кода из jsmpp lib. [https://code.google.com/p/jsmpp/source/browse/trunk/src/java/examples/org/jsmpp/examples/gateway/AutoReconnectGateway.java] – Vaporizer

ответ

0

В 2.2.1 это исправлено. Но если по какой-то причине вам нужно использовать 2.2.0-SNAPSHOT, где проблема существует вы можете сделать ниже

Перейти к классу нарушившей OptionalParameters и добавил проверку параметров в методе GET, как показано ниже:

@SuppressWarnings("unchecked") 
public static <U extends OptionalParameter> U get(Class<U> tagClass, OptionalParameter[] parameters) { 
    if (parameters != null) { **//THIS IS THE CHANGE** 
     for (OptionalParameter i : parameters) { 

       if (i.getClass() == tagClass) { 
        return (U) i; 
       } 
      } 
    } 
    logger.info("optional tag " + tagClass + " not found"); 
    return null; 
} 

Я не уверен, что это лучшее исправление, но оно позволяет правильно использовать примеры.

 Смежные вопросы

  • Нет связанных вопросов^_^