{"record":{"id":"eb4009ff9a50809b","repo":"alibaba/DataX","slug":"dx-digest-paras-length-must-be-3","errorCode":null,"errorMessage":"dx_digest paras length must be 3","messagePattern":"dx_digest paras length must be 3","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/com/alibaba/datax/core/transport/transformer/DigestTransformer.java","lineNumber":40,"sourceCode":"    private static final String MD5 = \"md5\";\n    private static final String SHA1 = \"sha1\";\n    private static final String TO_UPPER_CASE = \"toUpperCase\";\n    private static final String TO_LOWER_CASE = \"toLowerCase\";\n\n    public DigestTransformer() {\n        setTransformerName(\"dx_digest\");\n    }\n\n    @Override\n    public Record evaluate(Record record, Object... paras) {\n\n        int columnIndex;\n        String type;\n        String charType;\n\n        try {\n            if (paras.length != 3) {\n                throw new RuntimeException(\"dx_digest paras length must be 3\");\n            }\n\n            columnIndex = (Integer) paras[0];\n            type = (String) paras[1];\n            charType = (String) paras[2];\n\n            if (!StringUtils.equalsIgnoreCase(MD5, type) && !StringUtils.equalsIgnoreCase(SHA1, type)) {\n                throw new RuntimeException(\"dx_digest paras index 1 must be md5 or sha1\");\n            }\n            if (!StringUtils.equalsIgnoreCase(TO_UPPER_CASE, charType) && !StringUtils.equalsIgnoreCase(TO_LOWER_CASE, charType)) {\n                throw new RuntimeException(\"dx_digest paras index 2 must be toUpperCase or toLowerCase\");\n            }\n        } catch (Exception e) {\n            throw DataXException.asDataXException(TransformerErrorCode.TRANSFORMER_ILLEGAL_PARAMETER, \"paras:\" + Arrays.asList(paras) + \" => \" + e.getMessage());\n        }\n\n        Column column = record.getColumn(columnIndex);\n","sourceCodeStart":22,"sourceCodeEnd":58,"githubUrl":"https://github.com/alibaba/DataX/blob/80ec23d5c5328eb90ca364d2749e92dfaf44541e/core/src/main/java/com/alibaba/datax/core/transport/transformer/DigestTransformer.java#L22-L58","documentation":"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.","triggerScenarios":"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().","commonSituations":"Hand-writing the transformer parameter array; forgetting the third case parameter; assuming defaults exist for omitted params.","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."],"exampleFix":"// before (job.json)\n\"transformer\": [{\"name\": \"dx_digest\", \"parameter\": [0, \"md5\"]}]\n\n// after\n\"transformer\": [{\"name\": \"dx_digest\", \"parameter\": [0, \"md5\", \"toUpperCase\"]}]","handlingStrategy":"validation","validationCode":"Object[] p = {0, \"md5\", \"toUpperCase\"};\nif (p.length != 3) throw new IllegalArgumentException(\"dx_digest needs 3 paras\");","typeGuard":null,"tryCatchPattern":"catch (DataXException e) when TRANSFORMER_ILLEGAL_PARAMETER: fail the job fast with the printed paras list; transformer param errors are not retryable.","preventionTips":["Pin transformer parameter arrays to documented shapes in job templates.","Add a pre-submit lint that checks dx_digest parameter length == 3."],"tags":["datax","transformer","dx-digest","config"],"backgroundTag":null,"analyzedSha":"80ec23d5c5328eb90ca364d2749e92dfaf44541e","analyzedAt":"2026-08-14T15:33:51.187Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}