Skip to content

Commit f613e61

Browse files
committed
Switch to oepnapi-generator & httpclient library template
Prefer Apache HttpClient over OkHttp to avoid including Kotlin library to dependencies.
1 parent 73b60f8 commit f613e61

File tree

13 files changed

+106
-101
lines changed

13 files changed

+106
-101
lines changed

pom.xml

+55-43
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,21 @@
2323
<maven.compiler.target>17</maven.compiler.target>
2424
<maven.compiler.release>17</maven.compiler.release>
2525

26-
<gson-fire-version>1.9.0</gson-fire-version>
27-
<gson-version>2.11.0</gson-version>
26+
<httpclient-version>5.4</httpclient-version>
27+
<jackson-version>2.17.2</jackson-version>
28+
<jackson-databind-version>2.17.2</jackson-databind-version>
29+
<jackson-databind-nullable-version>0.2.6</jackson-databind-nullable-version>
2830
<jakarta-annotation-api-version>3.0.0</jakarta-annotation-api-version>
2931
<junit-jupiter-version>5.11.1</junit-jupiter-version>
3032
<log4j2-version>2.24.0</log4j2-version>
31-
<okhttp-version>4.12.0</okhttp-version>
3233
<slf4j-version>1.7.36</slf4j-version>
33-
<swagger-core-version>2.2.24</swagger-core-version>
3434
<testcontainers-version>1.20.2</testcontainers-version>
3535

3636
<build-helper-maven-plugin-version>3.6.0</build-helper-maven-plugin-version>
3737
<maven-failsafe-plugin-version>3.5.0</maven-failsafe-plugin-version>
3838
<maven-release-plugin-version>3.1.1</maven-release-plugin-version>
3939
<maven-surefire-plugin-version>3.5.0</maven-surefire-plugin-version>
40-
<swagger-codegen-maven-plugin-version>3.0.62</swagger-codegen-maven-plugin-version>
40+
<openapi-generator-maven-plugin-version>7.8.0</openapi-generator-maven-plugin-version>
4141
</properties>
4242

4343
<dependencyManagement>
@@ -60,35 +60,48 @@
6060
</dependencyManagement>
6161

6262
<dependencies>
63+
<!-- HTTP client: apache client -->
6364
<dependency>
64-
<groupId>io.swagger.core.v3</groupId>
65-
<artifactId>swagger-annotations</artifactId>
66-
<version>${swagger-core-version}</version>
65+
<groupId>org.apache.httpcomponents.client5</groupId>
66+
<artifactId>httpclient5</artifactId>
67+
<version>${httpclient-version}</version>
6768
</dependency>
69+
70+
<!-- JSON processing: jackson -->
6871
<dependency>
69-
<groupId>jakarta.annotation</groupId>
70-
<artifactId>jakarta.annotation-api</artifactId>
71-
<version>${jakarta-annotation-api-version}</version>
72+
<groupId>com.fasterxml.jackson.core</groupId>
73+
<artifactId>jackson-core</artifactId>
74+
<version>${jackson-version}</version>
75+
</dependency>
76+
<dependency>
77+
<groupId>com.fasterxml.jackson.core</groupId>
78+
<artifactId>jackson-annotations</artifactId>
79+
<version>${jackson-version}</version>
7280
</dependency>
7381
<dependency>
74-
<groupId>com.squareup.okhttp3</groupId>
75-
<artifactId>okhttp</artifactId>
76-
<version>${okhttp-version}</version>
82+
<groupId>com.fasterxml.jackson.core</groupId>
83+
<artifactId>jackson-databind</artifactId>
84+
<version>${jackson-databind-version}</version>
7785
</dependency>
7886
<dependency>
79-
<groupId>com.squareup.okhttp3</groupId>
80-
<artifactId>logging-interceptor</artifactId>
81-
<version>${okhttp-version}</version>
87+
<groupId>com.fasterxml.jackson.jakarta.rs</groupId>
88+
<artifactId>jackson-jakarta-rs-json-provider</artifactId>
89+
<version>${jackson-version}</version>
8290
</dependency>
8391
<dependency>
84-
<groupId>com.google.code.gson</groupId>
85-
<artifactId>gson</artifactId>
86-
<version>${gson-version}</version>
92+
<groupId>com.fasterxml.jackson.datatype</groupId>
93+
<artifactId>jackson-datatype-jsr310</artifactId>
94+
<version>${jackson-version}</version>
8795
</dependency>
8896
<dependency>
89-
<groupId>io.gsonfire</groupId>
90-
<artifactId>gson-fire</artifactId>
91-
<version>${gson-fire-version}</version>
97+
<groupId>org.openapitools</groupId>
98+
<artifactId>jackson-databind-nullable</artifactId>
99+
<version>${jackson-databind-nullable-version}</version>
100+
</dependency>
101+
<dependency>
102+
<groupId>jakarta.annotation</groupId>
103+
<artifactId>jakarta.annotation-api</artifactId>
104+
<version>${jakarta-annotation-api-version}</version>
92105
</dependency>
93106

