Apache camel SimpleBuilder在camel中的使用

Apache camel SimpleBuilder在camel中的使用,apache-camel,ognl,Apache Camel,Ognl,我有以下处理器,当我从我的路线运行它时,我得到以下错误。我知道exchange正文不是空的,您可以在下面的日志中看到它。我在这里使用SimpleBuilder有什么问题 public class UpdateCustomerProcessor implements Processor { public static final Logger log = LoggerFactory.getLogger(UpdateCustomerProcessor.class); public

我有以下处理器,当我从我的路线运行它时,我得到以下错误。我知道exchange正文不是空的,您可以在下面的日志中看到它。我在这里使用SimpleBuilder有什么问题

public class UpdateCustomerProcessor implements Processor {
    public static final Logger log = LoggerFactory.getLogger(UpdateCustomerProcessor.class);

    public void process(Exchange exchng) throws Exception {
        Customer c = (Customer) exchng.getIn().getBody(Object[].class)[0];
        System.out.println("Updating customer " + c.getFirstName() + " " + c.getLastName());
        System.out.println(SimpleBuilder.simple("Hello ${body.getFirstName()}").evaluate(exchng, String.class));
        exchng.getOut().setBody(new Object[] {});
    }

}

log->Updating customer aaa bbb
error-> org.apache.cxf.interceptor.Fault: Failed to invoke method: .getFirstName() on null due to: org.apache.camel.language.bean.RuntimeBeanExpressionException: Failed to invoke method: getFirstName() on null
我无法理解“null”异常,因为exchangein似乎已被填充。但是,您的表达式看起来不正确-因为您的exchange.in似乎包含一个数组,所以应该是:


SimpleBuilder.simple(“Hello${body[0].firstname}”).evaluate(exchng,String.class))

谢谢,它按照您建议的方式工作。然而,我可以得到以下信息。Customer c=(Customer)exchng.getIn().getBody(Customer.class);(不带数组表示法)。但我似乎应该在SimpleBuilder中使用数组表示法来表示此有效负载。