覆盖主要内容
版本: 6.1.0

Java 代码

组件介绍

Java代码组件可以运行用户自定的Java类。


  • 输入:包含待使用字段的数据流
  • 输出:操作完毕的数据流

页面介绍

运行Java代码组件得到下图所示的界面:

用户定义的Java类转换允许您输入用户定义的Java类来驱动完整转换的功能。本质上,这个转换允许您在转换中编写自己的插件。此转换的目标是不允许用户在转换中进行全面的Java开发。显然,我们有一个完整的插件系统可以帮助这部分。目标是允许用户用尽可能少的代码定义方法和逻辑,并尽可能快地执行。为此,我们使用Janino项目库在运行时以类的形式编译Java代码。

Java代码组件页面包含如下选项:

字段表

组件底部表格为字段表,右击选择“获取变量(&G)”,组件可根据当前指定设置从源文件获取相应内容填充字段表。该表包含以下列:

选项说明样例值
字段名自命名新的字段名称。
类型指定输出字段的数据类型。
长度该字段中数据的长度。
精度该字段中数据的精度。

参数表

组件底部表格为参数表,可以使用参数表来避免使用硬编码字符串值,例如字段名称。该表包含以下列:

选项说明样例值
标签指定的参数标签。
指定的参数值。
描述有关该参数的描述。

消息Transform表

组件底部表格为消息Transform表,表示要从其中读取数据的附加转换。该表包含以下列:

选项说明样例值
标签指定的Transform标签。
Trans指定从哪个Transform开始。
描述有关该的描述。

目标Transform表

组件底部表格为目标Transform表,表示要从其中输出数据的附加转换。该表包含以下列:。该表包含以下列:

选项说明样例值
标签指定的参数标签。
Trans指定从哪个Transform结束。
描述有关该参数的描述。

使用案例

案例通过自定义常量数据组件生成姓名的姓和名,再通过JAVA代码拼接姓名。

使用自定义常量数据组件生成的数据如下:

使用JAVA代码组件拼接生成的字符串,首先需要定义代码处理的逻辑,该代码首先定义读取的字段,并从参数读取字段名,并将输入字段里的first_namelast_name拼接起来输出到name_field字段中。

java代码步骤里的代码如下:

String firstnameField;
String lastnameField;
String nameField;

public boolean processRow() throws HopException
{
// 为了节省性能,只加载一次参数.
//
if (first) {
firstnameField = getParameter("FIRSTNAME_FIELD");
lastnameField = getParameter("LASTNAME_FIELD");
nameField = getParameter("NAME_FIELD");
first=false;
}

// 首先获取输入数据
//
Object[] r = getRow();

// 如果r为空,则结束处理.
//
if (r == null) {
setOutputDone();
return false;
}

// 调用createOutputRow()总是最安全的,以确保输出行的Object[]足够大,可以处理在此转换中创建的任何新字段。
//
Object[] outputRow = createOutputRow(r, data.outputRowMeta.size());

String firstname = get(Fields.In, firstnameField).getString(r);
String lastname = get(Fields.In, lastnameField).getString(r);

// 拼接姓名,并输出字段
//
String name = firstname+lastname;
get(Fields.Out, nameField).setValue(outputRow, name);

// putRow将把该行发送到默认的输出组件.
//
putRow(data.outputRowMeta, outputRow);

return true;
}

而后,需要定义读取的参数,参数定义如下。

右键点击【预览】,可得下图: