2014-02-10 2 views
0

스프링 통합 플로우에서 오류 처리를 위해 애그리 게이터에서 입력을 받아서 메시지 콜렉션을 처리하는 서비스 활성기에서 예외를 catch하고 싶습니다. 전체 콜렉션이 메시지 페이로드로 전송 되더라도 예외가 발생합니다. 대신 나는 예외를 던진 실제 항목을 오류 메시지의 내용으로 넣고 싶습니다.스프링 통합 수정 오류 메시지 페이로드

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(); 

이 발생하지만,이 경우 모음 페이로드가 아닌 하나의 파일로 전송되는 파일을 검색 할 것으로 기대하고있다. 어떤 도움을 주시면 감사하겠습니다.

답변

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} 
} 

... 그런

throw new MyFileFailureException("message", file); 

액세스를 ... 그

message.getPayload().getCause().getFailedFile(). 
+0

좋아 이 경우에는 콜렉션이 프레임 워크에 의해 전달 된 다음 추가적으로 실패한 파일을 지정하고이를 예외 처리기에서 검색합니다 . 그 생각인가요? 기본적으로 우리는 예외 메시지의 페이로드를 수정할 수는 없지만 더 많은 메시지를 추가 할 수 있습니다. – adeelmahmood

+0

정확함; 하지만 오버 헤드가 아닙니다. 개체 (컬렉션)가 이미 있습니다. 'ErrorMessage'는 단지 그것에 대한 참조를 얻습니다. –

관련 문제