Skip to content

Commit a3152d9

Browse files
committed
Add @SuppressWarnings("removal") into some reported places
* Add missed new `JacksonJsonDeserializer` and `JacksonJsonSerializer` to `KafkaRuntimeHints` The project build is now green
1 parent c5787dc commit a3152d9

File tree

4 files changed

+106
-94
lines changed

4 files changed

+106
-94
lines changed

spring-kafka/src/main/java/org/springframework/kafka/aot/KafkaRuntimeHints.java

Lines changed: 49 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@
5858
import org.springframework.kafka.support.serializer.DelegatingDeserializer;
5959
import org.springframework.kafka.support.serializer.DelegatingSerializer;
6060
import org.springframework.kafka.support.serializer.ErrorHandlingDeserializer;
61-
import org.springframework.kafka.support.serializer.JsonDeserializer;
62-
import org.springframework.kafka.support.serializer.JsonSerializer;
61+
import org.springframework.kafka.support.serializer.JacksonJsonDeserializer;
62+
import org.springframework.kafka.support.serializer.JacksonJsonSerializer;
6363
import org.springframework.kafka.support.serializer.ParseStringDeserializer;
6464
import org.springframework.kafka.support.serializer.StringOrBytesSerializer;
6565
import org.springframework.kafka.support.serializer.ToStringSerializer;
@@ -75,73 +75,76 @@
7575
public class KafkaRuntimeHints implements RuntimeHintsRegistrar {
7676

7777
@Override
78+
@SuppressWarnings("removal")
7879
public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) {
7980
ReflectionHints reflectionHints = hints.reflection();
8081
Stream.of(
81-
ConsumerProperties.class,
82-
ContainerProperties.class,
83-
KafkaMessageHeaderAccessor.class,
84-
ProducerListener.class)
82+
ConsumerProperties.class,
83+
ContainerProperties.class,
84+
KafkaMessageHeaderAccessor.class,
85+
ProducerListener.class)
8586
.forEach(type -> reflectionHints.registerType(type,
8687
builder -> builder.withMembers(MemberCategory.INVOKE_DECLARED_METHODS)));
8788

8889
Stream.of(
89-
Message.class,
90-
ImplicitLinkedHashCollection.Element.class,
91-
NewTopic.class,
92-
AbstractKafkaListenerContainerFactory.class,
93-
ConcurrentKafkaListenerContainerFactory.class,
94-
KafkaListenerContainerFactory.class,
95-
KafkaListenerEndpointRegistry.class,
96-
DefaultKafkaConsumerFactory.class,
97-
DefaultKafkaProducerFactory.class,
98-
KafkaAdmin.class,
99-
KafkaOperations.class,
100-
KafkaResourceFactory.class,
101-
KafkaTemplate.class,
102-
ProducerFactory.class,
103-
ConsumerFactory.class,
104-
LoggingProducerListener.class,
105-
KafkaListenerAnnotationBeanPostProcessor.class)
90+
Message.class,
91+
ImplicitLinkedHashCollection.Element.class,
92+
NewTopic.class,
93+
AbstractKafkaListenerContainerFactory.class,
94+
ConcurrentKafkaListenerContainerFactory.class,
95+
KafkaListenerContainerFactory.class,
96+
KafkaListenerEndpointRegistry.class,
97+
DefaultKafkaConsumerFactory.class,
98+
DefaultKafkaProducerFactory.class,
99+
KafkaAdmin.class,
100+
KafkaOperations.class,
101+
KafkaResourceFactory.class,
102+
KafkaTemplate.class,
103+
ProducerFactory.class,
104+
ConsumerFactory.class,
105+
LoggingProducerListener.class,
106+
KafkaListenerAnnotationBeanPostProcessor.class)
106107
.forEach(type -> reflectionHints.registerType(type,
107108
builder -> builder.withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS,
108109
MemberCategory.INVOKE_DECLARED_METHODS)));
109110

110111
Stream.of(
111-
KafkaBootstrapConfiguration.class,
112-
CreatableTopic.class)
112+
KafkaBootstrapConfiguration.class,
113+
CreatableTopic.class)
113114
.forEach(type -> reflectionHints.registerType(type,
114115
builder -> builder.withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS)));
115116

