【问题标题】:spring integration modify error message payloadspring 集成修改错误消息有效负载
【发布时间】:2014-02-11 07:18:51
【问题描述】:

对于我的 Spring 集成流程中的错误处理,我想在服务激活器中捕获异常,该服务激活器从聚合器接收其输入,以便它处理消息集合。当整个集合作为消息有效负载发送时引发异常。相反,我想将引发异常的实际项目作为错误消息的内容。

public Collection<File> move(Collection<File> files){
    ...
    //process all files
    for(File file : files){         
        if(file.getName().equals("file-2.done")){
            throw new RuntimeException("SOMETHING WENT WRONG");
        }

        ... process the file
    }

我的异常处理程序希望检索导致错误的文件

File file = (File) message.getPayload().getFailedMessage().getPayload();

但在这种情况下,一个集合作为有效负载而不是单个文件发送。任何帮助将不胜感激。

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    框架不知道您的 move 方法内部发生了什么。

    你可以这样做......

    public classs MyFileFailureException extends RuntimeException {
        private final File file;
        public MyFileFailureException(String msg, File file) {
            super(msg);
            this.file = file;
        }
        public File getFailedFile() {return this.file}
    }
    

    然后在 move()...

    throw new MyFileFailureException("message", file);
    

    然后,使用...访问它

    message.getPayload().getCause().getFailedFile().
    

    【讨论】:

    • 好吧,这是有道理的,但在这种情况下,集合将由框架传入,然后另外指定失败的文件并在异常处理程序中检索该文件。是这个主意吗?基本上听起来我们无法修改异常消息的有效负载,但可以添加更多内容。
    • 正确;但这不是开销;对象(集合)已经存在; ErrorMessage 只是获得对它的引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 2017-08-23
    • 2020-04-05
    • 1970-01-01
    相关资源
    最近更新 更多