apache/flink · error · IllegalArgumentException
The record must not be null.
Error message
The record must not be null.
What it means
CharPrimitiveArraySerializer writes the array length then each char. serialize() rejects null because a null array has no length to emit and primitive-array type information is non-nullable by contract.
Source
Thrown at flink-core/src/main/java/org/apache/flink/api/common/typeutils/base/array/CharPrimitiveArraySerializer.java:70
char[] copy = new char[from.length];
System.arraycopy(from, 0, copy, 0, from.length);
return copy;
}
@Override
public char[] copy(char[] from, char[] reuse) {
return copy(from);
}
@Override
public int getLength() {
return -1;
}
@Override
public void serialize(char[] record, DataOutputView target) throws IOException {
if (record == null) {
throw new IllegalArgumentException("The record must not be null.");
}
final int len = record.length;
target.writeInt(len);
for (int i = 0; i < len; i++) {
target.writeChar(record[i]);
}
}
@Override
public char[] deserialize(DataInputView source) throws IOException {
final int len = source.readInt();
char[] result = new char[len];
for (int i = 0; i < len; i++) {
result[i] = source.readChar();
}
View on GitHub (pinned to 2f3c205e92)
Solutions
- Initialize char[] fields to an empty array instead of null before the sink/state.
- Filter out records with null arrays upstream.
- If nullability is legitimate, switch to an object/nullable type (e.g., Character[] or a Row with null handling).
- Add a null check in your mapper to default null arrays to empty.
Example fix
// before: out.chars may be null -> serializer.serialize(chars) throws
// after: data.map(r -> { if (r.chars == null) r.chars = new char[0]; return r; }) Defensive patterns
Strategy: validation
Validate before calling
// Validate before serialize char[] safe = record == null ? new char[0] : record; serializer.serialize(safe, target);
Try / catch
try {
serializer.serialize(record, target);
} catch (IllegalArgumentException e) {
if (e.getMessage().equals("The record must not be null.")) {
record = new char[0];
serializer.serialize(record, target);
} else throw e;
} Prevention
- Default char[] fields to an empty array rather than null.
- Sanitize null char arrays in a mapper before the sink/state.
- Use a nullable type representation if nulls are legitimate.
When it happens
Trigger: Calling serialize(null, target) on the char[] serializer — a field typed char[] that resolved to null at runtime.
Common situations: A char[] field that is null due to a null source value or uninitialized POJO; a UDF returning null where a char array is expected; a nullable SQL column mapped to a primitive char[].
Related errors
- The record must not be null.
- The record must not be null.
- The record must not be null.
- The record must not be null.
- The record must not be null.
AI-assisted analysis of apache/flink@2f3c205e92 (2026-08-14).
Data as JSON: /api/errors/a7732c46f356a974.
Report an issue: GitHub.