ExpressionEvaluatingRequestHandlerAdvice Spring Integration

时间:2018-05-25 15:02:25

标签: java spring spring-integration

我正在使用Spring Integration 4.3版本开发sftp出站适配器。

我能够成功将文件发送到sftp位置,但我想更新数据库记录以完成状态。

我正在寻找一个选项的ExpressionEvaluatingRequestHandlerAdvice,但是无法弄清楚如何从setOnSuccessExpressionString调用一个方法。

尝试以下选项。

@Bean 
public ExpressionEvaluatingRequestHandlerAdvice afterPut() {

    ExpressionEvaluatingRequestHandlerAdvice advice = new ExpressionEvaluatingRequestHandlerAdvice();
    StandardEvaluationContext context = new StandardEvaluationContext();
    ///context.setBeanResolver((BeanResolver) new SftpPutBean());

    ExpressionParser parser = new SpelExpressionParser();
    try {
        context.registerFunction("mymethod", SftpPutBean.class.getDeclaredMethod("mymethod", new Class[] { String.class }));
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    }

    //String abc 

    String helloWorldReversed = parser.parseExpression("#mymethod(headers['transmissionId'])").getValue(advice, String.class);


    advice.setOnSuccessExpressionString("helloWorldReversed");
    advice.setPropagateEvaluationFailures(true);
    return advice;
}

public void mymethod(String id) { 
    try { 
        TransmissionQueue abc = transmissionQueueDataService.findById(Integer.parseInt(id)); 
        abc.setStatus("COMPLETED"); 
        transmissionQueueDataService.saveTransmissionQueue(abc); 
    } catch (Exception e) { 
        e.printStackTrace(); 
    }
}

1 个答案:

答案 0 :(得分:0)

您需要使用Spring Integration评估上下文工厂注册您的函数。 Instructions here

  

要通过Java Configuration提供SpEL功能,您应该为每个函数声明一个SpelFunctionFactoryBean bean。上面的示例可以配置如下:

@Bean
public SpelFunctionFactoryBean xpath() {
    return new SpelFunctionFactoryBean(XPathUtils.class, "evaluate");
}