2011-09-16 282 views
0

時,這一問題與前一個Apache的駱駝CXF空響應:Apache Camel multicast, exception and Aggregation strategy處理異常

我覺得問上一個問題,當我missunderstood問題。

我嘗試處理我在路由中拋出的異常。

.filter(not(successResponsePredicate)) 
    .to("log:com.sdmo.Error?level="+LOG_LEVEL) 
    .transform(simple("Erreur lors de l'appel copyItem")) 
    .process(new ConvertCartResponseProcessor()) 
    .throwException(new Exception("copyItemError")) 
.end() 

唯一的例外是通過這個代碼來處理:

onException(java.lang.Exception.class).handled(true).inOut("direct:thrownError"); 
from("direct:thrownError") 
    .to("log:com.sdmo.output?level="+LOG_LEVEL); 

我的路線是由CXF端點開始,但在異常處理途徑實現的,身體回到自己的WS客戶端是空的。

我對調試模式和日誌進行了幾次檢查,以確保異常處理代碼設置了響應,並且如果我通過簡單類型替換正文(POJO類型),發送回覆時出現解組錯誤。

最後一行的回覆之前記錄的展示身體是明確界定:

INFO: Exchange[ExchangePattern:InOut, BodyType:com.access_commerce.cameleonws.cart.AddXMLResponse, Body:[email protected]] 

我想這有什麼不對我使用的InOut圖案或類似的...

+0

嘗試在onException子句中調用setBody(常量(「ERROR」))或變換(常量(「ERROR」)),而不是.inOut(...)。這至少起作用嗎? –

+0

CXF端點處於POJO模式,如果我有這種轉換,我得到一個編組錯誤:注意:Interceptor for {http://www.access-commerce.com/cameleonWS/cart/}CartService#{http: www.access-commerce.com/cameleonWS/cart/}addXML引發異常,現在展開爲 org.apache.cxf.interceptor.Fault:編組錯誤:類java.io.ByteArrayInputStream及其任何超類都是已知的上下文。 – Franch

回答

0

降handles()方法調用。它可以防止滲透到CXF端點的異常。

+0

我不想將異常傳播到cxf端點,我想封裝它並以wsdl的響應格式返回錯誤 – Franch

+0

如果這就是您真正想要做的事情(wrap Exception(「copyItemError」))添加一個處理器在你的異常路徑的末尾,包裝到我認爲是JAXB帶註釋的對象中。然後駱駝假設你想要返回該對象,並且始發端點將它轉換爲XML以返回。該過程(新的ConvertCartResponseProcessor())。throwException()看起來像一個反模式。如果響應處理器爲您提供了要返回的bean,請移除throwException()。 –

+0

我已經嘗試在異常路由上放置進程(新的ConvertCartResponseProcessor()),並且行爲相同:空響應。使用throw可以中斷當前的多播。 – Franch