2013-11-01 52 views
2

我有一個與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可以接受多個輸入參數的一般方法而言,我可以使用它來解決我的映射場景。

感謝

豐富

+0

你可以發佈定製變壓器,請..我也面臨着類似的問題 – Jaguar

回答

0

嘗試通過提供完整的類名