Skip to content

Commit c795a65

Browse files
committed
resolve inline schemas in webhooks
1 parent 1ba18a0 commit c795a65

File tree

9 files changed

+357
-1
lines changed

9 files changed

+357
-1
lines changed

modules/openapi-generator/src/main/java/org/openapitools/codegen/InlineModelResolver.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import com.fasterxml.jackson.databind.MapperFeature;
2323
import com.fasterxml.jackson.databind.ObjectMapper;
2424
import io.swagger.v3.core.util.Json;
25+
import io.swagger.v3.oas.annotations.Webhook;
26+
import io.swagger.v3.oas.annotations.Webhooks;
2527
import io.swagger.v3.oas.models.*;
2628
import io.swagger.v3.oas.models.PathItem.HttpMethod;
2729
import io.swagger.v3.oas.models.callbacks.Callback;
@@ -35,6 +37,7 @@
3537
import org.slf4j.Logger;
3638
import org.slf4j.LoggerFactory;
3739

40+
import java.nio.file.Path;
3841
import java.util.*;
3942

4043
public class InlineModelResolver {
@@ -106,10 +109,22 @@ void flatten(OpenAPI openAPI) {
106109
}
107110

108111
flattenPaths();
112+
flattenWebhooks();
109113
flattenComponents();
110114
flattenComponentResponses();
111115
}
112116

117+
/**
118+
* Flatten inline models in Webhooks
119+
*/
120+
private void flattenWebhooks() {
121+
Map<String, PathItem> webhooks = openAPI.getWebhooks();
122+
if (webhooks == null) {
123+
return;
124+
}
125+
flattenPathItems(webhooks);
126+
}
127+
113128
/**
114129
* Flatten inline models in Paths
115130
*/
@@ -118,8 +133,16 @@ private void flattenPaths() {
118133
if (paths == null) {
119134
return;
120135
}
136+
flattenPathItems(paths);
137+
}
121138

