我试图在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);
}
}
我不明白为什么它失去了它的价值。
答案 0 :(得分:0)
此代码
.log("Bearer is :" + authToken.getId_token())
仅在Camel启动时执行一次并创建路线。
如果您想进行动态日志记录,请使用日志中的简单语言EIP:http://camel.apache.org/simple
从简单中,您可以调用要记录的消息正文上的方法
.log("xxx ${body.getId_token()}");