94107
<!-- Logging -->
@@ -112,7 +125,6 @@
112125
<dependency>
113126
<groupId>org.testcontainers</groupId>
114127
<artifactId>junit-jupiter</artifactId>
115-
<version>1.20.2</version>
116128
<scope>test</scope>
117129
</dependency>
118130
<dependency>
@@ -127,9 +139,9 @@
127139
<build>
128140
<plugins>
129141
<plugin>
130-
<groupId>io.swagger.codegen.v3</groupId>
131-
<artifactId>swagger-codegen-maven-plugin</artifactId>
132-
<version>${swagger-codegen-maven-plugin-version}</version>
142+
<groupId>org.openapitools</groupId>
143+
<artifactId>openapi-generator-maven-plugin</artifactId>
144+
<version>${openapi-generator-maven-plugin-version}</version>
133145
<executions>
134146
<execution>
135147
<id>generate-inference</id>
@@ -138,17 +150,17 @@
138150
</goals>
139151
<configuration>
140152
<inputSpec>${project.basedir}/src/main/resources/v0.11.1/inference.json</inputSpec>
141-
<language>java</language>
153+
<generatorName>java</generatorName>
142154
<modelPackage>com.github.tadayosi.torchserve.client.inference.model</modelPackage>
143155
<apiPackage>com.github.tadayosi.torchserve.client.inference.api</apiPackage>
144156
<invokerPackage>com.github.tadayosi.torchserve.client.inference.invoker</invokerPackage>
145157
<configOptions>
146-
<java11>true</java11>
147-
<jakarta>true</jakarta>
148-
<dateLibrary>java11</dateLibrary>
149-
<library>okhttp4-gson</library>
158+
<useJakartaEe>true</useJakartaEe>
159+
<library>apache-httpclient</library>
150160
</configOptions>
161+
<generateModelTests>false</generateModelTests>
151162
<generateApiTests>false</generateApiTests>
163+
<skipValidateSpec>true</skipValidateSpec>
152164
</configuration>
153165
</execution>
154166
<execution>
@@ -158,17 +170,17 @@
158170
</goals>
159171
<configuration>
160172
<inputSpec>${project.basedir}/src/main/resources/v0.11.1/management.json</inputSpec>
161-
<language>java</language>
173+
<generatorName>java</generatorName>
162174
<modelPackage>com.github.tadayosi.torchserve.client.management.model</modelPackage>
163175
<apiPackage>com.github.tadayosi.torchserve.client.management.api</apiPackage>
164176
<invokerPackage>com.github.tadayosi.torchserve.client.management.invoker</invokerPackage>
165177
<configOptions>
166-
<java11>true</java11>
167-
<jakarta>true</jakarta>
168-
<dateLibrary>java11</dateLibrary>
169-
<library>okhttp4-gson</library>
178+
<useJakartaEe>true</useJakartaEe>
179+
<library>apache-httpclient</library>
170180
</configOptions>
181+
<generateModelTests>false</generateModelTests>
171182
<generateApiTests>false</generateApiTests>
183+
<skipValidateSpec>true</skipValidateSpec>
172184
</configuration>
173185
</execution>
174186
<execution>
@@ -178,17 +190,17 @@
178190
</goals>
179191
<configuration>
180192
<inputSpec>${project.basedir}/src/main/resources/v0.11.1/metrics.json</inputSpec>
181-
<language>java</language>
193+
<generatorName>java</generatorName>
182194
<modelPackage>com.github.tadayosi.torchserve.client.metrics.model</modelPackage>
183195
<apiPackage>com.github.tadayosi.torchserve.client.metrics.api</apiPackage>
184196
<invokerPackage>com.github.tadayosi.torchserve.client.metrics.invoker</invokerPackage>
185197
<configOptions>
186-
<java11>true</java11>
187-
<jakarta>true</jakarta>
188-
<dateLibrary>java11</dateLibrary>
189-
<library>okhttp4-gson</library>
198+
<useJakartaEe>true</useJakartaEe>
199+
<library>apache-httpclient</library>
190200
</configOptions>
201+
<generateModelTests>false</generateModelTests>
191202
<generateApiTests>false</generateApiTests>
203+
<skipValidateSpec>true</skipValidateSpec>
192204
</configuration>
193205
</execution>
194206
</executions>
@@ -206,7 +218,7 @@
206218
</goals>
207219
<configuration>
208220
<sources>
209-
<source>${project.build.directory}/generated-sources/swagger/src/main/java</source>
221+
<source>${project.build.directory}/generated-sources/openapi/src/main/java</source>
210222
</sources>
211223
</configuration>
212224
</execution>

