Skip to content

Commit 9dda7a9

Browse files
committed
Upgrade spring-boot to 3.3.0
Upgrade swagger-core to 2.2.22 Upgrade swagger-ui to 5.17.14 Upgrade spring-cloud-function to 4.1.2 Upgrade spring-security-oauth2-authorization-server to 1.3.0
1 parent 37ada81 commit 9dda7a9

File tree

30 files changed

+1676
-465
lines changed

30 files changed

+1676
-465
lines changed

pom.xml

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<parent>
1212
<groupId>org.springframework.boot</groupId>
1313
<artifactId>spring-boot-starter-parent</artifactId>
14-
<version>3.2.4</version>
14+
<version>3.3.0</version>
1515
</parent>
1616

1717
<licenses>
@@ -60,15 +60,13 @@
6060
<maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
6161
<maven-release-plugin.version>2.5.3</maven-release-plugin.version>
6262
<nexus-staging-maven-plugin>1.6.8</nexus-staging-maven-plugin>
63-
<swagger-api.version>2.2.21</swagger-api.version>
64-
<swagger-ui.version>5.13.0</swagger-ui.version>
63+
<swagger-api.version>2.2.22</swagger-api.version>
64+
<swagger-ui.version>5.17.14</swagger-ui.version>
6565
<gmavenplus-plugin.version>1.13.1</gmavenplus-plugin.version>
66-
<jaxb-impl.version>2.1</jaxb-impl.version>
67-
<javax.jws-api.version>1.1</javax.jws-api.version>
6866
<jjwt.version>0.9.1</jjwt.version>
6967
<therapi-runtime-javadoc.version>0.15.0</therapi-runtime-javadoc.version>
70-
<spring-cloud-function.version>4.0.0</spring-cloud-function.version>
71-
<spring-security-oauth2-authorization-server.version>1.0.1</spring-security-oauth2-authorization-server.version>
68+
<spring-cloud-function.version>4.1.2</spring-cloud-function.version>
69+
<spring-security-oauth2-authorization-server.version>1.3.0</spring-security-oauth2-authorization-server.version>
7270
</properties>
7371

7472
<dependencyManagement>

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/configuration/SpringDocSecurityOAuth2Customizer.java

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
5656
import org.springframework.security.web.util.matcher.OrRequestMatcher;
5757
import org.springframework.security.web.util.matcher.RequestMatcher;
58+
import org.springframework.util.ReflectionUtils;
5859

