User Defined Java Expression

User Defined Java Expression

Description

This transform allows you to enter Java expressions that are used to calculate new values or replace values in fields. Any custom jar libraries that your expressions depend on need to be placed in the folder plugins/transforms/janino/lib.

Hop Engine

Spark

?

Flink

?

Dataflow

?

Usage

If you have a Java expression like :

C=A+B

Then you can simply enter the right side of the expression in the dialog:

A+B

The values are exposed to the expressions as the Java objects they are :

Data type
Java Class

BigNumber

BigDecimal

Binary

byte[]

Date

java.util.Date

Integer

java.lang.Long

Number

java.lang.Double

String

java.lang.String

Options

Option
Description

Transform name

Specify a name for this transform. This must be unique wihin the pipeline.

New field

The new field in the data stream that contains the result of the expression. If you want to overwrite an existing field, you need to define the same field here and in the "Replace value" option.

Java expression

The Java expression to evaluate. See examples below.

Value type

The field’s data type.

Length

The maximum length of a string in the new field.

Precision

The number of decimal places used to express numbers.

Replace value

Set this to be identical to the "New field" name when you want to replace the value in an existing field.

Examples

Add 2 integers, A and B

Concatenate 2 Strings : firstname and name and put a space in between

or if you really care about performance, this might be faster:

Use native Java and API functions

Business rules (If / Then / Else)

This can be more complicated

even with OR and AND and other operators and functions

Using Constants

If you use a constant, you may need to define the right type in some expressions otherwise it could throw an error. Eg if you use "0" that is "int" but Apache Hop "Integer" is "java.lang.Long", so you’ll get an exception:

Incompatible expression types "int" and "java.lang.Long"

To solve this, use:

The above expression checks if "test" is null and replaces it with a zero Long. Otherwise, it return "test" unchanged.

Cut a string from end and test for null and minimal length

Imagine you have input strings "location" like

and you want to separate the state and city. You could use the following expressions:

For state (get the last 2 characters):

For city (get the beginning without the last 2 characters and trim):

Functionality of a LIKE operator (contains string)

The following example returns 1 when abc is within the source string, otherwise 2. It returns also 2 when the source string is null. If you prefer the return values to be of value type Integer, use "new Long(1)" and "new Long(2)".

Blocking specific code

As a simple security measure you can block the execution of code containing specific strings. This can be done by adding exclusions to the codeExclusions.xml file located at <Hop Installation>/plugins/transforms/janino

Example:

Last updated