Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Spring CloudEventMessageConverter produce a null pointer exception if initial message header map is null #689

Copy link
Copy link
Open
@dade-hms

Description

@dade-hms
Issue body actions

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

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.