2016-12-08 85 views
0

我想拋出一個自定義異常與駱駝中的自定義錯誤消息。我可以通過如下的值設置爲已定義的bean做到這一點:在駱駝中拋出異常與自定義錯誤消息

<CamelContext> 
    <route> 
    <from uri="timer:myTimer"/> 
    <bean ref="myException" method="setErrorCode(errorCode)"/> 
    <bean ref="myException" method="setErrorMessage(errorMessage)"/> 
    <throwException ref="myException"/> 
    </route> 
</CamelContext> 

這種做法是工作的罰款。但是這種方法存在的問題是,只有一個MyException實例,當存在多個併發消費者時,會導致一種競爭條件。

由於這個問題,我想每次創建一個新的excpetion實例。不幸的是,我沒有看到在駝峯路由中創建一個異常實例的方法,爲它設置值然後拋出。

我已經讀過,從駝峯2.17有一個附加屬性message來設置錯誤信息。對我而言,有一些制約因素迫使我堅持使用駱駝2.15

那麼,在駱駝中用錯誤代碼和錯誤信息創建自定義異常的正確方法是什麼?

+0

我不知道,但我認爲你可以原型範圍設置爲'myException'豆,所以每次都會創建新的異常實例。 – Enigo

+0

爲什麼不爲所有異常添加一個OnException處理程序來設置異常,或者將其路由到一些處理錯誤消息的錯誤處理程序路由? –

+0

@Enigo。將範圍設置爲原型後,它將爲每個參考提供新的對象。因此,bean的價值在於bean,而新bean引發異常。 – niyasc

回答

1

只要打電話,創建並拋出一個新的異常

public void blowUp(...) { 
    throw new MyException(...); 
} 
+0

這將工作。但是,調用一個方法來拋出一個異常是否是一個好習慣? – niyasc

+1

是的,或者如果您將Exchange作爲參數傳遞,則在交易所上設置例外 –

0

和什麼有關駱駝throwException bean方法? 定義例外:

<spring:bean id="exception-unimplemented-operation" 
    class="java.lang.Exception"> 
    <spring:constructor-arg name="message" 
     value="Unimplemented Operation." /> 
</spring:bean> 

... 和路線 ...

<cml:otherwise> 
    <cml:throwException ref="exception-unimplemented-operation" /> 
</cml:otherwise>