Skip to content

Commit 0bc432a

Browse files
committed
Mitigate removal warnings for Jackson APIs
Many components ins Spring projects based on the Jackson 2 are deprecated now for removal. That includes our own classes. * Replace deprecated classes with their new counterparts * Add `@SuppressWarnings("removal")` in places where we still use deprecated API. In most cases those are our own already deprecated classes. Or places where we still would like to keep Jackson 2 support, like `ConverterRegistrar` where there is no easy way for end-users to inject their own converters Related to: #10058
1 parent cc8f1db commit 0bc432a

File tree

25 files changed

+63
-210
lines changed

25 files changed

+63
-210
lines changed

spring-integration-amqp/src/test/java/org/springframework/integration/amqp/dsl/AmqpTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
import org.springframework.amqp.rabbit.listener.DirectMessageListenerContainer;
4444
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
4545
import org.springframework.amqp.rabbit.support.ListenerExecutionFailedException;
46-
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
46+
import org.springframework.amqp.support.converter.JacksonJsonMessageConverter;
4747
import org.springframework.amqp.support.converter.MessageConversionException;
4848
import org.springframework.amqp.support.converter.SimpleMessageConverter;
4949
import org.springframework.beans.factory.annotation.Autowired;
@@ -259,7 +259,7 @@ void testContentTypeOverrideWithReplyHeadersMappedLast() {
259259
this.integrationFlowContext.registration(testFlow).register();
260260

261261
RabbitTemplate rabbitTemplate = new RabbitTemplate(this.rabbitConnectionFactory);
262-
rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
262+
rabbitTemplate.setMessageConverter(new JacksonJsonMessageConverter());
263263

264264
Object result = rabbitTemplate.convertSendAndReceive(this.amqpQueue2.getName(),
265265
new HashMap<>(Collections.singletonMap("TEST_KEY", "TEST_VALUE")));

spring-integration-amqp/src/test/java/org/springframework/integration/amqp/inbound/InboundEndpointTests.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
import org.springframework.amqp.rabbit.retry.MessageBatchRecoverer;
4343
import org.springframework.amqp.rabbit.support.ListenerExecutionFailedException;
4444
import org.springframework.amqp.support.AmqpHeaders;
45-
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
45+
import org.springframework.amqp.support.converter.JacksonJsonMessageConverter;
4646
import org.springframework.amqp.support.converter.MessageConversionException;
4747
import org.springframework.amqp.support.converter.MessageConverter;
4848
import org.springframework.amqp.support.converter.SimpleMessageConverter;
@@ -100,7 +100,7 @@ public void testInt2809JavaTypePropertiesToAmqp() throws Exception {
100100
container.setAcknowledgeMode(AcknowledgeMode.MANUAL);
101101

102102
AmqpInboundChannelAdapter adapter = new AmqpInboundChannelAdapter(container);
103-
adapter.setMessageConverter(new Jackson2JsonMessageConverter());
103+
adapter.setMessageConverter(new JacksonJsonMessageConverter());
104104

105105
PollableChannel channel = new QueueChannel();
106106

@@ -154,7 +154,7 @@ public void testInt2809JavaTypePropertiesFromAmqp() throws Exception {
154154

155155
MessageProperties amqpMessageProperties = new MessageProperties();
156156
org.springframework.amqp.core.Message amqpMessage =
157-
new Jackson2JsonMessageConverter().toMessage(payload, amqpMessageProperties);
157+
new JacksonJsonMessageConverter().toMessage(payload, amqpMessageProperties);
158158

159159
ChannelAwareMessageListener listener = (ChannelAwareMessageListener) container.getMessageListener();
160160
listener.onMessage(amqpMessage, null);
@@ -193,7 +193,7 @@ public void testMessageConverterJsonHeadersHavePrecedenceOverMessageHeaders() th
193193
}));
194194

195195
RabbitTemplate rabbitTemplate = spy(new RabbitTemplate());
196-
rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
196+
rabbitTemplate.setMessageConverter(new JacksonJsonMessageConverter());
197197

198198
CountDownLatch sendLatch = new CountDownLatch(1);
199199

@@ -214,7 +214,7 @@ public void testMessageConverterJsonHeadersHavePrecedenceOverMessageHeaders() th
214214
.send(anyString(), anyString(), any(org.springframework.amqp.core.Message.class), isNull());
215215

