Skip to content

Commit 093a51e

Browse files
authored
Resolve inline schemas in webhooks (#20165)
* resolve inline schemas in webhooks * update samples
1 parent 1ba18a0 commit 093a51e

File tree

15 files changed

+1186
-1
lines changed

15 files changed

+1186
-1
lines changed

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

+24-1
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

+30
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,36 @@ 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
45+
responses:
46+
'200':
47+
description: successful operation
48+
'405':
49+
description: Invalid input
2050
paths:
2151
/pet:
2252
post:

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

+6
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

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

+2
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

+20
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:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
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+
### HTTP response details
65+
| Status code | Description | Response headers |
66+
|-------------|-------------|------------------|
67+
| **200** | successful operation | - |
68+
| **405** | Invalid input | - |
69+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
3+
# FakeWebhooksSourcesDeletedPostRequest
4+
5+
inline schema in webhooks
6+
7+
## Properties
8+
9+
| Name | Type | Description | Notes |
10+
|------------ | ------------- | ------------- | -------------|
11+
|**eventTimestamp** | **OffsetDateTime** | | |
12+
|**eventType** | **String** | | |
13+
|**event** | [**FakeWebhooksSourcesDeletedPostRequestEvent**](FakeWebhooksSourcesDeletedPostRequestEvent.md) | | |
14+
15+
16+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
2+
3+
# FakeWebhooksSourcesDeletedPostRequestEvent
4+
5+
6+
## Properties
7+
8+
| Name | Type | Description | Notes |
9+
|------------ | ------------- | ------------- | -------------|
10+
|**eventId** | **String** | | |
11+
12+
13+

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

+2
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)