2017-03-09 69 views
1

我有這個問題:騾子表達式語言無法解決方法

package com.acme; 

Class CircuitBreakerUtil { 

    public static boolean canAttempt(String breakerName) { 
     return true; 
    } 
} 

我的春天聲明

<spring:bean id="circuitBreakerUtil" class="com.acme.CircuitBreakerUtil" scope="singleton"/> 

我MVEL表達:

   <choice doc:name="ApiCircuitBreakerName Is Up?"> 
     <when expression="#[app.registry.circuitBreakerUtil.canAttempt('ApiCircuitBreakerName')]"> 
       <flow-ref name="CircuitBreakerFlow" doc:name="CircuitBreakerFlow"/> 
       <logger message="Passed CircuitBreakerFlow" level="INFO" doc:name="Logger"/> 
     </when> 
     <otherwise> 
       <flow-ref name="EmailTechnicalSupportFlow" doc:name="EmailTechnicalSupportFlow"/> 
       <flow-ref name="fallbackFlow" doc:name="fallbackFlow"/> 
       <logger message="Passed FallbackFlow" level="INFO" doc:name="Logger"/> 
     </otherwise> 
    </choice> 

,並得到這個錯誤:

Caused by: [Error: unable to resolve method:  com.acme.CircuitBreakerUtil.canAttempt(java.lang.String) [arglength=1]] 
[Near : {... app.registry.circuitBreakerUti ....}] 
+1

'Class CircuitBreakerUtil'是一個錯字還是隻是爲了簡化示例? 當我創建一個沒有定義訪問修飾符的類時,例如'class CircuitBreakerUtil',它會引入錯誤。如果訪問修飾符被設置,'公共類CircuitBreakerUtil',它正常工作。 –

+0

感謝您的幫助。我想到,當我用「is」作爲前綴來返回布爾值時,它工作正常。 –

回答

0

爲什麼你可以嘗試像下面那樣你需要

#[com.acme.CircuitBreakerUtil.canAttempt(param)]使用MEL表達式。

即使您可以在這裏使用您的expressio組件。

此外,你可以聲明這是一個全局表達式,並在任何地方重用。

+0

如果你發現答案kinldy接受它。 –

+0

這不是回答這個問題,而是提出一個替代方案。它沒有說明從MEL表達式調用對象方法的方式有什麼問題。 – spoonboy

相關問題