Java 在mule3中,如何设置自定义表达式以供选择?

Java 在mule3中,如何设置自定义表达式以供选择?,java,mule,Java,Mule,我是Mule的新手,我想验证URI中的timestamp和nonce参数,以防止重播攻击。我使用choice when router,当时间戳和nonce有效时(验证过程复杂),将请求转发到后端rest服务,否则返回错误代码和消息。我发现很多MEL用法可供选择,但我可以使用java定义自定义表达式吗?有一个例子吗? URI示例: http://muledemo.org/ci2/ni/del?id=0xe413&timestamp=1376022133&nonce=a03ed9c

我是Mule的新手,我想验证URI中的timestamp和nonce参数,以防止重播攻击。我使用choice when router,当时间戳和nonce有效时(验证过程复杂),将请求转发到后端rest服务,否则返回错误代码和消息。我发现很多MEL用法可供选择,但我可以使用java定义自定义表达式吗?有一个例子吗? URI示例:

http://muledemo.org/ci2/ni/del?id=0xe413&timestamp=1376022133&nonce=a03ed9c
代码片段:

<choice doc:name="Choice">
  <when expression="???how to call a java validator???">
  </when>
  <otherwise>
    <processor-chain doc:name="Processor Chain">
      <echo-component doc:name="Echo" />
      <http:outbound-endpoint exchange-pattern="request-response" method="POST"
        address="http://localhost:8081#[message.inboundProperties['http.request']]" doc:name="HTTP" />
    </processor-chain>
  </otherwise>
</choice>

您只需使用完全限定路径

#[com.mulesoft.foo(payload, someFooVar)]
或者,您可以在配置中为应用程序全局定义它,并在MEL表达式中使用“foo”函数

<configuration doc:name="Config">
    <expression-language autoResolveVariables="false">
        <global-functions>
            def foo(fooVar){
            return com.mulesoft.foo(payload, fooVar);
            }                
        </global-functions>
    </expression-language>
</configuration>

def foo(fooVar){
返回com.mulesoft.foo(有效载荷,fooVar);
}                

您只需使用完全限定路径

#[com.mulesoft.foo(payload, someFooVar)]
或者,您可以在配置中为应用程序全局定义它,并在MEL表达式中使用“foo”函数

<configuration doc:name="Config">
    <expression-language autoResolveVariables="false">
        <global-functions>
            def foo(fooVar){
            return com.mulesoft.foo(payload, fooVar);
            }                
        </global-functions>
    </expression-language>
</configuration>

def foo(fooVar){
返回com.mulesoft.foo(有效载荷,fooVar);
}                
正确的MEL语法:

<when expression="#[app.registry.replayAttackCheck.validate(payload)]">

正确的MEL语法:

<when expression="#[app.registry.replayAttackCheck.validate(payload)]">


谢谢,但是com.mulesoft.foo是什么?查看我的编辑,我仍然得到错误。foo是您想要的任何内容;)你能不用豆子再试一次吗?使用MELI Use中的完整路径,现在一切正常,这里是一个SpringBean。MEL不能表达复杂的逻辑。无论如何,谢谢!不正确:MEL可以表达复杂的逻辑。它是基于MVEL构建的,MVEL非常强大:谢谢,但是com.mulesoft.foo是什么?查看我的编辑,我仍然得到错误。foo是您想要的任何内容;)你能不用豆子再试一次吗?使用MELI Use中的完整路径,现在一切正常,这里是一个SpringBean。MEL不能表达复杂的逻辑。无论如何,谢谢!不正确:MEL可以表达复杂的逻辑。它建立在MVEL之上,非常强大:是的!很好用,很酷,谢谢!app.registry是指在春季注册的bean吗?是的,加上Mule添加的额外bean。是的!很好用,很酷,谢谢!app.registry是指在春季注册的bean吗?是的,加上Mule添加的额外bean。