122-
for (Map.Entry<String, PathItem> pathsEntry : paths.entrySet()) {
139+
/**
140+
* Flatten inline models in path items
141+
*
142+
* @param pathItemMap Map of path items
143+
*/
144+
private void flattenPathItems(Map<String, PathItem> pathItemMap) {
145+
for (Map.Entry<String, PathItem> pathsEntry : pathItemMap.entrySet()) {
123146
PathItem path = pathsEntry.getValue();
124147
List<Map.Entry<HttpMethod, Operation>> toFlatten = new ArrayList<>(path.readOperationsMap().entrySet());
125148

modules/openapi-generator/src/test/resources/3_1/java/petstore.yaml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,31 @@ tags:
1717
description: Access to Petstore orders
1818
- name: user
1919
description: Operations about user
20+
webhooks:
21+
/fake/webhooks/sources/deleted:
22+
post:
23+
requestBody:
24+
content:
25+
application/json:
26+
schema:
27+
description: inline schema in webhooks
28+
required:
29+
- event_timestamp
30+
- event_type
31+
- event
32+
properties:
33+
event_timestamp:
34+
type: string
35+
format: date-time
36+
event_type:
37+
type: string
38+
event:
39+
type: object
40+
required:
41+
- event_id
42+
properties:
43+
event_id:
44+
type: string
2045
paths:
2146
/pet:
2247
post:

samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ docs/CircularReference1.md
1515
docs/CircularReference2.md
1616
docs/CircularReference3.md
1717
docs/CodesEnum.md
18+
docs/DefaultApi.md
1819
docs/Dog.md
1920
docs/FakeApi.md
21+
docs/FakeWebhooksSourcesDeletedPostRequest.md
22+
docs/FakeWebhooksSourcesDeletedPostRequestEvent.md
2023
docs/ModelApiResponse.md
2124
docs/OneOfStringOrInt.md
2225
docs/Order.md
@@ -55,6 +58,7 @@ src/main/java/org/openapitools/client/ProgressResponseBody.java
5558
src/main/java/org/openapitools/client/ServerConfiguration.java
5659
src/main/java/org/openapitools/client/ServerVariable.java
5760
src/main/java/org/openapitools/client/StringUtil.java
61+
src/main/java/org/openapitools/client/api/DefaultApi.java
5862
src/main/java/org/openapitools/client/api/FakeApi.java
5963
src/main/java/org/openapitools/client/api/PetApi.java
6064
src/main/java/org/openapitools/client/api/StoreApi.java
@@ -79,6 +83,8 @@ src/main/java/org/openapitools/client/model/CircularReference2.java
7983
src/main/java/org/openapitools/client/model/CircularReference3.java
8084
src/main/java/org/openapitools/client/model/CodesEnum.java
8185
src/main/java/org/openapitools/client/model/Dog.java
86+
src/main/java/org/openapitools/client/model/FakeWebhooksSourcesDeletedPostRequest.java
87+
src/main/java/org/openapitools/client/model/FakeWebhooksSourcesDeletedPostRequestEvent.java
8288
src/main/java/org/openapitools/client/model/ModelApiResponse.java
8389
src/main/java/org/openapitools/client/model/OneOfStringOrInt.java
8490
src/main/java/org/openapitools/client/model/Order.java
@@ -92,3 +98,5 @@ src/main/java/org/openapitools/client/model/SimpleModelWithArrayProperty.java
9298
src/main/java/org/openapitools/client/model/StringOrInt.java
9399
src/main/java/org/openapitools/client/model/Tag.java
94100
src/main/java/org/openapitools/client/model/User.java
101+
src/test/java/org/openapitools/client/model/FakeWebhooksSourcesDeletedPostRequestEventTest.java
102+
src/test/java/org/openapitools/client/model/FakeWebhooksSourcesDeletedPostRequestTest.java

samples/client/petstore/java/okhttp-gson-3.1/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,8 @@ Class | Method | HTTP request | Description
160160
- [CircularReference3](docs/CircularReference3.md)
161161
- [CodesEnum](docs/CodesEnum.md)
162162
- [Dog](docs/Dog.md)
163+
- [FakeWebhooksSourcesDeletedPostRequest](docs/FakeWebhooksSourcesDeletedPostRequest.md)
164+
- [FakeWebhooksSourcesDeletedPostRequestEvent](docs/FakeWebhooksSourcesDeletedPostRequestEvent.md)
163165
- [ModelApiResponse](docs/ModelApiResponse.md)
164166
- [OneOfStringOrInt](docs/OneOfStringOrInt.md)
165167
- [Order](docs/Order.md)

samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,6 +1203,26 @@ components:
12031203
- items:
12041204
type: string
12051205
type: array
1206+
_fake_webhooks_sources_deleted_post_request_event:
1207+
properties:
1208+
event_id:
1209+
type: string
1210+
required:
1211+
- event_id
1212+
_fake_webhooks_sources_deleted_post_request:
1213+
description: inline schema in webhooks
1214+
properties:
1215+
event_timestamp:
1216+
format: date-time
1217+
type: string
1218+
event_type:
1219+
type: string
1220+
event:
1221+
$ref: '#/components/schemas/_fake_webhooks_sources_deleted_post_request_event'
1222+
required:
1223+
- event
1224+
- event_timestamp
1225+
- event_type
12061226
securitySchemes:
12071227
petstore_auth:
12081228
flows:
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# DefaultApi
2+
3+
All URIs are relative to *http://petstore.swagger.io/v2*
4+
5+
| Method | HTTP request | Description |
6+
|------------- | ------------- | -------------|
7+
| [**fakeWebhooksSourcesDeletedPost**](DefaultApi.md#fakeWebhooksSourcesDeletedPost) | **POST** /fake/webhooks/sources/deleted | |
8+
9+
10+
<a id="fakeWebhooksSourcesDeletedPost"></a>
11+
# **fakeWebhooksSourcesDeletedPost**
12+
> fakeWebhooksSourcesDeletedPost(fakeWebhooksSourcesDeletedPostRequest)
13+
14+
15+
16+
### Example
17+
```java
18+
// Import classes:
19+
import org.openapitools.client.ApiClient;
20+
import org.openapitools.client.ApiException;
21+
import org.openapitools.client.Configuration;
22+
import org.openapitools.client.models.*;
23+
import org.openapitools.client.api.DefaultApi;
24+
25+
public class Example {
26+
public static void main(String[] args) {
27+
ApiClient defaultClient = Configuration.getDefaultApiClient();
28+
defaultClient.setBasePath("http://petstore.swagger.io/v2");
29+
30+
DefaultApi apiInstance = new DefaultApi(defaultClient);
31+
FakeWebhooksSourcesDeletedPostRequest fakeWebhooksSourcesDeletedPostRequest = new FakeWebhooksSourcesDeletedPostRequest(); // FakeWebhooksSourcesDeletedPostRequest |
32+
try {
33+
apiInstance.fakeWebhooksSourcesDeletedPost(fakeWebhooksSourcesDeletedPostRequest);
34+
} catch (ApiException e) {
35+
System.err.println("Exception when calling DefaultApi#fakeWebhooksSourcesDeletedPost");
36+
System.err.println("Status code: " + e.getCode());
37+
System.err.println("Reason: " + e.getResponseBody());
38+
System.err.println("Response headers: " + e.getResponseHeaders());
39+
e.printStackTrace();
40+
}
41+
}
42+
}
43+
```
44+
45+
### Parameters
46+
47+
| Name | Type | Description | Notes |
48+
|------------- | ------------- | ------------- | -------------|
49+
| **fakeWebhooksSourcesDeletedPostRequest** | [**FakeWebhooksSourcesDeletedPostRequest**](FakeWebhooksSourcesDeletedPostRequest.md)| | [optional] |
50+
51+
### Return type
52+
53+
null (empty response body)
54+
55+
### Authorization
56+
57+
No authorization required
58+
59+
### HTTP request headers
60+
61+
- **Content-Type**: application/json
62+
- **Accept**: Not defined
63+
64+

samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ private static Class getClassByDiscriminator(Map classByDiscriminatorValue, Stri
131131
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.CircularReference2.CustomTypeAdapterFactory());
132132
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.CircularReference3.CustomTypeAdapterFactory());
133133
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Dog.CustomTypeAdapterFactory());
134+
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.FakeWebhooksSourcesDeletedPostRequest.CustomTypeAdapterFactory());
135+
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.FakeWebhooksSourcesDeletedPostRequestEvent.CustomTypeAdapterFactory());
134136
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.ModelApiResponse.CustomTypeAdapterFactory());
135137
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.OneOfStringOrInt.CustomTypeAdapterFactory());
136138
gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Order.CustomTypeAdapterFactory());

0 commit comments

Comments
 (0)