Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Commit 43375b9

Browse files
authored
Upgrades swagger parser to 2.1.1, allows ingestion of 3.1.0 specs (#13133)
* Upgrades swagger-parser * Removes additional property and halting of spec processing * Updates tests * Docs updated
1 parent 62d29c3 commit 43375b9

File tree

71 files changed

+1293
-40
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

71 files changed

+1293
-40
lines changed

modules/openapi-generator/pom.xml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -247,11 +247,6 @@
247247
</plugins>
248248
</reporting>
249249
<dependencies>
250-
<dependency>
251-
<groupId>io.swagger.core.v3</groupId>
252-
<artifactId>swagger-core</artifactId>
253-
<version>${swagger-core.version}</version>
254-
</dependency>
255250
<dependency>
256251
<groupId>${swagger-parser-groupid.version}</groupId>
257252
<artifactId>swagger-parser</artifactId>

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,10 @@ public static enum ENUM_PROPERTY_NAMING_TYPE {camelCase, PascalCase, snake_case,
388388
public static final String DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT_DESC =
389389
"If false, the 'additionalProperties' implementation (set to true by default) is compliant with the OAS and JSON schema specifications. " +
390390
"If true (default), keep the old (incorrect) behaviour that 'additionalProperties' is set to false by default.";
391-
391+
public static final String UNSUPPORTED_V310_SPEC_MSG =
392+
"Generation using 3.1.0 specs is in development and is not officially supported yet. " +
393+
"If you would like to expedite development, please consider woking on the open issues in the 3.1.0 project: https://github.com/orgs/OpenAPITools/projects/4/views/1 " +
394+
"and reach out to our team on Slack at https://join.slack.com/t/openapi-generator/shared_invite/zt-12jxxd7p2-XUeQM~4pzsU9x~eGLQqX2g";
392395
public static final String ENUM_UNKNOWN_DEFAULT_CASE = "enumUnknownDefaultCase";
393396
public static final String ENUM_UNKNOWN_DEFAULT_CASE_DESC =
394397
"If the server adds new enum cases, that are unknown by an old spec/client, the client will fail to parse the network response." +

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
import io.swagger.v3.oas.models.servers.ServerVariable;
8080
import io.swagger.v3.parser.util.SchemaTypeUtil;
8181

82+
import static org.openapitools.codegen.CodegenConstants.UNSUPPORTED_V310_SPEC_MSG;
8283
import static org.openapitools.codegen.utils.OnceLogger.once;
8384
import static org.openapitools.codegen.utils.StringUtils.*;
8485

@@ -820,6 +821,19 @@ public String toEnumVarName(String value, String datatype) {
820821
*/
821822
@Override
822823
public void setOpenAPI(OpenAPI openAPI) {
824+
String originalSpecVersion;
825+
String xOriginalSwaggerVersion = "x-original-swagger-version";
826+
if (openAPI.getExtensions() != null && !openAPI.getExtensions().isEmpty() && openAPI.getExtensions().containsValue(xOriginalSwaggerVersion)) {
827+
originalSpecVersion = (String) openAPI.getExtensions().get(xOriginalSwaggerVersion);
828+
} else {
829+
originalSpecVersion = openAPI.getOpenapi();
830+
}
831+
Integer specMajorVersion = Integer.parseInt(originalSpecVersion.substring(0, 1));
832+
Integer specMinorVersion = Integer.parseInt(originalSpecVersion.substring(2, 3));
833+
boolean specVersionGreaterThanOrEqualTo310 = (specMajorVersion == 3 && specMinorVersion >= 1);
834+
if (specVersionGreaterThanOrEqualTo310) {
835+
LOGGER.warn(UNSUPPORTED_V310_SPEC_MSG);
836+
}
823837
this.openAPI = openAPI;
824838
// Set global settings such that helper functions in ModelUtils can lookup the value
825839
// of the CLI option.

modules/openapi-generator/src/test/java/org/openapitools/codegen/DefaultCodegenTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4245,4 +4245,12 @@ public void testFromPropertyRequiredAndOptional() {
42454245
Assert.assertEquals(fooOptional.vars.get(0).name, "foo");
42464246
Assert.assertEquals(fooOptional.requiredVars.size(), 0);
42474247
}
4248+
4249+
@Test
4250+
public void testAssigning310SpecWorks() {
4251+
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_1/petstore.yaml");
4252+
final DefaultCodegen codegen = new DefaultCodegen();
4253+
codegen.setOpenAPI(openAPI);
4254+
assertEquals(openAPI, codegen.openAPI);
4255+
}
42484256
}

modules/openapi-generator/src/test/java/org/openapitools/codegen/confluencewiki/ConfluenceWikiTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,8 @@ public void overrideEnumTest() {
147147
discriminator.setPropertyName("model_type");
148148
parentModel.setDiscriminator(discriminator);
149149

150-
final ComposedSchema composedSchema = new ComposedSchema()
151-
.addAllOfItem(new Schema().$ref(parentModel.getName()));
150+
final ComposedSchema composedSchema = new ComposedSchema();
151+
composedSchema.addAllOfItem(new Schema().$ref(parentModel.getName()));
152152
composedSchema.setName("sample");
153153

154154
final ConfluenceWikiCodegen codegen = new ConfluenceWikiCodegen();

modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaModelEnumTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,8 @@ public void overrideEnumTest() {
146146
discriminator.setPropertyName("model_type");
147147
parentModel.setDiscriminator(discriminator);
148148

149-
final ComposedSchema composedSchema = new ComposedSchema()
150-
.addAllOfItem(new Schema().$ref(parentModel.getName()));
149+
final ComposedSchema composedSchema = new ComposedSchema();
150+
composedSchema.addAllOfItem(new Schema().$ref(parentModel.getName()));
151151
composedSchema.setName("sample");
152152

153153
final JavaClientCodegen codegen = new JavaClientCodegen();

modules/openapi-generator/src/test/java/org/openapitools/codegen/utils/ModelUtilsTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,8 @@ public void testReferencedParameter() {
206206
*/
207207
@Test
208208
public void testComposedSchemasAreNotUnaliased() {
209-
ComposedSchema composedSchema = new ComposedSchema().allOf(Arrays.asList(
209+
ComposedSchema composedSchema = new ComposedSchema();
210+
composedSchema.allOf(Arrays.asList(
210211
new Schema<>().$ref("#/components/schemas/SomeSchema"),
211212
new ObjectSchema()
212213
));

modules/openapi-generator/src/test/java/org/openapitools/codegen/validations/oas/OpenApiSchemaValidationsTest.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,8 @@ public Object[][] apacheNginxRecommendationExpectations() {
8484
}
8585

8686
private ComposedSchema getOneOfSample(boolean withProperties) {
87-
ComposedSchema schema = new ComposedSchema().oneOf(Arrays.asList(
87+
ComposedSchema schema = new ComposedSchema();
88+
schema.oneOf(Arrays.asList(
8889
new StringSchema(),
8990
new IntegerSchema().format("int64"))
9091
);
@@ -99,7 +100,8 @@ private ComposedSchema getOneOfSample(boolean withProperties) {
99100

100101
private ComposedSchema getAllOfSample(boolean withProperties) {
101102
// This doesn't matter if it's realistic; it's a structural check
102-
ComposedSchema schema = new ComposedSchema().allOf(Arrays.asList(
103+
ComposedSchema schema = new ComposedSchema();
104+
schema.allOf(Arrays.asList(
103105
new StringSchema(),
104106
new IntegerSchema().format("int64"))
105107
);
@@ -113,7 +115,8 @@ private ComposedSchema getAllOfSample(boolean withProperties) {
113115
}
114116

115117
private ComposedSchema getAnyOfSample(boolean withProperties) {
116-
ComposedSchema schema = new ComposedSchema().anyOf(Arrays.asList(
118+
ComposedSchema schema = new ComposedSchema();
119+
schema.anyOf(Arrays.asList(
117120
new StringSchema(),
118121
new IntegerSchema().format("int64"))
119122
);

0 commit comments

Comments
 (0)