Open
Description
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
Metadata
Metadata
Assignees
Labels
No labels