我有一个使用Velocity模板的驼峰路线,在体内我有一个对象定义如下:
class MailImpl extends AbstractMail{
private BodyContext bodyContext;
public BodyContext getBodyContext() {
return bodyContext;
}
public void setBodyContext(BodyContext bodyContext) {
this.bodyContext = bodyContext;
}
private String test;
public String getTest() {
return test;
}
public void setTest(String test) {
this.test = test;
}
@Override
public String toString() {
return "MailImpl{" +
"bodyContext=" + bodyContext +
'}';
}
}
class BodyContext{
private String value;
public BodyContext(String value) {
this.value = value;
}
public BodyContext() {
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
@Override
public String toString() {
return "BodyContext{" +
"value='" + value + '\'' +
'}';
}
在速度模板中,我想访问MailImpl对象属性,例如我使用$ {body.test}和$ {body.bodyContext.value}但是速度模板不会转换这些值(它返回为字符串$ {body.test}和$ {body.bodyContext.value})。
一个解决方案可能是为模板中需要使用的每个值创建标题,但由于我的路由是动态的(我根据标题选择了速度模板)我想在速度上下文中访问body属性。这有可能吗?
答案 0 :(得分:3)
您可以通过设置邮件标题"CamelVelocityContext"
来设置自定义速度上下文(因为Camel v2.14)。来自Camel的test case:
Map<String, Object> variableMap = new HashMap<String, Object>();
Map<String, Object> headersMap = new HashMap<String, Object>();
headersMap.put("name", "Willem");
variableMap.put("headers", headersMap);
variableMap.put("body", "Monday");
variableMap.put("exchange", exchange);
VelocityContext velocityContext = new VelocityContext(variableMap);
exchange.getIn().setHeader(VelocityConstants.VELOCITY_CONTEXT, velocityContext);
exchange.setProperty("item", "7");
使用以下模板:
Dear ${headers.name}. You ordered item ${exchange.properties.item} on ${body}.
你得到:
Dear Willem. You ordered item 7 on Monday.