{"record":{"id":"b861dead3f28320f","repo":"alibaba/DataX","slug":"transformer-illegal-parameter","errorCode":"TRANSFORMER_ILLEGAL_PARAMETER","errorMessage":"dx_replace paras must be 4","messagePattern":"dx_replace paras must be 4","errorType":"validation","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/com/alibaba/datax/core/transport/transformer/ReplaceTransformer.java","lineNumber":29,"sourceCode":"/**\n * no comments.\n * Created by liqiang on 16/3/4.\n */\npublic class ReplaceTransformer extends Transformer {\n    public ReplaceTransformer() {\n        setTransformerName(\"dx_replace\");\n    }\n\n    @Override\n    public Record evaluate(Record record, Object... paras) {\n\n        int columnIndex;\n        int startIndex;\n        int length;\n        String replaceString;\n        try {\n            if (paras.length != 4) {\n                throw new RuntimeException(\"dx_replace paras must be 4\");\n            }\n\n            columnIndex = (Integer) paras[0];\n            startIndex = Integer.valueOf((String) paras[1]);\n            length = Integer.valueOf((String) paras[2]);\n            replaceString = (String) paras[3];\n        } catch (Exception e) {\n            throw DataXException.asDataXException(TransformerErrorCode.TRANSFORMER_ILLEGAL_PARAMETER, \"paras:\" + Arrays.asList(paras).toString() + \" => \" + e.getMessage());\n        }\n\n        Column column = record.getColumn(columnIndex);\n\n        try {\n            String oriValue = column.asString();\n\n            //如果字段为空，跳过replace处理\n            if(oriValue == null){\n                return  record;","sourceCodeStart":11,"sourceCodeEnd":47,"githubUrl":"https://github.com/alibaba/DataX/blob/80ec23d5c5328eb90ca364d2749e92dfaf44541e/core/src/main/java/com/alibaba/datax/core/transport/transformer/ReplaceTransformer.java#L11-L47","documentation":"Thrown by the dx_replace transformer when its paras array does not contain exactly 4 elements. dx_replace expects [columnIndex(int), startIndex(String), length(String), replaceString(String)]. The count check fires first inside the parameter-parsing try block, and the message is surfaced as TRANSFORMER_ILLEGAL_PARAMETER prefixed with the actual paras list.","triggerScenarios":"A job JSON declares dx_replace with 3 or 5 parameters, e.g. \"paras\": [0, \"0\", \"2\"] (missing the replacement string) or including an extra trailing parameter. Also triggered if paras is not an array at all so its length differs from 4.","commonSituations":"Forgetting the final replaceString argument, mixing up dx_replace with dx_substr (which takes 3 parameters), or pasting a parameter list from a different transformer's documentation.","solutions":["Provide exactly 4 parameters in order: column index (int), startIndex (numeric string), length (numeric string), replacement string.","Verify the error payload: the message includes 'paras:[...]' showing what was actually parsed, so compare it against the expected 4-element shape.","Ensure startIndex and length are quoted numeric strings (e.g. \"2\", \"3\") and columnIndex is a bare integer."],"exampleFix":"// before\n\"paras\": [0, \"2\", \"3\"]\n// after\n\"paras\": [0, \"2\", \"3\", \"REDACTED\"]","handlingStrategy":"validation","validationCode":"Object[] paras = ...;\nif (paras.length != 4) throw new IllegalArgumentException(\"dx_replace needs [columnIndex, startIndex, length, replaceString]\");\n// also assert types: paras[0] instanceof Integer, paras[1..2] numeric strings","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Preflight-check paras.length against the transformer's documented arity (dx_replace=4, dx_substr=3, dx_pad=3).","Use the 'paras:[...]' echo in the TRANSFORMER_ILLEGAL_PARAMETER message to diff actual vs expected shape."],"tags":["datax","transformer","dx-replace","configuration"],"backgroundTag":null,"analyzedSha":"80ec23d5c5328eb90ca364d2749e92dfaf44541e","analyzedAt":"2026-08-14T15:33:51.187Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}