116117
Stream.of(
117-
AppInfo.class,
118-
// standard serialization
119-
// Spring serialization
120-
DelegatingByTopicDeserializer.class,
121-
DelegatingByTypeSerializer.class,
122-
DelegatingDeserializer.class,
123-
ErrorHandlingDeserializer.class,
124-
DelegatingSerializer.class,
125-
JsonDeserializer.class,
126-
JsonSerializer.class,
127-
ParseStringDeserializer.class,
128-
StringOrBytesSerializer.class,
129-
ToStringSerializer.class,
130-
Serdes.class,
131-
CRC32C.class)
118+
AppInfo.class,
119+
// standard serialization
120+
// Spring serialization
121+
DelegatingByTopicDeserializer.class,
122+
DelegatingByTypeSerializer.class,
123+
DelegatingDeserializer.class,
124+
ErrorHandlingDeserializer.class,
125+
DelegatingSerializer.class,
126+
org.springframework.kafka.support.serializer.JsonDeserializer.class,
127+
org.springframework.kafka.support.serializer.JsonSerializer.class,
128+
JacksonJsonDeserializer.class,
129+
JacksonJsonSerializer.class,
130+
ParseStringDeserializer.class,
131+
StringOrBytesSerializer.class,
132+
ToStringSerializer.class,
133+
Serdes.class,
134+
CRC32C.class)
132135
.forEach(type -> reflectionHints.registerType(type, builder ->
133136
builder.withMembers(MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS)));
134137

135138
hints.proxies().registerJdkProxy(AopProxyUtils.completeJdkProxyInterfaces(Consumer.class));
136139
hints.proxies().registerJdkProxy(AopProxyUtils.completeJdkProxyInterfaces(Producer.class));
137140

138141
Stream.of(
139-
"sun.security.provider.ConfigFile",
140-
"org.apache.kafka.streams.processor.internals.assignment.StickyTaskAssignor",
141-
"org.apache.kafka.streams.processor.internals.assignment.FallbackPriorTaskAssignor",
142-
"org.apache.kafka.streams.errors.LogAndFailProcessingExceptionHandler")
143-
.forEach(type -> reflectionHints.registerTypeIfPresent(classLoader, type, builder ->
144-
builder.withMembers(MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS)));
142+
"sun.security.provider.ConfigFile",
143+
"org.apache.kafka.streams.processor.internals.assignment.StickyTaskAssignor",
144+
"org.apache.kafka.streams.processor.internals.assignment.FallbackPriorTaskAssignor",
145+
"org.apache.kafka.streams.errors.LogAndFailProcessingExceptionHandler")
146+
.forEach(type -> reflectionHints.registerTypeIfPresent(classLoader, type, builder ->
147+
builder.withMembers(MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS)));
145148
}
146149

147150
}

spring-kafka/src/main/java/org/springframework/kafka/support/converter/MappingJacksonParameterizedConverter.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,12 @@
2626
import org.jspecify.annotations.Nullable;
2727

2828
import org.springframework.kafka.support.KafkaHeaders;
29-
import org.springframework.kafka.support.mapping.DefaultJackson2JavaTypeMapper;
30-
import org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper;
31-
import org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper.TypePrecedence;
3229
import org.springframework.messaging.Message;
33-
import org.springframework.messaging.converter.MappingJackson2MessageConverter;
3430
import org.springframework.util.Assert;
3531
import org.springframework.util.MimeType;
3632

