我创建自己的异常,该异常将存储多个字段(在示例中仅存储一个字段)。在骆驼中,我捕获了Java异常并将其传递给包装器。在该方法中,我取出所需的内容并将其保存为Exchange中的myException。在另一个地方,骆驼捕获此异常并将其传递给要获取特定字段的方法。问题在于myException.getMessage()始终抛出NullPointerException。如果我保存Optional.ofNullable(myException).map(Throwables :: getStackTraceAsString),它将返回超级消息(消息),但是我需要一个特定字段。
public class MyException extends Exception {
private String message;
public MyException(String message){
super(message);
this.message = message + "something";
}
public String getMessage() {
return message;
}
}
<doCatch>
<exception>java.lang.someException</exception>
<process ref="wrapper"/>
</doCatch>
public class Wrapper implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
Exception exception = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
String something = StringUtils.substringBetween(exception.toString(), "(", ")");
MyException myException = new MyException(something);
exchange.setException(myException);
}
}
<doCatch>
<exception>com.exception.MyException</exception>
<to id="createMessageDTO" uri="bean:messageDTOBuilder?method=newMessage"/>
...
</doCatch>
public MessageDTO newMessage(@ExchangeException MyException myException) {
return MessageDTO
.builder()
.message(Optional.ofNullable(myException.getMessage()))
.build();
}
我怀疑标记仅存储Exception类所具有的内容,其余部分被截断。也许有某种方法可以纠正它,但是我缺乏知识阻止了我。我承认我只是从骆驼开始冒险。