Camel - 处理器中的设置值,但在处理器外部为空

时间:2017-03-29 10:35:04

标签: java apache-camel

我试图在Apache Camel处理器中填充ApplicationScoped POJO。我在处理器内部设置并检查值是否已设置,但在外部,处理器POJO为空。

//Get login token from our service      
    from(inputEndpoint).routeId("getAuthToken").streamCaching()
        .process(new Processor() {

            @Override
            public void process(Exchange arg) throws Exception {
                arg.getOut().setBody(new LoginVM("admin", "admin", true));

            }
        })
    .marshal().json(JsonLibrary.Jackson, true)
    .setHeader(Exchange.HTTP_METHOD, constant("POST"))
    .setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
    .to("http://localhost:8080/api/authenticate")
    .log("RESULT FROM AUTH ENDPOINT IS ${body}") // CORRECT RESULT
    .unmarshal().json(JsonLibrary.Jackson, AuthToken.class)
    .process(new Processor() {

        @Override
        public void process(Exchange exch) throws Exception {               
            authToken=exch.getIn().getBody(AuthToken.class);
            System.out.println("VALUE IS " + authToken.getId_token()); // CORRECT RESULT - SET VALUE OF authToken
            exch.getOut().setBody(authToken);
        }
    })
    .log("Bearer is :" + authToken.getId_token()) //TODO - this shouldnt be null!

我的AuthToken POJO

import javax.enterprise.context.ApplicationScoped;
import javax.inject.Singleton;


@Singleton
public class AuthToken {

    String id_token;

    public String getId_token() {
        return id_token;
    }

    public void setId_token(String id_token) {
        this.id_token = id_token;
        System.out.println("The value in AuthToken is " + this.id_token);
    }

}

我不明白为什么它失去了它的价值。

1 个答案:

答案 0 :(得分:0)

此代码 .log("Bearer is :" + authToken.getId_token())

仅在Camel启动时执行一次并创建路线。

如果您想进行动态日志记录,请使用日志中的简单语言EIP:http://camel.apache.org/simple

从简单中,您可以调用要记录的消息正文上的方法

.log("xxx ${body.getId_token()}");