Skip to content

Commit 9beb192

Browse files
committed
Upgrade to the latest milestones
* Fix Nullability for the `RabbitListenerObservation` according to the latest Micrometer * Fix deprecation warnings in Jackson 2 support classes since they use each other and report `removal` even if they are deprecated, too * Fix `DefaultJackson2JavaTypeMapperTests` to `DefaultJacksonJavaTypeMapperTests` and use Jackson 3 API for testing * Fix `Jackson2XmlMessageConverterTests` to `JacksonXmlMessageConverterTests` and use Jackson 3 API for testing
1 parent 51410ed commit 9beb192

File tree

10 files changed

+66
-49
lines changed

10 files changed

+66
-49
lines changed

build.gradle

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
buildscript {
2-
ext.kotlinVersion = '2.1.21'
2+
ext.kotlinVersion = '2.2.0'
33
ext.isCI = System.getenv('GITHUB_ACTION')
44
repositories {
55
mavenCentral()
@@ -38,7 +38,7 @@ ext {
3838
commonsHttpClientVersion = '5.4.4'
3939
commonsPoolVersion = '2.12.1'
4040
hamcrestVersion = '3.0'
41-
hibernateValidationVersion = '8.0.2.Final'
41+
hibernateValidationVersion = '9.0.1.Final'
4242
jacksonBomVersion = '2.19.2'
4343
jackson3Version = '3.0.0-rc6'
4444
jaywayJsonPathVersion = '2.9.0'
@@ -47,16 +47,16 @@ ext {
4747
log4jVersion = '2.24.3'
4848
logbackVersion = '1.5.18'
4949
micrometerDocsVersion = '1.0.4'
50-
micrometerVersion = '1.15.1-SNAPSHOT'
51-
micrometerTracingVersion = '1.5.2-SNAPSHOT'
50+
micrometerVersion = '1.16.0-M1'
51+
micrometerTracingVersion = '1.6.0-M1'
5252
mockitoVersion = '5.18.0'
5353
rabbitmqAmqpClientVersion = '0.6.0'
5454
rabbitmqStreamVersion = '1.1.0'
5555
rabbitmqVersion = '5.25.0'
56-
reactorVersion = '2025.0.0-SNAPSHOT'
57-
springDataVersion = '2025.1.0-SNAPSHOT'
56+
reactorVersion = '2025.0.0-M5'
57+
springDataVersion = '2025.1.0-M4'
5858
springRetryVersion = '2.0.12'
59-
springVersion = '7.0.0-SNAPSHOT'
59+
springVersion = '7.0.0-M7'
6060
testcontainersVersion = '1.21.3'
6161

6262
javaProjects = subprojects - project(':spring-amqp-bom')

spring-amqp/src/main/java/org/springframework/amqp/support/converter/AbstractJackson2MessageConverter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
* @deprecated since 4.0 in favor of {@link AbstractJacksonMessageConverter} for Jackson 3.
5656
*/
5757
@Deprecated(forRemoval = true, since = "4.0")
58+
@SuppressWarnings("removal")
5859
public abstract class AbstractJackson2MessageConverter extends AbstractMessageConverter
5960
implements BeanClassLoaderAware, SmartMessageConverter {
6061

spring-amqp/src/main/java/org/springframework/amqp/support/converter/DefaultJackson2JavaTypeMapper.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
* @deprecated since 4.0 in favor of {@link DefaultJacksonJavaTypeMapper} for Jackson 3.
4242
*/
4343
@Deprecated(forRemoval = true, since = "4.0")
44+
@SuppressWarnings("removal")
4445
public class DefaultJackson2JavaTypeMapper extends AbstractJavaTypeMapper implements Jackson2JavaTypeMapper {
4546

4647
private static final List<String> TRUSTED_PACKAGES =

spring-amqp/src/main/java/org/springframework/amqp/support/converter/Jackson2JsonMessageConverter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
* @deprecated since 4.0 in favor of {@link JacksonJsonMessageConverter} for Jackson 3.
3939
*/
4040
@Deprecated(forRemoval = true, since = "4.0")
41+
@SuppressWarnings("removal")
4142
public class Jackson2JsonMessageConverter extends AbstractJackson2MessageConverter {
4243

4344
/**

spring-amqp/src/main/java/org/springframework/amqp/support/converter/Jackson2XmlMessageConverter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
* @deprecated since 4.0 in favor of {@link JacksonXmlMessageConverter} for Jackson 3.
3333
*/
3434
@Deprecated(forRemoval = true, since = "4.0")
35+
@SuppressWarnings("removal")
3536
public class Jackson2XmlMessageConverter extends AbstractJackson2MessageConverter {
3637

3738
/**
Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@
2020
import java.util.HashMap;
2121
import java.util.Map;
2222

23-
import com.fasterxml.jackson.databind.JavaType;
24-
import com.fasterxml.jackson.databind.type.CollectionType;
25-
import com.fasterxml.jackson.databind.type.MapType;
26-
import com.fasterxml.jackson.databind.type.TypeFactory;
2723
import org.junit.jupiter.api.BeforeEach;
2824
import org.junit.jupiter.api.Test;
2925
import org.junit.jupiter.api.extension.ExtendWith;
3026
import org.mockito.Spy;
3127
import org.mockito.junit.jupiter.MockitoExtension;
28+
import tools.jackson.databind.JavaType;
29+
import tools.jackson.databind.type.CollectionType;
30+
import tools.jackson.databind.type.MapType;
31+
import tools.jackson.databind.type.TypeFactory;
3232

3333
import org.springframework.amqp.core.MessageProperties;
3434

@@ -45,10 +45,10 @@
4545
*/
4646

4747
@ExtendWith(MockitoExtension.class)
48-
public class DefaultJackson2JavaTypeMapperTests {
48+
public class DefaultJacksonJavaTypeMapperTests {
4949

5050
@Spy
51-
DefaultJackson2JavaTypeMapper javaTypeMapper = new DefaultJackson2JavaTypeMapper();
51+
DefaultJacksonJavaTypeMapper javaTypeMapper = new DefaultJacksonJavaTypeMapper();
5252

5353
private final MessageProperties properties = new MessageProperties();
5454

@@ -76,7 +76,7 @@ public void shouldLookInTheClassIdFieldNameToFindTheClassName() {
7676

7777
JavaType javaType = javaTypeMapper.toJavaType(properties);
7878

79-
assertThat(javaType).isEqualTo(TypeFactory.defaultInstance().constructType(String.class));
79+
assertThat(javaType).isEqualTo(TypeFactory.createDefaultInstance().constructType(String.class));
8080
}
8181

8282
@Test
@@ -86,12 +86,12 @@ public void shouldUseTheClassProvidedByTheLookupMapIfPresent() {
8686

8787
JavaType javaType = javaTypeMapper.toJavaType(properties);
8888

89-
assertThat(TypeFactory.defaultInstance().constructType(SimpleTrade.class)).isEqualTo(javaType);
89+
assertThat(TypeFactory.createDefaultInstance().constructType(SimpleTrade.class)).isEqualTo(javaType);
9090
}
9191

9292
@Test
9393
public void fromJavaTypeShouldPopulateWithJavaTypeNameByDefault() {
94-
javaTypeMapper.fromJavaType(TypeFactory.defaultInstance().constructType(SimpleTrade.class), properties);
94+
javaTypeMapper.fromJavaType(TypeFactory.createDefaultInstance().constructType(SimpleTrade.class), properties);
9595

9696
String className = (String) properties.getHeaders().get(javaTypeMapper.getClassIdFieldName());
9797
assertThat(className).isEqualTo(SimpleTrade.class.getName());
@@ -101,7 +101,7 @@ public void fromJavaTypeShouldPopulateWithJavaTypeNameByDefault() {
101101
public void shouldUseSpecialNameForClassIfPresent() {
102102
javaTypeMapper.setIdClassMapping(map("daytrade", SimpleTrade.class));
103103

104-
javaTypeMapper.fromJavaType(TypeFactory.defaultInstance().constructType(SimpleTrade.class), properties);
104+
javaTypeMapper.fromJavaType(TypeFactory.createDefaultInstance().constructType(SimpleTrade.class), properties);
105105

106106
String className = (String) properties.getHeaders().get(javaTypeMapper.getClassIdFieldName());
107107
assertThat(className).isEqualTo("daytrade");
@@ -130,7 +130,8 @@ public void shouldLookInTheContentClassIdFieldNameToFindTheContainerClassIDWhenC
130130

131131
JavaType javaType = javaTypeMapper.toJavaType(properties);
132132

133-
assertThat((CollectionType) javaType).isEqualTo(TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, String.class));
133+
assertThat((CollectionType) javaType)
134+
.isEqualTo(TypeFactory.createDefaultInstance().constructCollectionType(ArrayList.class, String.class));
134135
}
135136

136137
@Test
@@ -145,15 +146,16 @@ public void shouldUseTheContentClassProvidedByTheLookupMapIfPresent() {
145146

146147
JavaType javaType = javaTypeMapper.toJavaType(properties);
147148

148-
assertThat((CollectionType) javaType).isEqualTo(TypeFactory.defaultInstance().constructCollectionType(containerClass,
149-
TypeFactory.defaultInstance().constructType(SimpleTrade.class)));
149+
assertThat((CollectionType) javaType)
150+
.isEqualTo(TypeFactory.createDefaultInstance().constructCollectionType(containerClass,
151+
TypeFactory.createDefaultInstance().constructType(SimpleTrade.class)));
150152
}
151153

152154
@Test
153155
public void fromJavaTypeShouldPopulateWithContentTypeJavaTypeNameByDefault() {
154156

155-
javaTypeMapper.fromJavaType(TypeFactory.defaultInstance().constructCollectionType(containerClass,
156-
TypeFactory.defaultInstance().constructType(SimpleTrade.class)), properties);
157+
javaTypeMapper.fromJavaType(TypeFactory.createDefaultInstance().constructCollectionType(containerClass,
158+
TypeFactory.createDefaultInstance().constructType(SimpleTrade.class)), properties);
157159

158160
String className = (String) properties.getHeaders().get(javaTypeMapper.getClassIdFieldName());
159161
String contentClassName = (String) properties.getHeaders().get(javaTypeMapper.getContentClassIdFieldName());
@@ -187,7 +189,9 @@ public void shouldLookInTheValueClassIdFieldNameToFindTheValueClassIDWhenClassId
187189

188190
JavaType javaType = javaTypeMapper.toJavaType(properties);
189191

190-
assertThat((MapType) javaType).isEqualTo(TypeFactory.defaultInstance().constructMapType(HashMap.class, Integer.class, String.class));
192+
assertThat((MapType) javaType)
193+
.isEqualTo(TypeFactory.createDefaultInstance()
194+
.constructMapType(HashMap.class, Integer.class, String.class));
191195
}
192196

193197
@Test
@@ -203,17 +207,17 @@ public void shouldUseTheKeyClassProvidedByTheLookupMapIfPresent() {
203207

204208
JavaType javaType = javaTypeMapper.toJavaType(properties);
205209

206-
assertThat((MapType) javaType).isEqualTo(TypeFactory.defaultInstance().constructMapType(mapClass,
207-
TypeFactory.defaultInstance().constructType(SimpleTrade.class),
208-
TypeFactory.defaultInstance().constructType(String.class)));
210+
assertThat((MapType) javaType).isEqualTo(TypeFactory.createDefaultInstance().constructMapType(mapClass,
211+
TypeFactory.createDefaultInstance().constructType(SimpleTrade.class),
212+
TypeFactory.createDefaultInstance().constructType(String.class)));
209213
}
210214

211215
@Test
212216
public void fromJavaTypeShouldPopulateWithKeyTypeAndContentJavaTypeNameByDefault() {
213217

214-
javaTypeMapper.fromJavaType(TypeFactory.defaultInstance().constructMapType(mapClass,
215-
TypeFactory.defaultInstance().constructType(SimpleTrade.class),
216-
TypeFactory.defaultInstance().constructType(String.class)), properties);
218+
javaTypeMapper.fromJavaType(TypeFactory.createDefaultInstance().constructMapType(mapClass,
219+
TypeFactory.createDefaultInstance().constructType(SimpleTrade.class),
220+
TypeFactory.createDefaultInstance().constructType(String.class)), properties);
217221

218222
String className = (String) properties.getHeaders().get(javaTypeMapper.getClassIdFieldName());
219223
String contentClassName = (String) properties.getHeaders().get(javaTypeMapper.getContentClassIdFieldName());
@@ -243,8 +247,9 @@ public void toClassShouldUseTheClassProvidedByTheLookupMapIfPresent() {
243247
}
244248

245249
private Map<String, Class<?>> map(String string, Class<?> clazz) {
246-
Map<String, Class<?>> map = new HashMap<String, Class<?>>();
250+
Map<String, Class<?>> map = new HashMap<>();
247251
map.put(string, clazz);
248252
return map;
249253
}
254+
250255
}
Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,9 @@
2222
import java.util.List;
2323
import java.util.Map;
2424

25-
import com.fasterxml.jackson.databind.ser.BeanSerializerFactory;
26-
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
2725
import org.junit.jupiter.api.BeforeEach;
2826
import org.junit.jupiter.api.Test;
27+
import tools.jackson.dataformat.xml.XmlMapper;
2928

3029
import org.springframework.amqp.core.Message;
3130
import org.springframework.amqp.core.MessageProperties;
@@ -44,20 +43,20 @@
4443
*/
4544
@SpringJUnitConfig
4645
@DirtiesContext
47-
public class Jackson2XmlMessageConverterTests {
46+
public class JacksonXmlMessageConverterTests {
4847

49-
public static final String TRUSTED_PACKAGE = Jackson2XmlMessageConverterTests.class.getPackage().getName();
48+
public static final String TRUSTED_PACKAGE = JacksonXmlMessageConverterTests.class.getPackage().getName();
5049

51-
private Jackson2XmlMessageConverter converter;
50+
private JacksonXmlMessageConverter converter;
5251

5352
private SimpleTrade trade;
5453

5554
@Autowired
56-
private Jackson2XmlMessageConverter xmlConverterWithDefaultType;
55+
private JacksonXmlMessageConverter xmlConverterWithDefaultType;
5756

5857
@BeforeEach
5958
public void before() {
60-
converter = new Jackson2XmlMessageConverter(TRUSTED_PACKAGE);
59+
converter = new JacksonXmlMessageConverter(TRUSTED_PACKAGE);
6160
trade = new SimpleTrade();
6261
trade.setAccountName("Acct1");
6362
trade.setBuyRequest(true);
@@ -80,10 +79,9 @@ public void simpleTrade() {
8079
@Test
8180
public void simpleTradeOverrideMapper() {
8281
XmlMapper mapper = new XmlMapper();
83-
mapper.setSerializerFactory(BeanSerializerFactory.instance);
84-
converter = new Jackson2XmlMessageConverter(mapper);
82+
converter = new JacksonXmlMessageConverter(mapper);
8583

86-
((DefaultJackson2JavaTypeMapper) this.converter.getJavaTypeMapper())
84+
((DefaultJacksonJavaTypeMapper) this.converter.getJavaTypeMapper())
8785
.setTrustedPackages(TRUSTED_PACKAGE);
8886

8987
Message message = converter.toMessage(trade, new MessageProperties());
@@ -106,7 +104,7 @@ public void nestedBean() {
106104
@Test
107105
@SuppressWarnings("unchecked")
108106
public void hashtable() {
109-
Hashtable<String, String> hashtable = new Hashtable<String, String>();
107+
Hashtable<String, String> hashtable = new Hashtable<>();
110108
hashtable.put("TICKER", "VMW");
111109
hashtable.put("PRICE", "103.2");
112110

@@ -143,15 +141,15 @@ public void shouldUseClassMapperWhenProvidedOutbound() {
143141

144142
@Test
145143
public void testAmqp330StringArray() {
146-
String[] testData = { "test" };
144+
String[] testData = {"test"};
147145
Message message = converter.toMessage(testData, new MessageProperties());
148146

149147
assertThat(testData).containsExactly((String[]) converter.fromMessage(message));
150148
}
151149

152150
@Test
153151
public void testAmqp330ObjectArray() {
154-
SimpleTrade[] testData = { trade };
152+
SimpleTrade[] testData = {trade};
155153
Message message = converter.toMessage(testData, new MessageProperties());
156154
assertThat(testData).containsExactly((SimpleTrade[]) converter.fromMessage(message));
157155
}
@@ -162,7 +160,7 @@ public void testDefaultType() {
162160
MessageProperties messageProperties = new MessageProperties();
163161
messageProperties.setContentType("application/xml");
164162
Message message = new Message(bytes, messageProperties);
165-
Jackson2XmlMessageConverter converter = new Jackson2XmlMessageConverter();
163+
JacksonXmlMessageConverter converter = new JacksonXmlMessageConverter();
166164
DefaultClassMapper classMapper = new DefaultClassMapper();
167165
classMapper.setDefaultType(Foo.class);
168166
converter.setClassMapper(classMapper);
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
44
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
55

6-
<bean id="xmlConverterWithDefaultType" class="org.springframework.amqp.support.converter.Jackson2XmlMessageConverter">
6+
<bean id="xmlConverterWithDefaultType" class="org.springframework.amqp.support.converter.JacksonXmlMessageConverter">
77
<property name="classMapper">
88
<bean class="org.springframework.amqp.support.converter.DefaultClassMapper">
99
<property name="defaultType"
10-
value="org.springframework.amqp.support.converter.Jackson2XmlMessageConverterTests$Foo" />
11-
<property name="trustedPackages" value="#{T (org.springframework.amqp.support.converter.Jackson2XmlMessageConverterTests).TRUSTED_PACKAGE}"/>
10+
value="org.springframework.amqp.support.converter.JacksonXmlMessageConverterTests$Foo" />
11+
<property name="trustedPackages" value="#{T (org.springframework.amqp.support.converter.JacksonXmlMessageConverterTests).TRUSTED_PACKAGE}"/>
1212
</bean>
1313
</property>
1414
</bean>

spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/micrometer/RabbitListenerObservation.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,16 @@
1616

1717
package org.springframework.amqp.rabbit.support.micrometer;
1818

19+
import java.util.Objects;
20+
1921
import io.micrometer.common.KeyValues;
2022
import io.micrometer.common.docs.KeyName;
2123
import io.micrometer.observation.Observation.Context;
2224
import io.micrometer.observation.ObservationConvention;
2325
import io.micrometer.observation.docs.ObservationDocumentation;
2426

27+
import org.springframework.amqp.core.MessageProperties;
28+
2529
/**
2630
* Spring Rabbit Observation for listeners.
2731
*
@@ -124,12 +128,13 @@ public static class DefaultRabbitListenerObservationConvention implements Rabbit
124128

125129
@Override
126130
public KeyValues getLowCardinalityKeyValues(RabbitMessageReceiverContext context) {
127-
final var messageProperties = context.getCarrier().getMessageProperties();
131+
MessageProperties messageProperties = context.getCarrier().getMessageProperties();
132+
String consumerQueue = Objects.requireNonNullElse(messageProperties.getConsumerQueue(), "");
128133
return KeyValues.of(
129134
RabbitListenerObservation.ListenerLowCardinalityTags.LISTENER_ID.asString(),
130135
context.getListenerId(),
131136
RabbitListenerObservation.ListenerLowCardinalityTags.DESTINATION_NAME.asString(),
132-
messageProperties.getConsumerQueue());
137+
consumerQueue);
133138
}
134139

135140
@Override

spring-rabbit/src/main/java/org/springframework/amqp/rabbit/support/micrometer/RabbitMessageReceiverContext.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ public RabbitMessageReceiverContext(Message message, String listenerId) {
4545
setRemoteServiceName("RabbitMQ");
4646
}
4747

48+
@Override
49+
public Message getCarrier() {
50+
return this.message;
51+
}
52+
4853
public String getListenerId() {
4954
return this.listenerId;
5055
}

0 commit comments

Comments
 (0)