2014-02-10 45 views
0

對於我的彈簧集成流程中的錯誤處理,我希望在服務激活器中接收異常,該服務激活器從聚合器接收輸入,以處理消息集合。當完整的集合被作爲消息有效載荷發送時拋出異常。相反,我想將拋出異常的實際項目作爲錯誤消息的內容。彈簧集成修改錯誤消息有效載荷

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'只是獲取對它的引用。 –