我有一個與DataMapper組件相關的問題並擴展了行爲。我有一個場景,我使用DataMapper將一個有效載荷轉換爲另一個有效載荷。我的源請求中的一些元素爲字符串(即男性,女性),這些值需要映射到ID元素,稱爲目標系統中的枚舉。 DBLookup就足夠了,但由於目標系統中的枚舉(a.k.a lookup tables)結構,我需要爲需要更改的值定義多個DBLookups。所以我正在尋求開發一種更通用的執行映射的方法。我有兩個建議,目前我正在探索Mule DataMapper MEL自定義函數或調用自定義轉換器
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)可以改進文檔。
也許這個功能會受到範圍問題的影響。這種方法的問題是,如果任何人都可以通過MEL從數據映射器腳本中提供一個HOWTO來調用一些JAVA代碼?這個blog建議數據映射器MEL可以調用JAVA,但限制它是字符串函數的例子。有沒有任何調用自定義JAVA類/靜態方法的例子?
一般來說,我在質疑我是否接近這個錯誤?我應該使用Flow Ref並調用JAVA組件嗎?
更新
它是完全可以接受的使用自定義變壓器從數據映射器組件。我遇到的問題是Mule Studio問題。包含變換器的數據映射的預覽不起作用,因爲mule註冊表未在mule上下文中填充,因爲mule未運行。
就現在我已經意識到DB Lookup可以接受多個輸入參數的一般方法而言,我可以使用它來解決我的映射場景。
感謝
豐富
你可以發佈定製變壓器,請..我也面臨着類似的問題 – Jaguar