当 `onMessage` 要转换的消息类型为 `byte[]` 时,报错:ClassCastException: java.lang.String cannot be cast to [B

オープン
#695 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
68/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
静か
技術スタック
java, spring
領域
backend

調査の方向性

rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java の543-551行目から開始し、その後 Spring Messaging の ByteArrayMessageConverter の動作を調査します。byte[] を期待する onMessage ハンドラーへの配信を再現し、byte[] ペイロードの処理を維持したまま、変換によって ClassCastException が発生しなくなっていることを確認します。

索引モデルが issue の本文から書いたものです。

説明

https://github.com/apache/rocketmq-spring/blob/b3963f76589a5348370ea990c15e3878806e2710/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java#L543-L551

image

我注意到这里当要转换的类型为 byte[] 时,会调用spring-messaging 的 ByteArrayMessageConverter 的 convertFromInternal,而这个方法会原样返回 payload。而截图的 L551 行,将 payload 设置成了 str,导致 String 到 byte[] 的类型转换异常 ClassCastException: java.lang.String cannot be cast to [B 。

org.springframework.messaging.converter.ByteArrayMessageConverter#convertFromInternal

    return message.getPayload();
主要言語
Java
スター
2.3k
フォーク
941
PR マージ指標
30日以内にマージされた PR はありません

環境構築

  • Dockerfile・Docker Compose ファイルなし
  • プルリクエストのテンプレートあり
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

apache/rocketmq-spring のほかの issue

apache/rocketmq-spring の issue をすべて見る

似ている issue

Java の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。