216216
AmqpInboundGateway gateway = new AmqpInboundGateway(container, rabbitTemplate);
217-
gateway.setMessageConverter(new Jackson2JsonMessageConverter());
217+
gateway.setMessageConverter(new JacksonJsonMessageConverter());
218218
gateway.setRequestChannel(channel);
219219
gateway.setBeanFactory(mock(BeanFactory.class));
220220
gateway.setDefaultReplyTo("foo");
@@ -226,7 +226,7 @@ public void testMessageConverterJsonHeadersHavePrecedenceOverMessageHeaders() th
226226
MessageProperties amqpMessageProperties = new MessageProperties();
227227
amqpMessageProperties.setDeliveryTag(123L);
228228
org.springframework.amqp.core.Message amqpMessage =
229-
new Jackson2JsonMessageConverter().toMessage(payload, amqpMessageProperties);
229+
new JacksonJsonMessageConverter().toMessage(payload, amqpMessageProperties);
230230

231231
ChannelAwareMessageListener listener = (ChannelAwareMessageListener) container.getMessageListener();
232232
listener.onMessage(amqpMessage, rabbitChannel);

spring-integration-amqp/src/test/java/org/springframework/integration/amqp/outbound/OutboundEndpointTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
import org.springframework.amqp.rabbit.connection.CorrelationData;
3030
import org.springframework.amqp.rabbit.core.RabbitTemplate;
3131
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
32-
import org.springframework.amqp.support.converter.AbstractJavaTypeMapper;
32+
import org.springframework.amqp.support.converter.DefaultJacksonJavaTypeMapper;
3333
import org.springframework.beans.factory.BeanFactory;
3434
import org.springframework.core.ResolvableType;
3535
import org.springframework.integration.amqp.support.DefaultAmqpHeaderMapper;
@@ -175,7 +175,7 @@ public void testReplyHeadersWin() {
175175
endpoint.setExpectReply(true);
176176
willAnswer(invocation ->
177177
org.springframework.amqp.core.MessageBuilder.withBody(new byte[0])
178-
.setHeader(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME, String.class.getName())
178+
.setHeader(DefaultJacksonJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME, String.class.getName())
179179
.build()
180180
).given(amqpTemplate)
181181
.doSendAndReceiveWithTemporary(isNull(), isNull(), any(Message.class), isNull());
@@ -188,7 +188,7 @@ public void testReplyHeadersWin() {
188188
org.springframework.messaging.Message<?> receive = replyChannel.receive(10_000);
189189
assertThat(receive).isNotNull();
190190
assertThat(receive.getHeaders())
191-
.containsEntry(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME, String.class.getName())
191+
.containsEntry(DefaultJacksonJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME, String.class.getName())
192192
.containsEntry(JsonHeaders.TYPE_ID, String.class.getName())
193193
.containsEntry(JsonHeaders.RESOLVABLE_TYPE, ResolvableType.forClass(String.class));
194194
}

spring-integration-amqp/src/test/java/org/springframework/integration/amqp/support/DefaultAmqpHeaderMapperTests.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@
2828
import org.springframework.amqp.core.MessageDeliveryMode;
2929
import org.springframework.amqp.core.MessageProperties;
3030
import org.springframework.amqp.support.AmqpHeaders;
31-
import org.springframework.amqp.support.converter.AbstractJavaTypeMapper;
32-
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
31+
import org.springframework.amqp.support.converter.DefaultJacksonJavaTypeMapper;
32+
import org.springframework.amqp.support.converter.JacksonJsonMessageConverter;
3333
import org.springframework.amqp.support.converter.MessageConverter;
3434
import org.springframework.core.ResolvableType;
3535
import org.springframework.http.MediaType;
@@ -265,7 +265,7 @@ public void messageTimestampNotMappedToAmqpProperties() {
265265
@Test
266266
public void jsonTypeIdNotOverwritten() {
267267
DefaultAmqpHeaderMapper headerMapper = DefaultAmqpHeaderMapper.inboundMapper();
268-
MessageConverter converter = new Jackson2JsonMessageConverter();
268+
MessageConverter converter = new JacksonJsonMessageConverter();
269269
MessageProperties amqpProperties = new MessageProperties();
270270
converter.toMessage("123", amqpProperties);
271271
Map<String, Object> headerMap = new HashMap<>();
@@ -329,11 +329,11 @@ public void jsonHeadersNotMapped() {
329329
DefaultAmqpHeaderMapper headerMapper = DefaultAmqpHeaderMapper.inboundMapper();
330330
headerMapper.setRequestHeaderNames("!json_*", "*");
331331
MessageProperties amqpProperties = new MessageProperties();
332-
amqpProperties.getHeaders().put(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME, "test.type");
332+
amqpProperties.getHeaders().put(DefaultJacksonJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME, "test.type");
333333
Map<String, Object> headers = headerMapper.toHeadersFromRequest(amqpProperties);
334334
assertThat(headers)
335335
.doesNotContainKeys(JsonHeaders.RESOLVABLE_TYPE, JsonHeaders.TYPE_ID)
336-
.containsKey(AbstractJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME);
336+
.containsKey(DefaultJacksonJavaTypeMapper.DEFAULT_CLASSID_FIELD_NAME);
337337
}
338338

339339
}

spring-integration-amqp/src/test/java/org/springframework/integration/amqp/support/JsonConverterCompatibilityTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import org.springframework.amqp.rabbit.junit.RabbitAvailable;
2828
import org.springframework.amqp.rabbit.junit.RabbitAvailableCondition;
2929
import org.springframework.amqp.rabbit.support.DefaultMessagePropertiesConverter;
30-
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
30+
import org.springframework.amqp.support.converter.JacksonJsonMessageConverter;
3131
import org.springframework.integration.json.ObjectToJsonTransformer;
3232
import org.springframework.messaging.Message;
3333
import org.springframework.messaging.support.GenericMessage;
@@ -49,7 +49,7 @@ public class JsonConverterCompatibilityTests {
4949
@BeforeEach
5050
public void setUp() {
5151
this.rabbitTemplate = new RabbitTemplate(new CachingConnectionFactory("localhost"));
52-
this.rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
52+
this.rabbitTemplate.setMessageConverter(new JacksonJsonMessageConverter());
5353
}
5454

5555
@AfterEach
@@ -61,7 +61,7 @@ public void tearDown() {
6161
@Test
6262
public void testInbound() {
6363
@SuppressWarnings("unchecked") final Message<String> out = (Message<String>) new ObjectToJsonTransformer()
64-
.transform(new GenericMessage<Foo>(new Foo()));
64+
.transform(new GenericMessage<>(new Foo()));
6565
MessageProperties messageProperties = new MessageProperties();
6666
DefaultAmqpHeaderMapper.outboundMapper().fromHeadersToRequest(out.getHeaders(), messageProperties);
6767
final BasicProperties props = new DefaultMessagePropertiesConverter().fromMessageProperties(messageProperties,

spring-integration-core/src/main/java/org/springframework/integration/config/AbstractMethodAnnotationPostProcessor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public abstract class AbstractMethodAnnotationPostProcessor<T extends Annotation
148148
@SuppressWarnings("NullAway.Init")
149149
private volatile DestinationResolver<MessageChannel> channelResolver;
150150

151-
@SuppressWarnings("NullAway")
151+
@SuppressWarnings({"NullAway", "unchecked"})
152152
public AbstractMethodAnnotationPostProcessor() {
153153
this.messageHandlerAttributes.add(SEND_TIMEOUT_ATTRIBUTE);
154154
this.annotationType =
@@ -632,7 +632,7 @@ private ReactiveStreamsConsumer reactiveStreamsConsumer(MessageChannel channel,
632632
ReactiveStreamsConsumer reactiveStreamsConsumer;
633633
if (handler instanceof ReactiveMessageHandlerAdapter reactiveMessageHandlerAdapter) {
634634
reactiveStreamsConsumer = new ReactiveStreamsConsumer(channel,
635-
reactiveMessageHandlerAdapter.getDelegate());
635+
reactiveMessageHandlerAdapter.getDelegate());
636636
}
637637
else {
638638
reactiveStreamsConsumer = new ReactiveStreamsConsumer(channel, handler);

spring-integration-core/src/main/java/org/springframework/integration/config/ConverterRegistrar.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.springframework.core.convert.support.ConversionServiceFactory;
2828
import org.springframework.core.convert.support.GenericConversionService;
2929
import org.springframework.integration.json.JsonNodeWrapperConverter;
30-
import org.springframework.integration.json.JsonNodeWrapperToJsonNodeConverter;
3130
import org.springframework.integration.support.json.JacksonPresent;
3231
import org.springframework.integration.support.utils.IntegrationUtils;
3332
import org.springframework.util.Assert;
@@ -69,6 +68,7 @@ public void afterPropertiesSet() {
6968
}
7069
}
7170

71+
@SuppressWarnings("removal")
7272
private void registerConverters(GenericConversionService conversionService) {
7373
Set<Object> converters =
7474
this.applicationContext.getBeansOfType(IntegrationConverterRegistration.class)
@@ -78,8 +78,9 @@ private void registerConverters(GenericConversionService conversionService) {
7878
if (JacksonPresent.isJackson3Present()) {
7979
converters.add(new JsonNodeWrapperConverter());
8080
}
81+
8182
if (JacksonPresent.isJackson2Present()) {
82-
converters.add(new JsonNodeWrapperToJsonNodeConverter());
83+
converters.add(new org.springframework.integration.json.JsonNodeWrapperToJsonNodeConverter());
8384
}
8485
ConversionServiceFactory.registerConverters(converters, conversionService);
8586
}

spring-integration-core/src/main/java/org/springframework/integration/json/JsonIndexAccessor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,13 @@
3636
* @author Sam Brannen
3737
*
3838
* @since 6.4
39+
*
3940
* @see JsonPropertyAccessor
41+
*
4042
* @deprecated Since 7.0 in favor of {@link JacksonIndexAccessor} for Jackson 3.
4143
*/
4244
@Deprecated(forRemoval = true, since = "7.0")
45+
@SuppressWarnings("removal")
4346
public class JsonIndexAccessor implements IndexAccessor {
4447

4548
private static final Class<?>[] SUPPORTED_CLASSES = { ArrayNode.class };

spring-integration-core/src/main/java/org/springframework/integration/support/converter/ConfigurableCompositeMessageConverter.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,13 @@
3030
import org.springframework.beans.factory.InitializingBean;
3131
import org.springframework.core.convert.ConversionService;
3232
import org.springframework.core.convert.support.DefaultConversionService;
33-
import org.springframework.integration.support.json.Jackson2JsonObjectMapper;
3433
import org.springframework.integration.support.json.JacksonJsonObjectMapper;
3534
import org.springframework.integration.support.json.JacksonPresent;
3635
import org.springframework.integration.support.utils.IntegrationUtils;
3736
import org.springframework.messaging.converter.ByteArrayMessageConverter;
3837
import org.springframework.messaging.converter.CompositeMessageConverter;
3938
import org.springframework.messaging.converter.GenericMessageConverter;
4039
import org.springframework.messaging.converter.JacksonJsonMessageConverter;
41-
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
4240
import org.springframework.messaging.converter.MessageConverter;
4341

4442
/**
@@ -111,6 +109,7 @@ public void afterPropertiesSet() {
111109
}
112110
}
113111

112+
@SuppressWarnings("removal")
114113
private static Collection<MessageConverter> initDefaults() {
115114
List<MessageConverter> converters = new LinkedList<>();
116115

@@ -121,9 +120,11 @@ private static Collection<MessageConverter> initDefaults() {
121120
converters.add(jsonMessageConverter);
122121
}
123122
else if (JacksonPresent.isJackson2Present()) {
124-
MappingJackson2MessageConverter mappingJackson2MessageConverter = new MappingJackson2MessageConverter();
123+
var mappingJackson2MessageConverter =
124+
new org.springframework.messaging.converter.MappingJackson2MessageConverter();
125125
mappingJackson2MessageConverter.setStrictContentTypeMatch(true);
126-
mappingJackson2MessageConverter.setObjectMapper(new Jackson2JsonObjectMapper().getObjectMapper());
126+
mappingJackson2MessageConverter.setObjectMapper(
127+
new org.springframework.integration.support.json.Jackson2JsonObjectMapper().getObjectMapper());
127128
converters.add(mappingJackson2MessageConverter);
128129
}
129130
converters.add(new ByteArrayMessageConverter());

spring-integration-core/src/main/java/org/springframework/integration/support/json/AdviceMessageJacksonDeserializer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
* @deprecated Since 7.0 in favor of {@link AdviceMessageJsonDeserializer} for Jackson 3.
3737
*/
3838
@Deprecated(since = "7.0", forRemoval = true)
39+
@SuppressWarnings("removal")
3940
public class AdviceMessageJacksonDeserializer extends MessageJacksonDeserializer<AdviceMessage<?>> {
4041

4142
private static final long serialVersionUID = 1L;

0 commit comments

Comments
 (0)