5960
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
6061
import static org.springframework.http.MediaType.TEXT_HTML_VALUE;
@@ -110,7 +111,7 @@ public void customise(OpenAPI openAPI) {
110111
* @param securityFilterChain the security filter chain
111112
* @param openapi31 the openapi 31
112113
*/
113-
private void getOAuth2TokenRevocationEndpointFilter(OpenAPI openAPI, SecurityFilterChain securityFilterChain, boolean openapi31) {
114+
private void getOAuth2TokenRevocationEndpointFilter(OpenAPI openAPI, SecurityFilterChain securityFilterChain, boolean openapi31) {
114115
Object oAuth2EndpointFilter =
115116
new SpringDocSecurityOAuth2EndpointUtils(OAuth2TokenRevocationEndpointFilter.class).findEndpoint(securityFilterChain);
116117
if (oAuth2EndpointFilter != null) {
@@ -168,14 +169,20 @@ private void getOAuth2TokenIntrospectionEndpointFilter(OpenAPI openAPI, Security
168169
* @param openapi31 the openapi 31
169170
*/
170171
private void getOAuth2AuthorizationServerMetadataEndpoint(OpenAPI openAPI, SecurityFilterChain securityFilterChain, boolean openapi31) {
172+
Class<OAuth2AuthorizationServerMetadataEndpointFilter>authorizationServerMetadataEndpointClass = OAuth2AuthorizationServerMetadataEndpointFilter.class;
171173
Object oAuth2EndpointFilter =
172-
new SpringDocSecurityOAuth2EndpointUtils(OAuth2AuthorizationServerMetadataEndpointFilter.class).findEndpoint(securityFilterChain);
174+
new SpringDocSecurityOAuth2EndpointUtils(authorizationServerMetadataEndpointClass).findEndpoint(securityFilterChain);
173175
if (oAuth2EndpointFilter != null) {
174176
ApiResponses apiResponses = new ApiResponses();
175177
buildApiResponsesOnSuccess(apiResponses, AnnotationsUtils.resolveSchemaFromType(SpringDocOAuth2AuthorizationServerMetadata.class, openAPI.getComponents(), null, openapi31));
176178
buildApiResponsesOnInternalServerError(apiResponses);
177179
Operation operation = buildOperation(apiResponses);
178-
buildPath(oAuth2EndpointFilter, REQUEST_MATCHER, openAPI, operation, HttpMethod.GET);
180+
Field field = ReflectionUtils.findField(authorizationServerMetadataEndpointClass, "DEFAULT_OAUTH2_AUTHORIZATION_SERVER_METADATA_ENDPOINT_URI");
181+
if (field != null) {
182+
ReflectionUtils.makeAccessible(field);
183+
String defaultOauth2MetadataUri = (String) ReflectionUtils.getField(field, null);
184+
openAPI.getPaths().addPathItem(defaultOauth2MetadataUri , new PathItem().get(operation));
185+
}
179186
}
180187
}
181188

@@ -288,15 +295,22 @@ private void getOAuth2AuthorizationEndpoint(OpenAPI openAPI, SecurityFilterChain
288295
* @param openapi31 the openapi 31
289296
*/
290297
private void getOidcProviderConfigurationEndpoint(OpenAPI openAPI, SecurityFilterChain securityFilterChain, boolean openapi31) {
298+
Class<OidcProviderConfigurationEndpointFilter> oidcProviderConfigurationEndpointFilterClass = OidcProviderConfigurationEndpointFilter.class;
291299
Object oAuth2EndpointFilter =
292-
new SpringDocSecurityOAuth2EndpointUtils(OidcProviderConfigurationEndpointFilter.class).findEndpoint(securityFilterChain);
300+
new SpringDocSecurityOAuth2EndpointUtils(oidcProviderConfigurationEndpointFilterClass).findEndpoint(securityFilterChain);
293301

294302
if (oAuth2EndpointFilter != null) {
295303
ApiResponses apiResponses = new ApiResponses();
296304
buildApiResponsesOnSuccess(apiResponses, AnnotationsUtils.resolveSchemaFromType(SpringDocOidcProviderConfiguration.class, openAPI.getComponents(), null, openapi31));
297305
buildApiResponsesOnInternalServerError(apiResponses);
298306
Operation operation = buildOperation(apiResponses);
299-
buildPath(oAuth2EndpointFilter, REQUEST_MATCHER, openAPI, operation, HttpMethod.GET);
307+
308+
Field field = ReflectionUtils.findField(oidcProviderConfigurationEndpointFilterClass, "DEFAULT_OIDC_PROVIDER_CONFIGURATION_ENDPOINT_URI");
309+
if (field != null) {
310+
ReflectionUtils.makeAccessible(field);
311+
String defaultOidcConfigUri = (String) ReflectionUtils.getField(field, null);
312+
openAPI.getPaths().addPathItem(defaultOidcConfigUri , new PathItem().get(operation));
313+
}
300314
}
301315
}
302316

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<configuration>
33
<include resource="org/springframework/boot/logging/logback/base.xml"/>
4-
<logger name="org.springframework" level="OFF"/>
54
<logger name="test.org.springdoc.api" level="ERROR"/>
65
</configuration>

springdoc-openapi-starter-webmvc-api/src/test/resources/results/3.0.1/app38.json

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,8 @@
2323
"content": {
2424
"*/*": {
2525
"schema": {
26-
"type": "array",
27-
"items": {
28-
"type": "string",
29-
"format": "byte"
30-
}
26+
"type": "string",
27+
"format": "byte"
3128
}
3229
}
3330
}

springdoc-openapi-tests/springdoc-openapi-actuator-webflux-tests/src/test/java/test/org/springdoc/api/AbstractCommonTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,17 @@
77

88
import org.slf4j.Logger;
99
import org.slf4j.LoggerFactory;
10+
import org.springdoc.core.utils.Constants;
1011

1112
import org.springframework.beans.factory.annotation.Autowired;
1213
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
1314
import org.springframework.test.context.ActiveProfiles;
1415
import org.springframework.test.context.TestPropertySource;
16+
import org.springframework.test.web.reactive.server.EntityExchangeResult;
1517
import org.springframework.test.web.reactive.server.WebTestClient;
1618

19+
import static org.skyscreamer.jsonassert.JSONAssert.assertEquals;
20+
1721
@AutoConfigureWebTestClient(timeout = "3600000")
1822
@ActiveProfiles("test")
1923
@TestPropertySource(properties = { "management.endpoints.enabled-by-default=false" })
@@ -34,4 +38,19 @@ protected String getContent(String fileName) {
3438
throw new RuntimeException("Failed to read file: " + fileName, e);
3539
}
3640
}
41+
42+
protected void testApp(String testId, String groupName) throws Exception{
43+
String result = null;
44+
try {
45+
EntityExchangeResult<byte[]> getResult = webTestClient.get().uri(Constants.DEFAULT_API_DOCS_URL + "/" + groupName).exchange()
46+
.expectStatus().isOk().expectBody().returnResult();
47+
result = new String(getResult.getResponseBody());
48+
String expected = getContent("results/app" + testId + ".json");
49+
assertEquals(expected, result, true);
50+
}
51+
catch (AssertionError e) {
52+
LOGGER.error(result);
53+
throw e;
54+
}
55+
}
3756
}

springdoc-openapi-tests/springdoc-openapi-actuator-webflux-tests/src/test/java/test/org/springdoc/api/AbstractSpringDocActuatorTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,15 @@
2525
package test.org.springdoc.api;
2626

2727
import jakarta.annotation.PostConstruct;
28+
import org.springdoc.core.utils.Constants;
2829

2930
import org.springframework.boot.test.web.server.LocalManagementPort;
3031
import org.springframework.test.context.TestPropertySource;
32+
import org.springframework.test.web.reactive.server.EntityExchangeResult;
3133
import org.springframework.web.reactive.function.client.WebClient;
3234

35+
import static org.skyscreamer.jsonassert.JSONAssert.assertEquals;
36+
3337
@TestPropertySource(properties = { "management.endpoints.enabled-by-default=true" })
3438
public abstract class AbstractSpringDocActuatorTest extends AbstractCommonTest {
3539

@@ -43,4 +47,18 @@ void init() {
4347
webClient = WebClient.builder().baseUrl("http://localhost:" + this.managementPort)
4448
.build();
4549
}
50+
51+
protected void testWithWebClient(String testId, String uri) throws Exception{
52+
String result = null;
53+
try {
54+
result = webClient.get().uri(uri).retrieve()
55+
.bodyToMono(String.class).block();
56+
String expected = getContent("results/app"+testId+".json");
57+
assertEquals(expected, result, true);
58+
}
59+
catch (AssertionError e) {
60+
LOGGER.error(result);
61+
throw e;
62+
}
63+
}
4664
}

springdoc-openapi-tests/springdoc-openapi-actuator-webflux-tests/src/test/java/test/org/springdoc/api/AbstractSpringDocTest.java

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,41 +18,20 @@
1818

1919
package test.org.springdoc.api;
2020

21+
import org.apache.commons.lang3.StringUtils;
2122
import org.junit.jupiter.api.Test;
22-
import org.springdoc.core.utils.Constants;
2323

2424
import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
25-
import org.springframework.test.web.reactive.server.EntityExchangeResult;
26-
import org.springframework.web.reactive.function.server.HandlerFunction;
27-
import org.springframework.web.reactive.function.server.ServerResponse;
28-
29-
import static org.skyscreamer.jsonassert.JSONAssert.assertEquals;
3025

3126

3227
@WebFluxTest
3328
public abstract class AbstractSpringDocTest extends AbstractCommonTest {
3429

35-
public static final HandlerFunction<ServerResponse> HANDLER_FUNCTION = request -> ServerResponse.ok().build();
36-
37-
protected String groupName = "";
38-
39-
4030
@Test
4131
public void testApp() throws Exception {
42-
String result = null;
43-
try {
44-
EntityExchangeResult<byte[]> getResult = webTestClient.get().uri(Constants.DEFAULT_API_DOCS_URL + groupName).exchange()
45-
.expectStatus().isOk().expectBody().returnResult();
46-
47-
result = new String(getResult.getResponseBody());
48-
String className = getClass().getSimpleName();
49-
String testNumber = className.replaceAll("[^0-9]", "");
50-
String expected = getContent("results/app" + testNumber + ".json");
51-
assertEquals(expected, result, true);
52-
}
53-
catch (AssertionError e) {
54-
LOGGER.error(result);
55-
throw e;
56-
}
32+
String className = getClass().getSimpleName();
33+
String testId = className.replaceAll("[^0-9]", "");
34+
testApp(testId, StringUtils.EMPTY);
5735
}
36+
5837
}

springdoc-openapi-tests/springdoc-openapi-actuator-webflux-tests/src/test/java/test/org/springdoc/api/app146/SpringDocApp146Test.java

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,7 @@
2424

2525
import org.springframework.boot.autoconfigure.SpringBootApplication;
2626
import org.springframework.boot.test.context.SpringBootTest;
27-
import org.springframework.test.web.reactive.server.EntityExchangeResult;
28-
29-
import static org.skyscreamer.jsonassert.JSONAssert.assertEquals;
30-
27+
import org.springframework.context.annotation.ComponentScan;
3128

3229
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
3330
properties = { "management.endpoints.web.exposure.include=*",
@@ -40,31 +37,16 @@ public class SpringDocApp146Test extends AbstractSpringDocActuatorTest {
4037

4138
@Test
4239
public void testApp() throws Exception {
43-
EntityExchangeResult<byte[]> getResult = webTestClient.get().uri(Constants.DEFAULT_API_DOCS_URL + "/" + Constants.ACTUATOR_DEFAULT_GROUP)
44-
.exchange()
45-
.expectStatus().isOk()
46-
.expectBody()
47-
.jsonPath("$.openapi").isEqualTo("3.0.1")
48-
.returnResult();
49-
String result = new String(getResult.getResponseBody());
50-
String expected = getContent("results/app146-1.json");
51-
assertEquals(expected, result, true);
40+
super.testApp("146-1", Constants.ACTUATOR_DEFAULT_GROUP);
5241
}
5342

5443
@Test
5544
public void testApp1() throws Exception {
56-
EntityExchangeResult<byte[]> getResult = webTestClient.get().uri(Constants.DEFAULT_API_DOCS_URL + "/" + Constants.DEFAULT_GROUP_NAME)
57-
.exchange()
58-
.expectStatus().isOk()
59-
.expectBody()
60-
.jsonPath("$.openapi").isEqualTo("3.0.1")
61-
.returnResult();
62-
String result = new String(getResult.getResponseBody());
63-
String expected = getContent("results/app146-2.json");
64-
assertEquals(expected, result, true);
45+
super.testApp("146-2", Constants.DEFAULT_GROUP_NAME);
6546
}
6647

6748
@SpringBootApplication
49+
@ComponentScan(basePackages = { "org.springdoc", "test.org.springdoc.api.app146" })
6850
static class SpringDocTestApp {}
6951

7052
}

springdoc-openapi-tests/springdoc-openapi-actuator-webflux-tests/src/test/java/test/org/springdoc/api/app147/SpringDocApp147Test.java

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40,28 +40,13 @@ public class SpringDocApp147Test extends AbstractSpringDocActuatorTest {
4040

4141
@Test
4242
public void testApp() throws Exception {
43-
EntityExchangeResult<byte[]> getResult = webTestClient.get().uri(Constants.DEFAULT_API_DOCS_URL + "/" + Constants.ACTUATOR_DEFAULT_GROUP)
44-
.exchange()
45-
.expectStatus().isOk()
46-
.expectBody()
47-
.jsonPath("$.openapi").isEqualTo("3.0.1")
48-
.returnResult();
49-
String result = new String(getResult.getResponseBody());
50-
String expected = getContent("results/app147-1.json");
51-
assertEquals(expected, result, true);
43+
super.testApp("147-1", Constants.ACTUATOR_DEFAULT_GROUP);
5244
}
5345

5446
@Test
5547
public void testApp1() throws Exception {
56-
EntityExchangeResult<byte[]> getResult = webTestClient.get().uri(Constants.DEFAULT_API_DOCS_URL + "/users")
57-
.exchange()
58-
.expectStatus().isOk()
59-
.expectBody()
60-
.jsonPath("$.openapi").isEqualTo("3.0.1")
61-
.returnResult();
62-
String result = new String(getResult.getResponseBody());
63-
String expected = getContent("results/app147-2.json");
64-
assertEquals(expected, result, true);
48+
super.testApp("147-2", Constants.ACTUATOR_DEFAULT_GROUP);
49+
6550
}
6651

6752
@Test

springdoc-openapi-tests/springdoc-openapi-actuator-webflux-tests/src/test/java/test/org/springdoc/api/app148/SpringDocApp148Test.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,12 @@ public class SpringDocApp148Test extends AbstractSpringDocActuatorTest {
4646

4747
@Test
4848
public void testApp() throws Exception {
49-
String result = webClient.get().uri("/test/application/openapi/users").retrieve()
50-
.bodyToMono(String.class).block();
51-
String expected = getContent("results/app148-1.json");
52-
assertEquals(expected, result, true);
49+
super.testWithWebClient("148-1","/test/application/openapi/users");
5350
}
5451

5552
@Test
5653
public void testApp2() throws Exception {
57-
String result = webClient.get().uri("/test/application/openapi/x-actuator").retrieve()
58-
.bodyToMono(String.class).block();
59-
String expected = getContent("results/app148-2.json");
60-
assertEquals(expected, result, true);
54+
super.testWithWebClient("148-2","/test/application/openapi/x-actuator");
6155
}
6256

6357
@Test

0 commit comments

Comments
 (0)