Nullpointerexception в MessageBroker - PullRequest
       40

Nullpointerexception в MessageBroker

0 голосов
/ 09 июня 2011
while (true) {  

    Message message = consumer.receive();

    if (message != null) {
        if (message instanceof TextMessage) {
        try{
        TextMessage textMessage = (TextMessage) message;
        System.out.println("Received message '"+ textMessage.getText() + "'");
        msg.setTimestamp(System.currentTimeMillis());
        msg.setBody(textMessage.getText());
        msgBroker.routeMessageToService(msg, null);

        } catch(Exception e){
            e.printStackTrace();
        }

        } else {
        break;
        }
    }
}

при попытке запустить это msgBroker.routeMessageToService(msg, null) бросков NullPointerException.

Кто-нибудь может дать лучшее решение?

Ответы [ 3 ]

0 голосов
/ 09 июня 2011

Единственное возможное объяснение состоит в том, что ваш msgBroker имеет значение NULL.msg, очевидно, существует (в противном случае вы получите ошибки раньше), а null - это допустимое значение для второго параметра для routeMessageToService.

0 голосов
/ 20 сентября 2017

У меня была такая же проблема в моем приложении.Исключение из-за нулевого указателя связано с ограничением безопасности в messaging-config.xml.После удаления ограничения безопасности для места назначения в файле messaging-config.xml это сработало для меня.

0 голосов
/ 09 июня 2011

Либо msgBroker имеет значение null, либо один из параметров, передаваемых в msgBroker.routeMessageToService (), равен. Без трассировки стека, выводимой при обнаружении исключения, трудно сказать, в чем проблема - с его помощью он точно определит, какая переменная равна нулю, а не должна.

Из вашего кода, учитывая тот факт, что msg не может быть нулевым (или исключение произошло бы раньше), это то, что либо msgBroker имеет значение null, ноль, передаваемый в msgBroker, наносит ущерб, либо код внутри msgBroker.routeMessageToService () есть ошибка.

Более надежная версия вашего кода:

while (true) {  
    Message message = consumer.receive();
    //Note extra variables being checked here
    if (message != null && msg != null && msgBroker != null) {
        if (message instanceof TextMessage) {
            try{
                TextMessage textMessage = (TextMessage) message;
                System.out.println("Received message '"+ textMessage.getText() + "'");
                msg.setTimestamp(System.currentTimeMillis());
                msg.setBody(textMessage.getText());
                msgBroker.routeMessageToService(msg, null);
            } catch(Exception e){
                e.printStackTrace();
            }
        } else {
            break;
        }
    }
}
...