Skip to content

Commit 4df5fa2

Browse files
authored
Spring boot 4 support (#377)
* add spring boot 4.x server support and tests * use JDK 21 in CI because of sb4 support * bump spring 6.x version from 6.2.8 to 6.2.14, spring boot 3.x version from 3.5.3 to 3.5.8 * bump slf4j from 2.0.7 to 2.0.17, junit from 5.13.4 to 5.14.1, jacoco from 0.8.13 to 0.8.14 * bump swagger-parser from 2.1.35 to 2.1.36, snakeyaml-engine from 2.10 to 3.0.1, commonmark from 0.21.0 to 0.27.0
1 parent 738e3a1 commit 4df5fa2

24 files changed

Lines changed: 3158 additions & 9 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ jobs:
66
build:
77
uses: davidmoten/workflows/.github/workflows/ci.yml@master
88
with:
9-
jdk-matrix: '["17","21"]'
9+
jdk-matrix: '["21"]'

openapi-codegen-generator/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,19 +66,19 @@
6666
<dependency>
6767
<groupId>io.swagger.parser.v3</groupId>
6868
<artifactId>swagger-parser</artifactId>
69-
<version>2.1.35</version>
69+
<version>2.1.36</version>
7070
</dependency>
7171

7272
<dependency>
7373
<groupId>org.snakeyaml</groupId>
7474
<artifactId>snakeyaml-engine</artifactId>
75-
<version>2.10</version>
75+
<version>3.0.1</version>
7676
</dependency>
7777

7878
<dependency>
7979
<groupId>org.commonmark</groupId>
8080
<artifactId>commonmark</artifactId>
81-
<version>0.21.0</version>
81+
<version>0.27.0</version>
8282
</dependency>
8383

8484
<dependency>

openapi-codegen-maven-plugin-sb4-test/pom.xml

Lines changed: 728 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.davidmoten.oa3.codegen.test;
2+
3+
import java.util.List;
4+
5+
import org.davidmoten.oa3.codegen.http.service.ApacheHttpClientHttpService;
6+
import org.davidmoten.oa3.codegen.http.service.DefaultHttpService;
7+
import org.davidmoten.oa3.codegen.http.service.HttpService;
8+
9+
import com.github.davidmoten.guavamini.Lists;
10+
11+
public final class Helper {
12+
13+
private Helper() {
14+
// prevent instantiation
15+
}
16+
17+
public static List<HttpService> httpServices() {
18+
return Lists.of(DefaultHttpService.INSTANCE, ApacheHttpClientHttpService.INSTANCE);
19+
}
20+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.davidmoten.oa3.codegen.test;
2+
3+
public class Structure {
4+
5+
Thing a;
6+
7+
Thing.More b;
8+
9+
public static class Thing {
10+
11+
public static class More {
12+
13+
}
14+
15+
}
16+
17+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.davidmoten.oa3.codegen.test;
2+
3+
public class Thing {
4+
5+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.davidmoten.oa3.codegen.test.library;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.boot.context.properties.EnableConfigurationProperties;
6+
7+
@EnableConfigurationProperties
8+
@SpringBootApplication
9+
public class LibraryApplication {
10+
11+
public static void main(String[] args) {
12+
SpringApplication.run(LibraryApplication.class, args);
13+
}
14+
15+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package org.davidmoten.oa3.codegen.test.library;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import java.util.List;
6+
import java.util.Optional;
7+
8+
import org.davidmoten.oa3.codegen.http.BearerAuthenticator;
9+
import org.davidmoten.oa3.codegen.http.service.HttpService;
10+
import org.davidmoten.oa3.codegen.test.Helper;
11+
import org.davidmoten.oa3.codegen.test.library.client.Client;
12+
import org.davidmoten.oa3.codegen.test.library.schema.UsersPage;
13+
import org.junit.jupiter.params.ParameterizedTest;
14+
import org.junit.jupiter.params.provider.MethodSource;
15+
import org.springframework.boot.webtestclient.autoconfigure.AutoConfigureWebTestClient;
16+
import org.springframework.boot.test.context.SpringBootTest;
17+
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
18+
import org.springframework.boot.test.web.server.LocalServerPort;
19+
20+
import com.fasterxml.jackson.annotation.JsonAutoDetect;
21+
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
22+
23+
@SpringBootTest(classes = { LibraryApplication.class }, webEnvironment = WebEnvironment.RANDOM_PORT)
24+
@AutoConfigureWebTestClient
25+
public class LibraryServerTest {
26+
27+
@LocalServerPort
28+
int serverPort;
29+
30+
31+
@ParameterizedTest
32+
@MethodSource("httpServices")
33+
public void testClientServerAllOf(HttpService httpService) {
34+
BearerAuthenticator authenticator = () -> "tokenthingy";
35+
Client client = Client //
36+
.basePath("http://localhost:" + serverPort) //
37+
.interceptor(authenticator) //
38+
.httpService(httpService) //
39+
.build();
40+
UsersPage page = client.getUsers(Optional.empty(), Optional.empty()).get();
41+
assertEquals(20, page.users().value().size());
42+
assertEquals("User19", page.users().value().get(18).firstName());
43+
}
44+
45+
static List<HttpService> httpServices() {
46+
return Helper.httpServices();
47+
}
48+
49+
public static final class Thing {
50+
51+
@JsonAutoDetect(fieldVisibility = Visibility.ANY, creatorVisibility = Visibility.ANY, setterVisibility = Visibility.ANY)
52+
public static final class Visibility2 {
53+
}
54+
}
55+
56+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package org.davidmoten.oa3.codegen.test.library;
2+
3+
import java.util.Optional;
4+
import java.util.stream.Collectors;
5+
import java.util.stream.IntStream;
6+
7+
import org.davidmoten.oa3.codegen.spring.runtime.ServiceException;
8+
import org.davidmoten.oa3.codegen.test.library.schema.Item;
9+
import org.davidmoten.oa3.codegen.test.library.schema.User;
10+
import org.davidmoten.oa3.codegen.test.library.schema.UserId;
11+
import org.davidmoten.oa3.codegen.test.library.schema.UserIdWrapped;
12+
import org.davidmoten.oa3.codegen.test.library.schema.UserWithId;
13+
import org.davidmoten.oa3.codegen.test.library.schema.UsersPage;
14+
import org.davidmoten.oa3.codegen.test.library.schema.UsersPage.Users;
15+
import org.davidmoten.oa3.codegen.test.library.service.Service;
16+
import org.springframework.stereotype.Component;
17+
18+
@Component
19+
public class LibraryService implements Service {
20+
21+
@Override
22+
public UsersPage getUsers(Optional<String> search, Optional<String> continuationToken) throws ServiceException {
23+
Users users = new Users(IntStream.range(1, 21).mapToObj(i -> createUser(i)).collect(Collectors.toList()));
24+
return new UsersPage(users, Optional.empty());
25+
}
26+
27+
private UserWithId createUser(int i) {
28+
return new UserWithId(User.builder() //
29+
.firstName("User" + i) //
30+
.lastName("Gomez") //
31+
.email("user" + i + ".gomez@gmail.com") //
32+
.build(), //
33+
UserIdWrapped.userId(UserId.of(i + "")));
34+
}
35+
36+
@Override
37+
public void createUser(User requestBody) throws ServiceException {
38+
Service.super.createUser(requestBody);
39+
}
40+
41+
@Override
42+
public User getUser(String id) throws ServiceException {
43+
return Service.super.getUser(id);
44+
}
45+
46+
@Override
47+
public void updateUser(String id, User requestBody) throws ServiceException {
48+
Service.super.updateUser(id, requestBody);
49+
}
50+
51+
@Override
52+
public void deleteUser(String id) throws ServiceException {
53+
Service.super.deleteUser(id);
54+
}
55+
56+
@Override
57+
public Item getItem(String itemId) throws ServiceException {
58+
return Service.super.getItem(itemId);
59+
}
60+
61+
}

0 commit comments

Comments
 (0)