我目前正在使用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
组件?任何帮助将受到高度赞赏:)
答案 0 :(得分:2)
这个会起作用
<invoke object-ref="importStatusComponent" method="addStatus" methodArguments="#[flowVars.guid], #[com.example.ImportStatusEnum.STARTED]" methodArgumentTypes="java.lang.String, com.example.ImportStatusEnum" />