1

这是一个非常奇怪的行为:我有一个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

4

0 回答 0