alibaba/DataX · error · RuntimeException
dx_digest paras length must be 3
Error message
dx_digest paras length must be 3
What it means
The dx_digest transformer requires exactly 3 parameters; any other count throws RuntimeException('dx_digest paras length must be 3'), which the enclosing catch rewraps as DataXException(TRANSFORMER_ILLEGAL_PARAMETER). Expected paras: columnIndex (Integer), hash type ('md5'|'sha1', case-insensitive), letter case ('toUpperCase'|'toLowerCase'). The message string is then prefixed with 'paras:[...]' when surfaced.
Source
Thrown at core/src/main/java/com/alibaba/datax/core/transport/transformer/DigestTransformer.java:40
private static final String MD5 = "md5";
private static final String SHA1 = "sha1";
private static final String TO_UPPER_CASE = "toUpperCase";
private static final String TO_LOWER_CASE = "toLowerCase";
public DigestTransformer() {
setTransformerName("dx_digest");
}
@Override
public Record evaluate(Record record, Object... paras) {
int columnIndex;
String type;
String charType;
try {
if (paras.length != 3) {
throw new RuntimeException("dx_digest paras length must be 3");
}
columnIndex = (Integer) paras[0];
type = (String) paras[1];
charType = (String) paras[2];
if (!StringUtils.equalsIgnoreCase(MD5, type) && !StringUtils.equalsIgnoreCase(SHA1, type)) {
throw new RuntimeException("dx_digest paras index 1 must be md5 or sha1");
}
if (!StringUtils.equalsIgnoreCase(TO_UPPER_CASE, charType) && !StringUtils.equalsIgnoreCase(TO_LOWER_CASE, charType)) {
throw new RuntimeException("dx_digest paras index 2 must be toUpperCase or toLowerCase");
}
} catch (Exception e) {
throw DataXException.asDataXException(TransformerErrorCode.TRANSFORMER_ILLEGAL_PARAMETER, "paras:" + Arrays.asList(paras) + " => " + e.getMessage());
}
Column column = record.getColumn(columnIndex);
View on GitHub (pinned to 80ec23d5c5)
Solutions
- Supply exactly 3 parameters: column index, md5/sha1, toUpperCase/toLowerCase.
- Copy the parameter shape from DataX transformer docs/examples.
- Validate the transformer block length before submitting the job.
Example fix
// before (job.json)
"transformer": [{"name": "dx_digest", "parameter": [0, "md5"]}]
// after
"transformer": [{"name": "dx_digest", "parameter": [0, "md5", "toUpperCase"]}] Defensive patterns
Strategy: validation
Validate before calling
Object[] p = {0, "md5", "toUpperCase"};
if (p.length != 3) throw new IllegalArgumentException("dx_digest needs 3 paras"); Try / catch
catch (DataXException e) when TRANSFORMER_ILLEGAL_PARAMETER: fail the job fast with the printed paras list; transformer param errors are not retryable.
Prevention
- Pin transformer parameter arrays to documented shapes in job templates.
- Add a pre-submit lint that checks dx_digest parameter length == 3.
When it happens
Trigger: Declaring a transformer in job JSON like {"name":"dx_digest","parameter":[0,"md5"]} (2 params) or with 4 params. Transformer params are parsed from the job's transformer block and passed straight into evaluate().
Common situations: Hand-writing the transformer parameter array; forgetting the third case parameter; assuming defaults exist for omitted params.
Related errors
- dx_digest paras index 1 must be md5 or sha1
- dx_digest paras index 2 must be toUpperCase or toLowerCase
- dx_filter paras must be 3
- dx_filter para 2 can't be null
- dx_pad paras must be 4
AI-assisted analysis of alibaba/DataX@80ec23d5c5 (2026-08-14).
Data as JSON: /api/errors/eb4009ff9a50809b.
Report an issue: GitHub.