我正在使用这本书, Camel 在行动第二版。它有一个例子,我正在使用一个指南,以捕捉一个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条答案
按热度按时间huwehgph1#
bean
选项已从Camel 3的Camels BeanLanguage中移除。您可以在Camel 2.x docs中找到它(已过时)。这仅仅意味着
您必须使用
method
选项Camel in Action的第2版在Camel 3.x之前发布,因此一些代码示例必须针对Camel 3.x进行修改。Camel migration guide在这方面非常有用。