{"record":{"id":"8d063d299f1049ad","repo":"alibaba/spring-cloud-alibaba","slug":"payload-must-not-be-empty","errorCode":null,"errorMessage":"payload must not be empty","messagePattern":"payload must not be empty","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"spring-cloud-alibaba-starters/spring-cloud-starter-stream-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/support/RocketMQMessageConverterSupport.java","lineNumber":144,"sourceCode":"\t\t\t\t\t\t\tMESSAGE_CONVERTER.getClass(), payloadObj.getClass(),\n\t\t\t\t\t\t\tpayloadObj));\n\t\t\t\t}\n\t\t\t\tpayloads = jsonObj.getBytes(charset);\n\t\t\t}\n\t\t}\n\t\tcatch (Exception e) {\n\t\t\tthrow new RuntimeException(\"convert to RocketMQ message failed.\", e);\n\t\t}\n\t\treturn getAndWrapMessage(topic, message.getHeaders(), payloads);\n\t}\n\n\tprivate static org.apache.rocketmq.common.message.Message getAndWrapMessage(\n\t\t\tString topic, MessageHeaders headers, byte[] payloads) {\n\t\tif (topic == null || topic.length() < 1) {\n\t\t\tthrow new IllegalArgumentException(\"topic must not be empty\");\n\t\t}\n\t\tif (payloads == null || payloads.length < 1) {\n\t\t\tthrow new IllegalArgumentException(\"payload must not be empty\");\n\t\t}\n\t\torg.apache.rocketmq.common.message.Message rocketMsg = new org.apache.rocketmq.common.message.Message(\n\t\t\t\ttopic, payloads);\n\t\tif (Objects.nonNull(headers) && !headers.isEmpty()) {\n\t\t\tObject tag = headers.getOrDefault(Headers.TAGS,\n\t\t\t\t\theaders.get(toRocketHeaderKey(Headers.TAGS)));\n\t\t\tif (!ObjectUtils.isEmpty(tag)) {\n\t\t\t\trocketMsg.setTags(String.valueOf(tag));\n\t\t\t}\n\n\t\t\tObject keys = headers.getOrDefault(Headers.KEYS,\n\t\t\t\t\theaders.get(toRocketHeaderKey(Headers.KEYS)));\n\t\t\tif (!ObjectUtils.isEmpty(keys)) {\n\t\t\t\trocketMsg.setKeys(keys.toString());\n\t\t\t}\n\t\t\tObject flagObj = headers.getOrDefault(Headers.FLAG,\n\t\t\t\t\theaders.get(toRocketHeaderKey(Headers.FLAG)));\n\t\t\tObject delayLevelObj = headers.getOrDefault(","sourceCodeStart":126,"sourceCodeEnd":162,"githubUrl":"https://github.com/alibaba/spring-cloud-alibaba/blob/115d5901102009492e05d5ec18c3f79cad4077d0/spring-cloud-alibaba-starters/spring-cloud-starter-stream-rocketmq/src/main/java/com/alibaba/cloud/stream/binder/rocketmq/support/RocketMQMessageConverterSupport.java#L126-L162","documentation":"getAndWrapMessage throws IllegalArgumentException('payload must not be empty') when the payload byte array is null or zero-length. RocketMQ rejects empty message bodies, so the binder guards before constructing the Message.","triggerScenarios":"convertMessage2MQ resolves payloads to null/empty - e.g. an empty String payload, a byte[] of length 0, or a converted JSON that produced empty bytes.","commonSituations":"Sending an empty string or empty byte[]; a POJO whose JSON serialization is empty; a payload object whose JSON is blank; an upstream filter producing a null payload.","solutions":["Ensure outbound messages carry a non-empty body.","Filter/skip empty payloads upstream rather than sending them.","For POJOs, confirm the converter produces non-empty JSON."],"exampleFix":"// before\nMessage<String> m = MessageBuilder.withPayload(\"\").build(); // -> [138]\n// after\nif (payload == null || (payload instanceof String s && s.isEmpty())\n        || (payload instanceof byte[] b && b.length == 0)) {\n    return; // or throw a domain-specific error\n}\nMessage<String> m = MessageBuilder.withPayload(payload).build();","handlingStrategy":"validation","validationCode":"// Block empty bodies before they reach the converter.\nboolean empty = payload == null\n    || (payload instanceof String s && s.isEmpty())\n    || (payload instanceof byte[] b && b.length == 0);\nif (empty) {\n    throw new IllegalArgumentException(\"RocketMQ payload must be non-empty (avoids [138])\");\n}","typeGuard":"// Type guard narrowing non-empty payloads.\nstatic boolean isNonEmptyPayload(Object p) {\n    if (p == null) return false;\n    if (p instanceof String s) return !s.isEmpty();\n    if (p instanceof byte[] b) return b.length > 0;\n    return true; // let the converter decide\n}","tryCatchPattern":null,"preventionTips":["Never send null/empty message bodies.","Filter empty payloads in the upstream pipeline.","Verify POJO JSON is non-empty before sending."],"tags":["rocketmq","producer","validation","payload"],"backgroundTag":null,"analyzedSha":"115d5901102009492e05d5ec18c3f79cad4077d0","analyzedAt":"2026-08-14T04:47:13.900Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}