这是一个非常奇怪的行为:我有一个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"}
在此之后我没有收到任何日志......
后来我将此代码移到@Asynchronous
方法中的另一个无状态EJB中,并从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期间从未收到异常?
Application Server:Glassfish 3.1.1