Nullpointerexception in MessageBroker


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.

谁能给出最好的解决方案?

msgBroker 要么为 null,要么传递给 msgBroker.routeMessageToService(( 的参数之一为 null。如果在捕获异常时没有打印堆栈跟踪,则很难判断问题出在哪里 - 有了它,它将准确识别哪个变量在不应该为空时为空。

从你的代码来看,考虑到msg不能为null(或者异常会更早发生(,要么msgBroker为null,要么传递给msgBroker的null正在造成损害,要么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;
        }
    }
}

唯一可能的解释是你的msgBroker是NULL.msg显然存在(否则你会更早得到错误(,并且null是路由消息到服务的第二个参数的允许值。

我在应用程序中遇到了同样的问题。空指针异常是由于消息配置.xml中的安全约束造成的。在消息配置.xml文件中删除目标的安全约束后,它对我有用。

相关内容

  • 没有找到相关文章

最新更新