如何使用枚举值作为方法参数调用Java Mule组件?

时间:2016-02-15 14:01:51

标签: java mule esb mule-component mule-el

我目前正在使用Mule ESB 3.5.0(非EE)公开的API。此API接受带有要通过HTTP导入的帐户的XML文件,并将此任务定义放入RabbitMQ队列。另一个Mule流程负责一次一个地从队列中获取项目(感谢processingStrategy="synchronous")并将它们提供给平台核心。队列是必需的,因为核心能够一次处理一个文件。

上面的设置是up&运行顺利。我现在想要实现的目的是让我们的客户通过暴露HTTPS端点来解决集成问题,其中导入状态将可用(由请求的某些GUID和SHA1标识)。

我创建了一个简单的POJO组件来处理添加状态更新的逻辑,方法签名是:

void addStatus(final String guid, final String status)

我设法通过将bean定义为

来调用上面的方法
<bean id="importStatusComponent" class="com.example.ImportStatusComponent" />

并使用以下命令调用Mule流中的java组件:

    <invoke object-ref="importStatusComponent" method="addStatus"
            methodArguments="#[flowVars.guid], Import started"
            methodArgumentTypes="java.lang.String, java.lang.String" />

由于我们希望向客户公开并允许他们对状态进行一些程序化检查,因此我决定将状态类型更改为基于枚举的字典ImportStatusEnum

不幸的是,我无法将枚举输入进入<invoke methodArgument="">标记属性的MEL。

我尝试过的例子:

1)参数作为两个单独的MEL表达式。

<configuration>
    <expression-language>
        <import class="com.example.ImportStatusEnum" />
    </expression-language>
</configuration>

<invoke object-ref="importStatusComponent" method="addStatus"
        methodArguments="#[flowVars.guid], #[ImportStatusEnum.STARTED]"
        methodArgumentTypes="java.lang.String, com.example.ImportStatusEnum" />

2)作为单个MEL表达式的参数。

<configuration>
    <expression-language>
        <import class="com.example.ImportStatusEnum" />
    </expression-language>
</configuration>

<invoke object-ref="importStatusComponent" method="addStatus"
        methodArguments="#[flowVars.guid, ImportStatusEnum.STARTED]"
        methodArgumentTypes="java.lang.String, com.example.ImportStatusEnum" />

3)完全限定的类名而不是导入(此处未显示)。

如何将枚举值作为方法参数传递给Mule中的invoke组件?任何帮助将受到高度赞赏:)

1 个答案:

答案 0 :(得分:2)

这个会起作用

<invoke object-ref="importStatusComponent" method="addStatus" methodArguments="#[flowVars.guid], #[com.example.ImportStatusEnum.STARTED]" methodArgumentTypes="java.lang.String, com.example.ImportStatusEnum" />