码迷,mamicode.com
首页 > 编程语言 > 详细

user defined java expression报错--kettle学习

时间:2016-08-11 16:05:14      阅读:415      评论:0      收藏:0      [点我收藏+]

标签: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

数据源是这样的:

技术分享

1

对源数据中传来的phone_number字段进行处理,是这样写的java脚本

技术分享

2

 

问题解决

  从网上找了一个类似的模型如下图3所示,执行时成功的,所以在我电脑上的kettle6.1版本时没有bug且可以调用java函数的。现在我仿照着这个模型进行改写,将列名换掉,即如上图1和图2所示,执行仍然不成功,报同样的错误

技术分享

3

  按理说这样的java脚本的写法是对的,从网上下载的模型也是可以实现length()函数的调用的,现在唯一存在的问题就是列的问题了。从图3可看出location列是string类型,而我的调用的列是number型的,所以我就推测可能是因为只有string类型的列才能调用length()/substring()这类的字符串函数。

  于是我将phone_number的类型改为string类型,再次执行这个脚本的时候就成功的执行了,至此解决问题

总结:

  既然是和java相关,那么对java就应该有相应的了解,我虽然之前在大二学过java,但是已经忘记了,而且kettle里用到的还是javajava script两个语言,对这两个就更加分不清楚了,所以现在如果想学好kettle,那么想要灵活运用,这两个应该是跑不了了,一定要学习的,至少是基本的知识。


user defined java expression报错--kettle学习

标签:kettle

原文地址:http://11471544.blog.51cto.com/11461544/1836858

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!