#spring-boot #apache-camel
Вопрос:
Я использую эту книгу «Верблюд в действии 2-е издание». В нем приведен пример, в котором я использую руководство, чтобы поймать ошибку http и решить, что такое код состояния http. Однако я получаю сообщение об ошибке, указывающее на отсутствие метода «боб».
Пример доступен здесь, часть ошибок (p510) https://raw.githubusercontent.com/camelinaction/camelinaction2/master/errata.txt
Кстати, описание ошибки в ошибках-это не моя проблема. Я просто не могу скомпилировать код, когда у меня есть bean() внутри onWhen().
Что я здесь делаю не так?
EmailRouter.java
.doTry()
.log("Initial Header: ${headers.Authorization} ${body}")
.to("https://test.net/rest/api/email")
.doCatch(HttpOperationFailedException.class)
.onWhen(bean(FailureBean.class, "httpAuthFail")) // Causes "The method bean(Class<FailureBean>, String) is undefined for the type EmailRouter"
.log("Before InOnly: ${headers.Authorization} ${body}")
.to("direct:dead?exchangePattern=InOnly")
.setBody(simple("${headers.MessageBody}"))
.setHeader("Authorization", exchangeProperty("token"))
.log("Newly Set Header: ${headers.Authorization} ${body}")
.to("https://test.net/rest/api/email")
.end()
FailureBean.java
package com.bw.beans;
import java.util.Map;
import org.apache.camel.ExchangeException;
import org.apache.camel.Headers;
import org.apache.camel.http.base.HttpOperationFailedException;
public class FailureBean {
public static boolean httpAuthFail(@ExchangeException HttpOperationFailedException cause) {
int code = cause.getStatusCode();
if (code == 401) {
return true;
}
else {
return false;
}
}
}
Ответ №1:
bean
Опция была удалена из языка верблюдов в Camel 3. Вы можете найти его (устаревший) в документах Camel 2.x.
Это просто означает, что вместо
.onWhen(bean(FailureBean.class, "httpAuthFail"))
вы должны использовать method
опцию
.onWhen(method(FailureBean.class, "httpAuthFail"))
2-е издание Camel in Action было выпущено до Camel 3.x, поэтому некоторые примеры кода должны быть адаптированы для Camel 3.x. Руководство по миграции верблюдов может быть очень полезно для этого.