【问题标题】:Mule expression language unable to resolve method骡表达式语言无法解析方法
【发布时间】:2017-03-10 13:08:06
【问题描述】:

我对此有疑问:

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

【问题讨论】:

  • Class CircuitBreakerUtil 是错字还是只是为了简化示例?当我创建一个没有定义访问修饰符的类时,例如:class CircuitBreakerUtil,它会引入错误。如果设置了访问修饰符public class CircuitBreakerUtil,它可以正常工作。
  • 感谢您的帮助。我发现当我在我的方法前面加上“is”以返回一个布尔值时,它起作用了。

标签: mule mule-el mvel


【解决方案1】:

为什么你可以在你需要的地方尝试如下

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

你甚至可以在这里使用你的 expressio 组件。

此外,您可以将其声明为全局表达式并在任何地方重用它。

【讨论】:

  • 这不是回答问题,而是提出替代方案。并没有说明从 MEL 表达式调用对象方法的方式有什么问题。
猜你喜欢
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
相关资源
最近更新 更多