user defined java expression報錯--kettle學習

軟硬件環境:kettle6.1/windows7/                          時間:2016/8/11


問題描述

使用[利用Janino計算Java表達式][userdefined java expression]組件來設計Transformer時報錯,錯誤信息如下:

org.codehaus.janino.CompileException:Line 1, Column 24: A method named "length" is not declared in anyenclosing class nor any supertype, nor through a static import

A method named"length" is not declared in any enclosing class nor any supertype,nor through a static import

數據源是這樣的:

wKioL1esFaai_DzqAAAxvLI8ShM854.jpg-wh_50

1

對源數據中傳來的phone_number字段進行處理,是這樣寫的java腳本

wKiom1esFc3gdedlAAAURGDFwGk784.png-wh_50

2

 

問題解決

  從網上找了一個類似的模型如下圖3所示,執行時成功的,所以在我電腦上的kettle6.1版本時沒有bug且可以調用java函數的。現在我仿照着這個模型進行改寫,將列名換掉,即如上圖1和圖2所示,執行仍然不成功,報同樣的錯誤

wKioL1esFd7SW_SHAAEb0HrLatU610.jpg-wh_50

3

  按理說這樣的java腳本的寫法是對的,從網上下載的模型也是可以實現length()函數的調用的,現在唯一存在的問題就是列的問題了。從圖3可看出location列是string類型,而我的調用的列是number型的,所以我就推測可能是因爲只有string類型的列才能調用length()/substring()這類的字符串函數。

  於是我將phone_number的類型改爲string類型,再次執行這個腳本的時候就成功的執行了,至此解決問題

總結:

  既然是和java相關,那麼對java就應該有相應的瞭解,我雖然之前在大二學過java,但是已經忘記了,而且kettle裏用到的還是javajava script兩個語言,對這兩個就更加分不清楚了,所以現在如果想學好kettle,那麼想要靈活運用,這兩個應該是跑不了了,一定要學習的,至少是基本的知識。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章