这是一个非常奇怪的行为:我有一个NoSuchMethodException
(因为编译和运行时库版本不匹配),容器吞下了它,我没有机会抓住它。看看这段代码:
@MessageDriven(...)
public class NotificationReceiver implements MessageListener {
@Override
public void onMessage(Message message) {
try {
String textMessage = ((TextMessage) message).getText();
logger.debug("NOTIFICATION RECEIVED: " + textMessage);
...
String string = rootNode.get("id").asText();
logger.debug("ID: " + string);
} catch (Throwable e) {
logger.debug("ERROR", e);
}
}
此代码用于收听 JSON 格式的文本消息,但每当我收到它时,我从来没有得到点 ID
DEBUG [p: thread-pool-1; w: 12] NotificationReceiver - NOTIFICATION RECEIVED: {"name":"X","id":"123"}
在此之后,我没有收到任何日志...
后来我将这段代码移到另一个无状态 EJB 的@Asynchronous
方法中,并从 MDB 中调用它。然后我确实收到了异常:
DEBUG [Ejb-Async-Thread-10] NotificationReceiverAsync - NOTIFICATION RECEIVED: {"name":"X","id":"123"}
DEBUG [Ejb-Async-Thread-10] NotificationReceiverAsync - ERROR java.lang.NoSuchMethodError: org.codehaus.jackson.JsonNode.asText()Ljava/lang/String;
为什么我在 MDB 中从未收到异常?
应用服务器:Glassfish 3.1.1