Skip to content

Commit 69332a1

Browse files
committed
Upgrade some deps to their major/minor versions
* Manage `com.google.protobuf` to generate classes from Protos on the fly * Fix Jackson API usage after its upgrade
1 parent 971ff72 commit 69332a1

File tree

9 files changed

+48
-1517
lines changed

9 files changed

+48
-1517
lines changed

build.gradle

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ plugins {
2323
id 'org.antora' version '1.0.0'
2424
id 'io.spring.antora.generate-antora-yml' version '0.0.1'
2525
id 'com.github.spotbugs' version '6.0.8'
26+
id 'com.google.protobuf' version '0.9.4' apply false
2627
}
2728

2829
if (isCI) {
@@ -75,7 +76,7 @@ ext {
7576
hibernateVersion = '6.4.4.Final'
7677
hsqldbVersion = '2.7.2'
7778
h2Version = '2.2.224'
78-
jacksonVersion = '2.16.2'
79+
jacksonVersion = '2.17.0'
7980
jaxbVersion = '4.0.5'
8081
jcifsVersion = '2.1.37'
8182
jeroMqVersion = '0.6.0'
@@ -99,7 +100,7 @@ ext {
99100
oracleVersion = '23.3.0.23.09'
100101
pahoMqttClientVersion = '1.2.5'
101102
postgresVersion = '42.7.3'
102-
protobufVersion = '3.25.3'
103+
protobufVersion = '4.26.0'
103104
r2dbch2Version = '1.0.0.RELEASE'
104105
reactorVersion = '2023.0.4'
105106
resilience4jVersion = '2.2.0'
@@ -500,6 +501,7 @@ project('spring-integration-core') {
500501
description = 'Spring Integration Core'
501502

502503
apply plugin: 'org.jetbrains.dokka'
504+
apply plugin: 'com.google.protobuf'
503505

504506
dependencies {
505507
api 'org.springframework:spring-aop'
@@ -559,6 +561,13 @@ project('spring-integration-core') {
559561
}
560562
}
561563
}
564+
565+
protobuf {
566+
protoc {
567+
artifact = "com.google.protobuf:protoc:$protobufVersion"
568+
}
569+
}
570+
562571
}
563572

564573
project('spring-integration-debezium') {

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

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2022 the original author or authors.
2+
* Copyright 2002-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -33,7 +33,7 @@
3333
/**
3434
* {@link JsonInboundMessageMapper.JsonMessageParser} implementation that parses JSON messages
3535
* and builds a {@link Message} with the specified payload type from provided {@link JsonInboundMessageMapper}.
36-
* Uses Jackson 2 JSON-processor (@link https://github.com/FasterXML).
36+
* Uses <a href="https://github.com/FasterXML">Jackson JSON Processor</a>.
3737
*
3838
* @author Artem Bilan
3939
* @author Gary Russell
@@ -71,16 +71,17 @@ protected Message<?> parseWithHeaders(JsonParser parser, String jsonMessage,
7171
Object payload = null;
7272
while (JsonToken.END_OBJECT != parser.nextToken()) {
7373
Assert.isTrue(JsonToken.FIELD_NAME == parser.getCurrentToken(), error);
74-
boolean isHeadersToken = "headers".equals(parser.getCurrentName());
75-
boolean isPayloadToken = "payload".equals(parser.getCurrentName());
74+
String currentName = parser.currentName();
75+
boolean isHeadersToken = "headers".equals(currentName);
76+
boolean isPayloadToken = "payload".equals(currentName);
7677
Assert.isTrue(isHeadersToken || isPayloadToken, error);
7778
if (isHeadersToken) {
7879
Assert.isTrue(parser.nextToken() == JsonToken.START_OBJECT, error);
7980
headers = readHeaders(parser, jsonMessage);
8081
}
81-
else if (isPayloadToken) {
82+
else {
8283
parser.nextToken();
83-
payload = this.readPayload(parser, jsonMessage);
84+
payload = readPayload(parser, jsonMessage);
8485
}
8586
}
8687
Assert.notNull(headers, error);
@@ -99,9 +100,9 @@ else if (isPayloadToken) {
99100
private Map<String, Object> readHeaders(JsonParser parser, String jsonMessage) throws IOException {
100101
Map<String, Object> headers = new LinkedHashMap<>();
101102
while (JsonToken.END_OBJECT != parser.nextToken()) {
102-
String headerName = parser.getCurrentName();
103+
String headerName = parser.currentName();
103104
parser.nextToken();
104-
Object headerValue = this.readHeader(parser, headerName, jsonMessage);
105+
Object headerValue = readHeader(parser, headerName, jsonMessage);
105106
headers.put(headerName, headerValue);
106107
}
107108
return headers;

spring-integration-core/src/test/java/org/springframework/integration/json/JsonOutboundMessageMapperTests.java

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2022 the original author or authors.
2+
* Copyright 2002-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -22,7 +22,7 @@
2222
import com.fasterxml.jackson.core.JsonParser;
2323
import com.fasterxml.jackson.core.JsonToken;
2424
import com.fasterxml.jackson.databind.ObjectMapper;
25-
import org.junit.Test;
25+
import org.junit.jupiter.api.Test;
2626

2727
import org.springframework.integration.history.MessageHistory;
2828
import org.springframework.integration.support.MessageBuilder;
@@ -35,6 +35,8 @@
3535
/**
3636
* @author Jeremy Grelle
3737
* @author Gary Russell
38+
* @author Artem Bilan
39+
*
3840
* @since 2.0
3941
*/
4042
public class JsonOutboundMessageMapperTests {
@@ -45,39 +47,39 @@ public class JsonOutboundMessageMapperTests {
4547

4648

4749
@Test
48-
public void testFromMessageWithHeadersAndStringPayload() throws Exception {
50+
public void testFromMessageWithHeadersAndStringPayload() {
4951
Message<String> testMessage = MessageBuilder.withPayload("myPayloadStuff").build();
5052
JsonOutboundMessageMapper mapper = new JsonOutboundMessageMapper();
5153
String result = mapper.fromMessage(testMessage);
52-
assertThat(result.contains("\"headers\":{")).isTrue();
53-
assertThat(result.contains("\"timestamp\":" + testMessage.getHeaders().getTimestamp())).isTrue();
54-
assertThat(result.contains("\"id\":\"" + testMessage.getHeaders().getId() + "\"")).isTrue();
55-
assertThat(result.contains("\"payload\":\"myPayloadStuff\"")).isTrue();
54+
assertThat(result).contains("\"headers\":{");
55+
assertThat(result).contains("\"timestamp\":" + testMessage.getHeaders().getTimestamp());
56+
assertThat(result).contains("\"id\":\"" + testMessage.getHeaders().getId() + "\"");
57+
assertThat(result).contains("\"payload\":\"myPayloadStuff\"");
5658
}
5759

5860
@Test
59-
public void testFromMessageWithMessageHistory() throws Exception {
61+
public void testFromMessageWithMessageHistory() {
6062
Message<String> testMessage = MessageBuilder.withPayload("myPayloadStuff").build();
6163
testMessage = MessageHistory.write(testMessage, new TestNamedComponent(1));
6264
testMessage = MessageHistory.write(testMessage, new TestNamedComponent(2));
6365
testMessage = MessageHistory.write(testMessage, new TestNamedComponent(3));
6466
JsonOutboundMessageMapper mapper = new JsonOutboundMessageMapper();
6567
String result = mapper.fromMessage(testMessage);
66-
assertThat(result.contains("\"headers\":{")).isTrue();
67-
assertThat(result.contains("\"timestamp\":" + testMessage.getHeaders().getTimestamp())).isTrue();
68-
assertThat(result.contains("\"id\":\"" + testMessage.getHeaders().getId() + "\"")).isTrue();
69-
assertThat(result.contains("\"payload\":\"myPayloadStuff\"")).isTrue();
70-
assertThat(result.contains("\"history\":")).isTrue();
71-
assertThat(result.contains("testName-1")).isTrue();
72-
assertThat(result.contains("testType-1")).isTrue();
73-
assertThat(result.contains("testName-2")).isTrue();
74-
assertThat(result.contains("testType-2")).isTrue();
75-
assertThat(result.contains("testName-3")).isTrue();
76-
assertThat(result.contains("testType-3")).isTrue();
68+
assertThat(result).contains("\"headers\":{");
69+
assertThat(result).contains("\"timestamp\":" + testMessage.getHeaders().getTimestamp());
70+
assertThat(result).contains("\"id\":\"" + testMessage.getHeaders().getId() + "\"");
71+
assertThat(result).contains("\"payload\":\"myPayloadStuff\"");
72+
assertThat(result).contains("\"history\":");
73+
assertThat(result).contains("testName-1");
74+
assertThat(result).contains("testType-1");
75+
assertThat(result).contains("testName-2");
76+
assertThat(result).contains("testType-2");
77+
assertThat(result).contains("testName-3");
78+
assertThat(result).contains("testType-3");
7779
}
7880

7981
@Test
80-
public void testFromMessageExtractStringPayload() throws Exception {
82+
public void testFromMessageExtractStringPayload() {
8183
Message<String> testMessage = MessageBuilder.withPayload("myPayloadStuff").build();
8284
String expected = "\"myPayloadStuff\"";
8385
JsonOutboundMessageMapper mapper = new JsonOutboundMessageMapper();
@@ -92,9 +94,9 @@ public void testFromMessageWithHeadersAndBeanPayload() throws Exception {
9294
Message<TestBean> testMessage = MessageBuilder.withPayload(payload).build();
9395
JsonOutboundMessageMapper mapper = new JsonOutboundMessageMapper();
9496
String result = mapper.fromMessage(testMessage);
95-
assertThat(result.contains("\"headers\":{")).isTrue();
96-
assertThat(result.contains("\"timestamp\":" + testMessage.getHeaders().getTimestamp())).isTrue();
97-
assertThat(result.contains("\"id\":\"" + testMessage.getHeaders().getId() + "\"")).isTrue();
97+
assertThat(result).contains("\"headers\":{");
98+
assertThat(result).contains("\"timestamp\":" + testMessage.getHeaders().getTimestamp());
99+
assertThat(result).contains("\"id\":\"" + testMessage.getHeaders().getId() + "\"");
98100
TestBean parsedPayload = extractJsonPayloadToTestBean(result);
99101
assertThat(parsedPayload).isEqualTo(payload);
100102
}
@@ -106,7 +108,7 @@ public void testFromMessageExtractBeanPayload() throws Exception {
106108
JsonOutboundMessageMapper mapper = new JsonOutboundMessageMapper();
107109
mapper.setShouldExtractPayload(true);
108110
String result = mapper.fromMessage(testMessage);
109-
assertThat(!result.contains("headers")).isTrue();
111+
assertThat(result).doesNotContain("headers");
110112
TestBean parsedPayload = objectMapper.readValue(result, TestBean.class);
111113
assertThat(parsedPayload).isEqualTo(payload);
112114
}
@@ -115,19 +117,13 @@ private TestBean extractJsonPayloadToTestBean(String json) throws IOException {
115117
JsonParser parser = jsonFactory.createParser(json);
116118
do {
117119
parser.nextToken();
118-
} while (parser.getCurrentToken() != JsonToken.FIELD_NAME || !parser.getCurrentName().equals("payload"));
120+
} while (parser.getCurrentToken() != JsonToken.FIELD_NAME || !parser.currentName().equals("payload"));
119121
parser.nextToken();
120122
return objectMapper.readValue(parser, TestBean.class);
121123
}
122124

123125

124-
private static class TestNamedComponent implements NamedComponent {
125-
126-
private final int id;
127-
128-
TestNamedComponent(int id) {
129-
this.id = id;
130-
}
126+
private record TestNamedComponent(int id) implements NamedComponent {
131127

132128
@Override
133129
public String getComponentName() {

0 commit comments

Comments
 (0)