User Defined Java Expression
User Defined Java Expression
Hop Engine
Spark
Flink
Dataflow
Usage
If you have a Java expression like :
C=A+BThen you can simply enter the right side of the expression in the dialog:
A+BThe values are exposed to the expressions as the Java objects they are :
BigNumber
BigDecimal
Binary
byte[]
Date
java.util.Date
Integer
java.lang.Long
Number
java.lang.Double
String
java.lang.String
Options
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
A+BConcatenate 2 Strings : firstname and name and put a space in between
firstname+" "+nameor if you really care about performance, this might be faster:
new StringBuffer(firstname).append(" ").append(name).toString()Use native Java and API functions
System.getProperty("os.name")Business rules (If / Then / Else)
a<c?true:falseThis can be more complicated
a<c?(a==1?1:2):3even 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:
test == null ? new Long(0) : testThe 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
Orlando FL
New York NYand you want to separate the state and city. You could use the following expressions:
For state (get the last 2 characters):
location != null && location.length()>2 ? location.substring(location.length()-2, location.length()) : nullFor city (get the beginning without the last 2 characters and trim):
location != null && location.length()>2 ? location.substring(0, location.length()-2).trim() : locationFunctionality 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)".
samplestr != null && samplestr.indexOf("abc")>-1 ? 1 : 2Blocking 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:
<exclusions>
<exclusion>System.</exclusion>
<exclusion>HopVfs.</exclusion>
</exclusions>Last updated 2025-09-04 18:23:22 +0200
Last updated