我有一个与DataMapper组件有关的问题并扩展了行为。我有一个场景,我正在使用DataMapper将一个有效负载转换为另一个有效负载。我的源中的一些元素请求为字符串(即Male,Female),这些值需要映射到ID元素,在目标系统中称为枚举。 DBLookup就足够了,但由于目标系统中枚举(a.k.a查找表)的结构,我需要为需要更改的值定义多个DBLookup。所以我希望开发一种更通用的方法来执行映射。我有两个提案,我正在探索
1)使用invokeTransformer默认函数调用自定义转换器。即
output.gender = invokeTransformer("EnumTransformer",input.gender);
然而,即使我的变换器是在我的流程中定义的
<custom-transformer name="EnumTransformer" class="com.abc.mule.EnumTransformer" />
在DataMapper中运行预览失败,出现以下错误(在Studio错误日志中)
Caused by: java.lang.IllegalArgumentException: Invalid transformer name 'EnumTransformer'
at com.mulesoft.datamapper.transform.function.InvokeTransformerFunction.call(InvokeTransformerFunction.java:35)
at org.mule.el.mvel.MVELFunctionAdaptor.call(MVELFunctionAdaptor.java:38)
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:1011)
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:987)
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java:377)
... 18 more
由于变换器的作用域是我的流程,而datamapper在此范围之外,我是否认为现在可以在数据映射器中调用自定义变换器?或者我需要额外的设置。
2)另一种方法是使用“全球功能”。我发现他在这个领域的文档很安静。功能在cheat sheet中引用,并且有一个[jira]( https://www.mulesoft.org/jira/browse/MULE-6438)改进文档。
也许这个功能可能会遇到范围问题。关于这种方法的问题是,是否有人可以提供HOWTO从数据映射器脚本通过MEL调用一些JAVA代码?这个blog建议数据映射器MEL可以调用JAVA但是将它的例子限制为字符串函数。有没有调用自定义JAVA类/静态方法的例子?
总的来说,我在质疑我是否接近这个错误?我应该使用Flow Ref并调用JAVA组件吗?
更新
使用数据映射器组件中的自定义转换器是完全可以接受的。我遇到的问题是Mule Studio问题。包含变换器的数据映射的预览不起作用,因为当mule没有运行时,mule上下文没有填充mule上下文。
就一般方法而言,我已经意识到DB Lookup可以接受多个输入参数,我可以用它来解决我的映射方案。
由于
富