Я создаю свое собственное исключение, в котором будут храниться несколько полей (в примерах только одно поле). В верблюде я ловлю исключение Java и передаю его оболочке. В методе я вынимаю то, что мне нужно, и сохраняю это в Exchange как myException. В другом месте верблюд ловит это исключение и передает его методу, который должен получить определенное поле. Проблема в том, что myException.getMessage () всегда генерирует исключение NullPointerException. Если я сохраню Optional.ofNullable (myException) .map (Throwables :: getStackTraceAsString), он вернет то, что перешло в super (message), но мне нужно определенное поле.
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, а остальное усекается. Может быть, есть какой-то способ исправить это, и мое отсутствие знаний блокирует меня. Я признаю, что я только начинаю свое приключение с Верблюдом.