From f2b8efa0c303364740fd2555a2b4904a9bcd1d12 Mon Sep 17 00:00:00 2001 From: Ashok Priyadarshi Date: Fri, 27 Mar 2026 13:34:19 +0530 Subject: [PATCH] fix(parser): honor inferSchemaType for OAS 3.1 enum schemas --- .../v3/parser/util/OpenAPIDeserializer.java | 2 +- .../parser/test/OAI31DeserializationTest.java | 53 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java index 421822dd3b..ba0e8b5724 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java @@ -4020,7 +4020,7 @@ public Schema getJsonSchema(JsonNode jsonNode, String location, ParseResult resu } } - } else { + } else if (result.isInferSchemaType()) { // may have an enum where type can be inferred JsonNode enumNode = node.get("enum"); if (enumNode != null && enumNode.isArray()) { diff --git a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OAI31DeserializationTest.java b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OAI31DeserializationTest.java index 3860e76893..ba83915623 100644 --- a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OAI31DeserializationTest.java +++ b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OAI31DeserializationTest.java @@ -1035,6 +1035,59 @@ public void test31Issue1821() { assertEquals(id.getTypes().iterator().next(), "string"); } + @Test(description = "Test Issue 1964 with inferSchemaType disabled") + public void test31Issue1964InferSchemaTypeDisabled() { + ParseOptions options = new ParseOptions(); + options.setInferSchemaType(false); + + String yaml = "openapi: 3.1.0\n" + + "info:\n" + + " version: 1.0.0\n" + + " title: Example\n" + + "paths:\n" + + " /somePath:\n" + + " get:\n" + + " operationId: getSomePath\n" + + " responses:\n" + + " '200':\n" + + " description: OK\n" + + " content:\n" + + " application/json:\n" + + " schema: {}\n" + + "components:\n" + + " schemas:\n" + + " ArrayContainsValue:\n" + + " type: array\n" + + " contains:\n" + + " enum:\n" + + " - 1\n" + + " AdditionalpropertiesBeingFalseDoesNotAllowOtherProperties:\n" + + " $schema: https://json-schema.org/draft/2020-12/schema\n" + + " properties:\n" + + " foo: {}\n" + + " bar: {}\n" + + " patternProperties:\n" + + " ^v: {}\n" + + " additionalProperties: false\n"; + + SwaggerParseResult result = new OpenAPIV3Parser().readContents(yaml, null, options); + OpenAPI openAPI = result.getOpenAPI(); + assertNotNull(openAPI); + assertTrue(result.getMessages().isEmpty(), String.valueOf(result.getMessages())); + + Schema arrayContainsValue = openAPI.getComponents().getSchemas().get("ArrayContainsValue"); + assertNotNull(arrayContainsValue.getContains()); + assertNull(arrayContainsValue.getContains().getType()); + assertNull(arrayContainsValue.getContains().getTypes()); + + Schema objectWithoutExplicitType = openAPI.getComponents().getSchemas() + .get("AdditionalpropertiesBeingFalseDoesNotAllowOtherProperties"); + assertTrue(objectWithoutExplicitType.getAdditionalProperties() instanceof Schema); + assertFalse(((Schema) objectWithoutExplicitType.getAdditionalProperties()).getBooleanSchemaValue()); + assertNull(objectWithoutExplicitType.getType()); + assertNull(objectWithoutExplicitType.getTypes()); + } + @Test(description = "Test safe resolving") public void test31SafeURLResolving() { ParseOptions parseOptions = new ParseOptions();