2

我有一个关于 DataMapper 组件和扩展行为的问题。我有一个场景,我使用 DataMapper 将一个有效负载转换为另一个。我的源请求中的一些元素是字符串(即男性、女性),这些值需要映射到 ID 元素,在目标系统中称为枚举。一个 DBLookup 就足够了,但由于目标系统中枚举(又名查找表)的结构,我需要为需要更改的值定义多个 DBLookup。所以我正在寻找一种更通用的方式来执行映射。我有两个提案,我目前正在探索

1)使用invokeTransformer默认函数调用自定义转换器。IE

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

由于转换器的范围仅限于我的流程并且数据映射器超出了此范围,我是否认为现在可以在数据映射器中调用自定义转换器?还是我需要额外的设置。

2)替代方法是使用“全局函数”。我发现他在这方面的文档非常薄弱。备忘单中引用了该功能,并且有一个 [jira]( https://www.mulesoft.org/jira/browse/MULE-6438 ) 来改进文档。

同样,此功能可能会遇到范围问题。关于这种方法的问题是,是否有人可以提供关于通过 MEL 从数据映射器脚本调用一些 JAVA 代码的 HOWTO?该博客建议数据映射器 MEL 可以调用 JAVA,但将其示例限制为字符串函数。有没有调用自定义 JAVA 类/静态方法的示例?

一般来说,我在质疑我是否接近这个错误?我应该使用 Flow Ref 并调用 JAVA 组件吗?

更新

使用数据映射器组件中的自定义转换器是完全可以接受的。我遇到的问题是 Mule Studio 问题。包含转换器的数据映射的预览不起作用,因为骡子注册表没有填充骡子上下文中,因为骡子没有运行。

就一般方法而言,现在我已经意识到 DB Lookup 可以接受多个输入参数,我可以使用它来解决我的映射场景。

谢谢

富有的

4

1 回答 1

0

尝试提供完整的类名

于 2015-08-27T08:16:44.360 回答