当服务器发送 CONNECTION_REFUSED_TOPIC_NAME_INVALID 时,Mqtt 客户端在堆栈跟踪中抛出 NPE 下方
[2023-04-12 08:26:07,654][vert.x-eventloop-thread-1][ERROR] ?.(:)-服务器拒绝连接 - 代码:CONNECTION_REFUSED_TOPIC_NAME_INVALID [2023-04-12 08:26:07,655][vert.x-eventloop-thread-1][ERROR] ?.(:)-未处理的异常 java.lang.NullPointerException: 空 在 io.vertx.mqtt.impl.MqttClientImpl.handleConnack(MqttClientImpl.java:1267) ~[vertx-mqtt-4.1.5.jar:4.1.5] 在 io.vertx.mqtt.impl.MqttClientImpl.handleMessage(MqttClientImpl.java:936) ~[vertx-mqtt-4.1.5.jar:4.1.5
当我尝试这个时我得到了异常 - >
客户:
mqttClient.connect(port,host, connect -> {
if (connect.succeeded()) {
log.warn("connected code: {} ", connect.result().code());
mqttClient.subscribe(getTopicMap(), subscribeSentHandler -> {
if (subscribeSentHandler.failed()) {
log.error(" Failed to send subscription request due to ", subscribeSentHandler.cause());
} else {
log.info("Successfully sent subscription request with packet ID: {} "
, subscribeSentHandler.result());
}
});
} else {
log.error("Failed to connect to mqtt server: {}", connect.cause().getMessage());
}
});
服务员:
endpoint.subscribeHandler(subscribe -> {
if(validTopic()){
endpoint.subscribeAcknowledge(subscribe.messageId(), grantedQosLevels);
} else {
endpoint.reject(MqttConnectReturnCode.CONNECTION_REFUSED_TOPIC_NAME_INVALID);
}
});
isValidTopic() 是服务器中的自定义逻辑,我正在检查客户端发送的主题是否在服务器期望的列表中。
我期待这个 NPE 应该在 MQTT 客户端中报告回上面的 subscribeSendHandler,但似乎它只被 vertx.exceptionHandler 捕获。在 exceptionHandler 全局捕获它之前,有什么方法可以捕获这个 NPE 吗?