Skip to content

Don't use Jackson 3 specific API in places where we deal with Jackson 2 #10261

@artembilan

Description

@artembilan

An example is this code snippet from KafkaMessageDrivenChannelAdapter:

		if (JacksonPresent.isJackson2Present()) {
			MessagingMessageConverter messageConverter = new MessagingMessageConverter();
			// For consistency with the rest of Spring Integration channel adapters
			messageConverter.setGenerateMessageId(true);
			messageConverter.setGenerateTimestamp(true);
			DefaultKafkaHeaderMapper headerMapper = new DefaultKafkaHeaderMapper();
			headerMapper.addTrustedPackages(JacksonMessagingUtils.DEFAULT_TRUSTED_PACKAGES.toArray(new String[0]));
			messageConverter.setHeaderMapper(headerMapper);
			this.recordListener.setMessageConverter(messageConverter);
			this.batchListener.setMessageConverter(messageConverter);
		}

So, we are supposed to be in this if only when JacksonPresent.isJackson2Present().
However that JacksonMessagingUtils.DEFAULT_TRUSTED_PACKAGES is from Jackson 3 specific API.
And that leads to the:

Caused by: java.lang.NoClassDefFoundError: tools/jackson/databind/ValueSerializer
    at org.springframework.integration.kafka.inbound.KafkaMessageDrivenChannelAdapter.<init>(KafkaMessageDrivenChannelAdapter.java:141)

Use deprecated JacksonJsonUtils instead in those places.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions