错误通道中的 MessageHandlingException 消息
MessageHandlingException message in error channel
我已经编写了一个异常处理程序 class 来查看 Spring 集成 errorChannel
类型为 Message<TradeProcessingContext> message
:
的传入消息
@Slf4j
public class ExceptionHandler {
@Autowired
private ExceptionDAO exceptionDAO;
@ServiceActivator(inputChannel = DEFAULT_ERROR_CHANNEL)
public void handleTradeError(Message<TradeProcessingContext> message) {
TradeProcessingContext tradeProcessingContext = message.getPayload();
if (tradeProcessingContext != null) {
//store in database
}
}
}
我有如下处理程序实现:
@Slf4j
@MessageEndpoint
public class ChildHandler extends ParentHandler {
@Autowired
private SomeDAO someDAO;
@ServiceActivator(inputChannel = INPUT_CHANNEL, outputChannel = DEFAULT_ERROR_CHANNEL)
public Message<TradeProcessingContext> handle(final Event event) {
return process(event);
}
@Override
protected TradeDAO getDAO() {
return someDAO;
}
}
调用父级 process()
public abstract class ParentHandler implements Handler {
@Resource
private SomeService service;
public Message<TradeProcessingContext> process(final Event event) {
TradeProcessingContext tradeProcessingContext = new TradeProcessingContext();
//set initial context
try {
List<Trade> trades = getDAO().findByEventId(event.getEventId());
for (Trade trade : trades) {
tradeProcessingContext.setRef(trade.getRef());
Future<TradeProcessingContext> thread = service.doSomething(trade, tradeProcessingContext);
tradeProcessingContext = thread.get();
}
} catch (Exception e) {
return MessageBuilder.withPayload(tradeProcessingContext).build();
}
return null;
}
我知道当 handleTradeError()
中的类型为 Message<MessageHandlingException> message
时我可以获得 org.springframework.messaging.MessageHandlingException: nested exception is java.lang.ClassCastException
。
我如何改进此方法,以便同时处理此类错误或从该类型中提取基础 tradeprocessingContext
?
错误通道获取一个 ErrorMessage,它有一个 Throwable 负载。通常Throwable是一个消息处理异常,原始消息在failedMessage属性,异常在cause.
我已经编写了一个异常处理程序 class 来查看 Spring 集成 errorChannel
类型为 Message<TradeProcessingContext> message
:
@Slf4j
public class ExceptionHandler {
@Autowired
private ExceptionDAO exceptionDAO;
@ServiceActivator(inputChannel = DEFAULT_ERROR_CHANNEL)
public void handleTradeError(Message<TradeProcessingContext> message) {
TradeProcessingContext tradeProcessingContext = message.getPayload();
if (tradeProcessingContext != null) {
//store in database
}
}
}
我有如下处理程序实现:
@Slf4j
@MessageEndpoint
public class ChildHandler extends ParentHandler {
@Autowired
private SomeDAO someDAO;
@ServiceActivator(inputChannel = INPUT_CHANNEL, outputChannel = DEFAULT_ERROR_CHANNEL)
public Message<TradeProcessingContext> handle(final Event event) {
return process(event);
}
@Override
protected TradeDAO getDAO() {
return someDAO;
}
}
调用父级 process()
public abstract class ParentHandler implements Handler {
@Resource
private SomeService service;
public Message<TradeProcessingContext> process(final Event event) {
TradeProcessingContext tradeProcessingContext = new TradeProcessingContext();
//set initial context
try {
List<Trade> trades = getDAO().findByEventId(event.getEventId());
for (Trade trade : trades) {
tradeProcessingContext.setRef(trade.getRef());
Future<TradeProcessingContext> thread = service.doSomething(trade, tradeProcessingContext);
tradeProcessingContext = thread.get();
}
} catch (Exception e) {
return MessageBuilder.withPayload(tradeProcessingContext).build();
}
return null;
}
我知道当 handleTradeError()
中的类型为 Message<MessageHandlingException> message
时我可以获得 org.springframework.messaging.MessageHandlingException: nested exception is java.lang.ClassCastException
。
我如何改进此方法,以便同时处理此类错误或从该类型中提取基础 tradeprocessingContext
?
错误通道获取一个 ErrorMessage,它有一个 Throwable 负载。通常Throwable是一个消息处理异常,原始消息在failedMessage属性,异常在cause.