{"record":{"id":"e6b58a180642c8f9","repo":"alibaba/spring-cloud-alibaba","slug":"convert-to-rocketmq-message-failed","errorCode":null,"errorMessage":"convert to RocketMQ message failed.","messagePattern":"convert to RocketMQ message failed\\.","errorType":"exception","errorClass":"RuntimeException","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":133,"sourceCode":"\t\t\t\tpayloads = payload.getBytes(charset);\n\t\t\t}\n\t\t\telse if (payloadObj instanceof byte[] payload) {\n\t\t\t\tpayloads = payload;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tString jsonObj = (String) MESSAGE_CONVERTER.fromMessage(message,\n\t\t\t\t\t\tpayloadObj.getClass());\n\t\t\t\tif (null == jsonObj) {\n\t\t\t\t\tthrow new RuntimeException(String.format(\n\t\t\t\t\t\t\t\"empty after conversion [messageConverter:%s,payloadClass:%s,payloadObj:%s]\",\n\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)) {","sourceCodeStart":115,"sourceCodeEnd":151,"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#L115-L151","documentation":"The outer catch in convertMessage2MQ wraps any conversion failure (including the [135] null case, or charset/encoding exceptions) into RuntimeException('convert to RocketMQ message failed.', e). It is the umbrella error for all outbound payload-to-RocketMQ-message conversion problems.","triggerScenarios":"Any exception inside the conversion try block - fromMessage returning null ([135]), getBytes(charset) failing, or a converter throwing internally.","commonSituations":"A bad/unconfigured charset; a converter throwing on the specific payload; the [135] null-conversion bubbling up; a contentType mismatch causing the converter to throw.","solutions":["Inspect the wrapped cause (`e`) - it is usually [135] or a charset/encoding error.","Ensure a valid charset and a MessageConverter for the payload type.","Set contentType correctly and pre-convert if necessary."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Validate charset before conversion.\nCharset cs;\ntry {\n    cs = Charset.forName(mqProducerProperties.getCharset() != null\n        ? mqProducerProperties.getCharset() : StandardCharsets.UTF_8.name());\n} catch (Exception ex) {\n    throw new IllegalArgumentException(\"Invalid charset for RocketMQ conversion\", ex);\n}","typeGuard":null,"tryCatchPattern":"// Unwrap to diagnose the real conversion problem.\ntry {\n    handler.handleMessage(msg);\n} catch (RuntimeException ex) {\n    if (ex.getMessage() != null && ex.getMessage().startsWith(\"convert to RocketMQ message failed\")) {\n        log.error(\"Conversion root cause: {}\", ex.getCause());\n    }\n    throw ex;\n}","preventionTips":["Always examine the wrapped cause, not the umbrella message.","Keep charset config valid (default UTF-8).","Cover payload types with a registered converter."],"tags":["rocketmq","producer","serialization","converter"],"backgroundTag":null,"analyzedSha":"115d5901102009492e05d5ec18c3f79cad4077d0","analyzedAt":"2026-08-14T04:47:13.900Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}