Spring CloudEventMessageConverter produce a null pointer exception if initial message header map is null
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 72/100
調査の方向性
io.cloudevents.spring.messaging.CloudEventMessageConverter#toMessage と MessageBuilderMessageWriter から始め、特に stack trace に示されているコンストラクターを確認します。カスタムヘッダーなしで RabbitMessagingTemplate.convertAndSend の呼び出しを再現し、その後、null のヘッダーマップが例外を発生させなくなり、CloudEvent が正常に変換されることを示すテストカバレッジを追加します。
索引モデルが issue の本文から書いたものです。
説明
Step to reproduce
Declare a Rabbit templating using converter
@Bean
public RabbitMessagingTemplate rabbitMessagingTemplate(RabbitTemplate rabbitTemplate, CloudEventMessageConverter cloudEventMessageConverter) {
var rmt = new RabbitMessagingTemplate(rabbitTemplate);
rmt.setMessageConverter(cloudEventMessageConverter);
return rmt;
}
Use it to publish a message
rabbitMessagingTemplate.convertAndSend("my.routing.key", CloudEventBuilder.v1()
.withId(UUID.randomUUID().toString())
.withType("mytype")
.withSource(new URI("my:urisource"))
.withData(new BytesCloudEventData("{\"data\":\"test\"}".getBytes()))
.build());
Result
NPE
java.lang.NullPointerException: Cannot invoke "java.util.Map.size()" because "m" is null
at java.base/java.util.HashMap.putMapEntries(HashMap.java:495)
at java.base/java.util.HashMap.putAll(HashMap.java:783)
at io.cloudevents.spring.messaging.MessageBuilderMessageWriter.<init>(MessageBuilderMessageWriter.java:45)
at io.cloudevents.spring.messaging.CloudEventMessageConverter.toMessage(CloudEventMessageConverter.java:54)
at org.springframework.messaging.core.AbstractMessageSendingTemplate.doConvert(AbstractMessageSendingTemplate.java:177)
at org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:150)
at org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:129)
at org.springframework.messaging.core.AbstractMessageSendingTemplate.convertAndSend(AbstractMessageSendingTemplate.java:122)
Solution
In call to io.cloudevents.spring.messaging.CloudEventMessageConverter#toMessage, the provided headers field can be null if caller didn't provide custom headers. A null check should be done and MessabeBilderMessageWriter should be called with default constructor in that case.
Workaround
use RabbitMessagingTemplate send methods that take a map as parameter
- 主要言語
- Java
- スター
- 446
- フォーク
- 172
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
cloudevents/sdk-java のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
cloudevents/sdk-java#731 · リアクション 1 件 ·
-
bug
難易度 1/5 1〜3時間 初心者へのやさしさ 88/100
cloudevents/sdk-java#697 · コメント 3 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
cloudevents/sdk-java#660 · コメント 2 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 38/100
cloudevents/sdk-java#748 ·
-
難易度 3/5 1〜2日 初心者へのやさしさ 48/100
cloudevents/sdk-java#711 · コメント 1 件 ·
cloudevents/sdk-java の issue をすべて見る
似ている issue
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
liquid-java/liquidjava#321 ·
メンテナーはふだん 2 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 88/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
OpenConext/OpenConext-access#1015 ·
メンテナーはふだん 1 日以内に返信
-
68000: FDBcc branch target is 2 bytes too low (uses inst_start+2 instead of the displacement word)オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
NationalSecurityAgency/ghidra#9702 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
apache/rocketmq-dashboard#5358 ·
メンテナーはふだん 3 日以内に返信