src/main/java/com/github/tadayosi/torchserve/client/impl/DefaultInference.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.github.tadayosi.torchserve.client.impl;
22

3+
import java.util.Map;
4+
35
import com.github.tadayosi.torchserve.client.Inference;
46
import com.github.tadayosi.torchserve.client.inference.api.DefaultApi;
57
import com.github.tadayosi.torchserve.client.inference.invoker.ApiClient;
@@ -36,7 +38,8 @@ public void setAuthToken(String token) {
3638
@Override
3739
public Api apiDescription() throws ApiException {
3840
try {
39-
return Api.from(api.apiDescription());
41+
// Workaround for HTTPClient 5.4 requiring content-type for OPTIONS requests
42+
return Api.from(api.apiDescription(Map.of("Content-Type", "application/json")));
4043
} catch (com.github.tadayosi.torchserve.client.inference.invoker.ApiException e) {
4144
throw new ApiException(e);
4245
}
@@ -55,7 +58,7 @@ public Response ping() throws ApiException {
5558
public Object predictions(String modelName, Object body) throws ApiException {
5659
try {
5760
// /predictions/{model_name}
58-
return api.predictions_1(body, modelName);
61+
return api.predictions_1(modelName, body);
5962
} catch (com.github.tadayosi.torchserve.client.inference.invoker.ApiException e) {
6063
throw new ApiException(e);
6164
}
@@ -64,7 +67,7 @@ public Object predictions(String modelName, Object body) throws ApiException {
6467
@Override
6568
public Object predictions(String modelName, String modelVersion, Object body) throws ApiException {
6669
try {
67-
return api.versionPredictions(body, modelName, modelVersion);
70+
return api.versionPredictions(modelName, modelVersion, body);
6871
} catch (com.github.tadayosi.torchserve.client.inference.invoker.ApiException e) {
6972
throw new ApiException(e);
7073
}

src/main/java/com/github/tadayosi/torchserve/client/impl/DefaultManagement.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.github.tadayosi.torchserve.client.impl;
22

33
import java.util.List;
4+
import java.util.Map;
45

56
import com.github.tadayosi.torchserve.client.Management;
67
import com.github.tadayosi.torchserve.client.management.api.DefaultApi;
@@ -43,7 +44,7 @@ public void setAuthToken(String token) {
4344
@Override
4445
public Response registerModel(String url, RegisterModelOptions options) throws ApiException {
4546
try {
46-
return Response.from(api.registerModel(url, null,
47+
return Response.from(api.registerModel(url,
4748
options.getModelName(),
4849
options.getHandler(),
4950
options.getRuntime(),
@@ -52,7 +53,8 @@ public Response registerModel(String url, RegisterModelOptions options) throws A
5253
options.getResponseTimeout(),
5354
options.getInitialWorkers(),
5455
options.getSynchronous(),
55-
options.getS3SseKms()));
56+
options.getS3SseKms(),
57+
null));
5658
} catch (com.github.tadayosi.torchserve.client.management.invoker.ApiException e) {
5759
throw new ApiException(e);
5860
}
@@ -89,7 +91,7 @@ public Response setAutoScale(String modelName, String modelVersion, SetAutoScale
8991
@Override
9092
public List<ModelDetail> describeModel(String modelName) throws ApiException {
9193
try {
92-
return ModelDetail.from(api.describeModel(modelName));
94+
return ModelDetail.fromList(api.describeModel(modelName));
9395
} catch (com.github.tadayosi.torchserve.client.management.invoker.ApiException e) {
9496
throw new ApiException(e);
9597
}
@@ -98,7 +100,7 @@ public List<ModelDetail> describeModel(String modelName) throws ApiException {
98100
@Override
99101
public List<ModelDetail> describeModel(String modelName, String modelVersion) throws ApiException {
100102
try {
101-
return ModelDetail.from(api.versionDescribeModel(modelName, modelVersion));
103+
return ModelDetail.fromList(api.versionDescribeModel(modelName, modelVersion));
102104
} catch (com.github.tadayosi.torchserve.client.management.invoker.ApiException e) {
103105
throw new ApiException(e);
104106
}
@@ -148,7 +150,8 @@ public Response setDefault(String modelName, String modelVersion) throws ApiExce
148150
@Override
149151
public Api apiDescription() throws ApiException {
150152
try {
151-
return Api.from(api.apiDescription());
153+
// Workaround for HTTPClient 5.4 requiring content-type for OPTIONS requests
154+
return Api.from(api.apiDescription(Map.of("Content-Type", "application/json")));
152155
} catch (com.github.tadayosi.torchserve.client.management.invoker.ApiException e) {
153156
throw new ApiException(e);
154157
}

src/main/java/com/github/tadayosi/torchserve/client/model/Api.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public Api() {
1313
}
1414

1515
@SuppressWarnings("unchecked")
16-
public static Api from(com.github.tadayosi.torchserve.client.inference.model.InlineResponse200 src) {
16+
public static Api from(com.github.tadayosi.torchserve.client.inference.model.ApiDescription200Response src) {
1717
Api api = new Api();
1818
api.setOpenapi(src.getOpenapi());
1919
api.setInfo((Map<String, String>) src.getInfo());
@@ -22,7 +22,7 @@ public static Api from(com.github.tadayosi.torchserve.client.inference.model.Inl
2222
}
2323

2424
@SuppressWarnings("unchecked")
25-
public static Api from(com.github.tadayosi.torchserve.client.management.model.InlineResponse200 src) {
25+
public static Api from(com.github.tadayosi.torchserve.client.management.model.ApiDescription200Response src) {
2626
Api api = new Api();
2727
api.setOpenapi(src.getOpenapi());
2828
api.setInfo((Map<String, String>) src.getInfo());

src/main/java/com/github/tadayosi/torchserve/client/model/JobQueueStatus.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.github.tadayosi.torchserve.client.model;
22

3-
import com.github.tadayosi.torchserve.client.management.model.ModelsmodelNameJobQueueStatus;
3+
import com.github.tadayosi.torchserve.client.management.model.DescribeModel200ResponseInnerJobQueueStatus;
44

55
public class JobQueueStatus {
66

@@ -10,7 +10,7 @@ public class JobQueueStatus {
1010
public JobQueueStatus() {
1111
}
1212

13-
public static JobQueueStatus from(ModelsmodelNameJobQueueStatus src) {
13+
public static JobQueueStatus from(DescribeModel200ResponseInnerJobQueueStatus src) {
1414
if (src == null) {
1515
return null;
1616
}

src/main/java/com/github/tadayosi/torchserve/client/model/Metrics.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.github.tadayosi.torchserve.client.model;
22

3-
import com.github.tadayosi.torchserve.client.management.model.ModelsmodelNameMetrics;
4-
import com.google.gson.annotations.SerializedName;
3+
import com.github.tadayosi.torchserve.client.management.model.DescribeModel200ResponseInnerMetrics;
54

65
public class Metrics {
76

@@ -12,7 +11,7 @@ public class Metrics {
1211
public Metrics() {
1312
}
1413

15-
public static Metrics from(ModelsmodelNameMetrics src) {
14+
public static Metrics from(DescribeModel200ResponseInnerMetrics src) {
1615
if (src == null) {
1716
return null;
1817
}

src/main/java/com/github/tadayosi/torchserve/client/model/Model.java

+6-12
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.github.tadayosi.torchserve.client.model;
22

33
import java.util.List;
4-
import java.util.Map;
54
import java.util.stream.Collectors;
65

6+
import com.github.tadayosi.torchserve.client.management.model.ListModels200ResponseModelsInner;
77
import org.slf4j.Logger;
88
import org.slf4j.LoggerFactory;
99

@@ -17,21 +17,15 @@ public class Model {
1717
public Model() {
1818
}
1919

20-
public static Model fromMap(Object src) {
21-
if (!(src instanceof Map)) {
22-
LOG.error("Unexpected model data: {}", src);
23-
return new Model();
24-
}
25-
@SuppressWarnings("unchecked")
26-
Map<String, String> map = (Map<String, String>) src;
20+
public static Model from(ListModels200ResponseModelsInner src) {
2721
Model model = new Model();
28-
model.setModelName(map.get("modelName"));
29-
model.setModelUrl(map.get("modelUrl"));
22+
model.setModelName(src.getModelName());
23+
model.setModelUrl(src.getModelUrl());
3024
return model;
3125
}
3226

33-
public static List<Model> fromMap(List<Object> src) {
34-
return src.stream().map(Model::fromMap).collect(Collectors.toList());
27+
public static List<Model> from(List<ListModels200ResponseModelsInner> src) {
28+
return src.stream().map(Model::from).collect(Collectors.toList());
3529
}
3630

3731
public String getModelName() {

src/main/java/com/github/tadayosi/torchserve/client/model/ModelDetail.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public class ModelDetail extends Model {
1919
public ModelDetail() {
2020
}
2121

22-
public static ModelDetail from(com.github.tadayosi.torchserve.client.management.model.InlineResponse2003 src) {
22+
public static ModelDetail from(com.github.tadayosi.torchserve.client.management.model.DescribeModel200ResponseInner src) {
2323
ModelDetail model = new ModelDetail();
2424
model.setModelName(src.getModelName());
2525
model.setModelVersion(src.getModelVersion());
@@ -35,7 +35,7 @@ public static ModelDetail from(com.github.tadayosi.torchserve.client.management.
3535
return model;
3636
}
3737

38-
public static List<ModelDetail> from(List<com.github.tadayosi.torchserve.client.management.model.InlineResponse2003> src) {
38+
public static List<ModelDetail> fromList(List<com.github.tadayosi.torchserve.client.management.model.DescribeModel200ResponseInner> src) {
3939
return src.stream().map(ModelDetail::from).collect(Collectors.toList());
4040
}
4141

0 commit comments

Comments
 (0)