Camel 在onException()中使用Bean.onWhen()

fhity93d  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(119)

我正在使用这本书, 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; 
        }
    }
}
huwehgph

huwehgph1#

bean选项已从Camel 3的Camels BeanLanguage中移除。您可以在Camel 2.x docs中找到它(已过时)。

这仅仅意味着

.onWhen(bean(FailureBean.class, "httpAuthFail"))

必须使用method选项

.onWhen(method(FailureBean.class, "httpAuthFail"))

Camel in Action的第2版在Camel 3.x之前发布,因此一些代码示例必须针对Camel 3.x进行修改Camel migration guide在这方面非常有用。

相关问题