3733
/**
38-
* Subclass of {@link MappingJackson2MessageConverter} that can handle parameterized
34+
* Subclass of {@link org.springframework.messaging.converter.MappingJackson2MessageConverter} that can handle parameterized
3935
* (generic) types.
4036
*
4137
* @author Gary Russell
@@ -44,11 +40,14 @@
4440
* @deprecated since 4.0 in favor of {@link MappingJacksonJsonParameterizedConverter} for Jackson 3.
4541
*/
4642
@Deprecated(forRemoval = true, since = "4.0")
47-
public class MappingJacksonParameterizedConverter extends MappingJackson2MessageConverter {
43+
@SuppressWarnings("removal")
44+
public class MappingJacksonParameterizedConverter
45+
extends org.springframework.messaging.converter.MappingJackson2MessageConverter {
4846

4947
private static final JavaType OBJECT = TypeFactory.defaultInstance().constructType(Object.class);
5048

51-
private Jackson2JavaTypeMapper typeMapper = new DefaultJackson2JavaTypeMapper();
49+
private org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper typeMapper =
50+
new org.springframework.kafka.support.mapping.DefaultJackson2JavaTypeMapper();
5251

5352
/**
5453
* Construct a {@code MappingJacksonParameterizedConverter} supporting
@@ -70,15 +69,15 @@ public MappingJacksonParameterizedConverter(MimeType... supportedMimeTypes) {
7069
* Return the type mapper.
7170
* @return the mapper.
7271
*/
73-
public Jackson2JavaTypeMapper getTypeMapper() {
72+
public org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper getTypeMapper() {
7473
return this.typeMapper;
7574
}
7675

7776
/**
7877
* Set a customized type mapper.
7978
* @param typeMapper the type mapper.
8079
*/
81-
public void setTypeMapper(Jackson2JavaTypeMapper typeMapper) {
80+
public void setTypeMapper(org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper typeMapper) {
8281
Assert.notNull(typeMapper, "'typeMapper' cannot be null");
8382
this.typeMapper = typeMapper;
8483
}
@@ -119,7 +118,8 @@ private JavaType determineJavaType(Message<?> message, @Nullable Object hint) {
119118
type = (Type) hint;
120119
Headers nativeHeaders = message.getHeaders().get(KafkaHeaders.NATIVE_HEADERS, Headers.class);
121120
if (nativeHeaders != null) {
122-
javaType = this.typeMapper.getTypePrecedence().equals(TypePrecedence.INFERRED)
121+
javaType = this.typeMapper.getTypePrecedence()
122+
.equals(org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper.TypePrecedence.INFERRED)
123123
? TypeFactory.defaultInstance().constructType(type)
124124
: this.typeMapper.toJavaType(nativeHeaders);
125125
}

spring-kafka/src/main/java/org/springframework/kafka/support/serializer/JsonDeserializer.java

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,6 @@
4040
import org.jspecify.annotations.Nullable;
4141

4242
import org.springframework.core.ResolvableType;
43-
import org.springframework.kafka.support.JacksonUtils;
44-
import org.springframework.kafka.support.mapping.AbstractJavaTypeMapper;
45-
import org.springframework.kafka.support.mapping.DefaultJackson2JavaTypeMapper;
46-
import org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper;
47-
import org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper.TypePrecedence;
4843
import org.springframework.util.Assert;
4944
import org.springframework.util.ClassUtils;
5045
import org.springframework.util.StringUtils;
@@ -71,6 +66,7 @@
7166
* @deprecated since 4.0 in favor of {@link JacksonJsonDeserializer} for Jackson 3.
7267
*/
7368
@Deprecated(forRemoval = true, since = "4.0")
69+
@SuppressWarnings("removal")
7470
public class JsonDeserializer<T> implements Deserializer<T> {
7571

7672
/**
@@ -134,7 +130,8 @@ public class JsonDeserializer<T> implements Deserializer<T> {
134130

135131
protected @Nullable JavaType targetType; // NOSONAR
136132

137-
protected Jackson2JavaTypeMapper typeMapper = new DefaultJackson2JavaTypeMapper(); // NOSONAR
133+
protected org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper typeMapper =
134+
new org.springframework.kafka.support.mapping.DefaultJackson2JavaTypeMapper(); // NOSONAR
138135

139136
private @Nullable ObjectReader reader;
140137

@@ -203,7 +200,7 @@ public JsonDeserializer(@Nullable JavaType targetType) {
203200
* @since 2.2
204201
*/
205202
public JsonDeserializer(@Nullable Class<? super T> targetType, boolean useHeadersIfPresent) {
206-
this(targetType, JacksonUtils.enhancedObjectMapper(), useHeadersIfPresent);
203+
this(targetType, org.springframework.kafka.support.JacksonUtils.enhancedObjectMapper(), useHeadersIfPresent);
207204
}
208205

209206
/**
@@ -215,7 +212,7 @@ public JsonDeserializer(@Nullable Class<? super T> targetType, boolean useHeader
215212
* @since 2.3
216213
*/
217214
public JsonDeserializer(@Nullable TypeReference<? super T> targetType, boolean useHeadersIfPresent) {
218-
this(targetType, JacksonUtils.enhancedObjectMapper(), useHeadersIfPresent);
215+
this(targetType, org.springframework.kafka.support.JacksonUtils.enhancedObjectMapper(), useHeadersIfPresent);
219216
}
220217

221218
/**
@@ -227,7 +224,7 @@ public JsonDeserializer(@Nullable TypeReference<? super T> targetType, boolean u
227224
* @since 2.3
228225
*/
229226
public JsonDeserializer(@Nullable JavaType targetType, boolean useHeadersIfPresent) {
230-
this(targetType, JacksonUtils.enhancedObjectMapper(), useHeadersIfPresent);
227+
this(targetType, org.springframework.kafka.support.JacksonUtils.enhancedObjectMapper(), useHeadersIfPresent);
231228
}
232229

233230
/**
@@ -318,22 +315,22 @@ public JsonDeserializer(@Nullable JavaType targetType, ObjectMapper objectMapper
318315
initialize(targetType, useHeadersIfPresent);
319316
}
320317

321-
public Jackson2JavaTypeMapper getTypeMapper() {
318+
public org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper getTypeMapper() {
322319
return this.typeMapper;
323320
}
324321

325322
/**
326-
* Set a customized type mapper. If the mapper is an {@link AbstractJavaTypeMapper},
323+
* Set a customized type mapper. If the mapper is an {@link org.springframework.kafka.support.mapping.AbstractJavaTypeMapper},
327324
* any class mappings configured in the mapper will be added to the trusted packages.
328325
* @param typeMapper the type mapper.
329326
* @since 2.1
330327
*/
331-
public void setTypeMapper(Jackson2JavaTypeMapper typeMapper) {
328+
public void setTypeMapper(org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper typeMapper) {
332329
Assert.notNull(typeMapper, "'typeMapper' cannot be null");
333330
this.typeMapper = typeMapper;
334331
this.typeMapperExplicitlySet = true;
335-
if (typeMapper instanceof AbstractJavaTypeMapper) {
336-
addMappingsToTrusted(((AbstractJavaTypeMapper) typeMapper).getIdClassMapping());
332+
if (typeMapper instanceof org.springframework.kafka.support.mapping.AbstractJavaTypeMapper typeMapperToUse) {
333+
addMappingsToTrusted(typeMapperToUse.getIdClassMapping());
337334
}
338335
this.setterCalled = true;
339336
}
@@ -350,8 +347,8 @@ public void setUseTypeMapperForKey(boolean isKey) {
350347

351348
private void doSetUseTypeMapperForKey(boolean isKey) {
352349
if (!this.typeMapperExplicitlySet
353-
&& this.getTypeMapper() instanceof AbstractJavaTypeMapper) {
354-
((AbstractJavaTypeMapper) this.getTypeMapper()).setUseForKey(isKey);
350+
&& this.getTypeMapper() instanceof org.springframework.kafka.support.mapping.AbstractJavaTypeMapper typeMapperToUse) {
351+
typeMapperToUse.setUseForKey(isKey);
355352
}
356353
}
357354

@@ -422,8 +419,8 @@ public void configure(Map<String, ?> configs, boolean isKey) {
422419
StringUtils.delimitedListToStringArray((String) configs.get(TRUSTED_PACKAGES), ",", " \r\n\f\t"));
423420
}
424421
if (configs.containsKey(TYPE_MAPPINGS) && !this.typeMapperExplicitlySet
425-
&& this.typeMapper instanceof AbstractJavaTypeMapper) {
426-
((AbstractJavaTypeMapper) this.typeMapper).setIdClassMapping(createMappings(configs));
422+
&& this.typeMapper instanceof org.springframework.kafka.support.mapping.AbstractJavaTypeMapper typeMapperToUse) {
423+
typeMapperToUse.setIdClassMapping(createMappings(configs));
427424
}
428425
if (configs.containsKey(REMOVE_TYPE_INFO_HEADERS)) {
429426
this.removeTypeHeaders = Boolean.parseBoolean(configs.get(REMOVE_TYPE_INFO_HEADERS).toString());
@@ -469,8 +466,8 @@ private void setUpTypeResolver(String method) {
469466
catch (IllegalStateException e) {
470467
if (e.getCause() instanceof NoSuchMethodException) {
471468
this.typeResolver = (topic, data, headers) ->
472-
(JavaType) SerializationUtils.propertyToMethodInvokingFunction(
473-
method, byte[].class, getClass().getClassLoader()).apply(data, headers);
469+
(JavaType) SerializationUtils.propertyToMethodInvokingFunction(
470+
method, byte[].class, getClass().getClassLoader()).apply(data, headers);
474471
return;
475472
}
476473
throw e;
@@ -482,7 +479,10 @@ private void setUpTypePrecedence(Map<String, ?> configs) {
482479
if (configs.containsKey(USE_TYPE_INFO_HEADERS)) {
483480
this.useTypeHeaders = Boolean.parseBoolean(configs.get(USE_TYPE_INFO_HEADERS).toString());
484481
}
485-
this.typeMapper.setTypePrecedence(this.useTypeHeaders ? TypePrecedence.TYPE_ID : TypePrecedence.INFERRED);
482+
this.typeMapper.setTypePrecedence(
483+
this.useTypeHeaders
484+
? org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper.TypePrecedence.TYPE_ID
485+
: org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper.TypePrecedence.INFERRED);
486486
}
487487
}
488488

@@ -497,7 +497,9 @@ else if (!isKey && configs.containsKey(VALUE_DEFAULT_TYPE)) {
497497
}
498498

499499
if (javaType != null) {
500-
initialize(javaType, TypePrecedence.TYPE_ID.equals(this.typeMapper.getTypePrecedence()));
500+
initialize(javaType,
501+
org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper.TypePrecedence.TYPE_ID
502+
.equals(this.typeMapper.getTypePrecedence()));
501503
}
502504
}
503505
catch (ClassNotFoundException | LinkageError e) {
@@ -516,7 +518,10 @@ private void initialize(@Nullable JavaType type, boolean useHeadersIfPresent) {
516518
}
517519

518520
addTargetPackageToTrusted();
519-
this.typeMapper.setTypePrecedence(useHeadersIfPresent ? TypePrecedence.TYPE_ID : TypePrecedence.INFERRED);
521+
this.typeMapper.setTypePrecedence(
522+
useHeadersIfPresent
523+
? org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper.TypePrecedence.TYPE_ID
524+
: org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper.TypePrecedence.INFERRED);
520525
}
521526

522527
private JavaType setupTargetType(Map<String, ?> configs, String key) throws ClassNotFoundException, LinkageError {
@@ -525,7 +530,7 @@ private JavaType setupTargetType(Map<String, ?> configs, String key) throws Clas
525530
}
526531
else if (configs.get(key) instanceof String) {
527532
return TypeFactory.defaultInstance()
528-
.constructType(ClassUtils.forName((String) configs.get(key), null));
533+
.constructType(ClassUtils.forName((String) configs.get(key), null));
529534
}
530535
else {
531536
throw new IllegalStateException(key + " must be Class or String");
@@ -587,7 +592,9 @@ private void doAddTrustedPackages(String... packages) {
587592
if (this.typeResolver != null) {
588593
javaType = this.typeResolver.resolveType(topic, data, headers);
589594
}
590-
if (javaType == null && this.typeMapper.getTypePrecedence().equals(TypePrecedence.TYPE_ID)) {
595+
if (javaType == null && this.typeMapper.getTypePrecedence()
596+
.equals(org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper.TypePrecedence.TYPE_ID)) {
597+
591598
javaType = this.typeMapper.toJavaType(headers);
592599
}
593600
if (javaType != null) {
@@ -708,13 +715,13 @@ public JsonDeserializer<T> ignoreTypeHeaders() {
708715
}
709716

710717
/**
711-
* Use the supplied {@link Jackson2JavaTypeMapper}.
718+
* Use the supplied {@link org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper}.
712719
* @param mapper the mapper.
713720
* @return the deserializer.
714721
* @since 2.3
715-
* @see #setTypeMapper(Jackson2JavaTypeMapper)
722+
* @see #setTypeMapper(org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper)
716723
*/
717-
public JsonDeserializer<T> typeMapper(Jackson2JavaTypeMapper mapper) {
724+
public JsonDeserializer<T> typeMapper(org.springframework.kafka.support.mapping.Jackson2JavaTypeMapper mapper) {
718725
setTypeMapper(mapper);
719726
return this;
720727
}
@@ -723,7 +730,7 @@ public JsonDeserializer<T> typeMapper(Jackson2JavaTypeMapper mapper) {
723730
* Add trusted packages to the default type mapper.
724731
* @param packages the packages.
725732
* @return the deserializer.
726-
* @since 2,5
733+
* @since 2, 5
727734
*/
728735
public JsonDeserializer<T> trustedPackages(String... packages) {
729736
try {

0 commit comments

Comments
 (0)