diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ExternalRefProcessor.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ExternalRefProcessor.java index 8f9edfd323..e43735368d 100644 --- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ExternalRefProcessor.java +++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/processors/ExternalRefProcessor.java @@ -15,6 +15,7 @@ import io.swagger.v3.oas.models.security.SecurityScheme; import io.swagger.v3.parser.ResolverCache; import io.swagger.v3.parser.models.RefFormat; +import org.apache.commons.lang3.StringUtils; import org.slf4j.LoggerFactory; import java.net.URI; @@ -97,7 +98,8 @@ public String processRefToExternalSchema(String $ref, RefFormat refFormat) { processRefProperty(prop.getValue(), file); } else if (prop.getValue() instanceof ArraySchema) { ArraySchema arrayProp = (ArraySchema) prop.getValue(); - if (arrayProp.getItems().get$ref() != null) { + if (arrayProp.getItems() != null && arrayProp.getItems().get$ref() != null && + StringUtils.isNotBlank(arrayProp.get$ref())) { processRefProperty(arrayProp.getItems(), file); } } else if (prop.getValue().getAdditionalProperties() != null) { @@ -105,13 +107,39 @@ public String processRefToExternalSchema(String $ref, RefFormat refFormat) { if (mapProp.getAdditionalProperties().get$ref() != null) { processRefProperty(mapProp.getAdditionalProperties(), file); } else if (mapProp.getAdditionalProperties() instanceof ArraySchema && - ((ArraySchema) mapProp.getAdditionalProperties()).getItems().get$ref() != null) { + ((ArraySchema) mapProp.getAdditionalProperties()).getItems()!= null && + ((ArraySchema) mapProp.getAdditionalProperties()).getItems().get$ref() != null + && StringUtils.isNotBlank(((ArraySchema) mapProp.getAdditionalProperties()).getItems().get$ref())) { processRefProperty(((ArraySchema) mapProp.getAdditionalProperties()).getItems(), file); } } } } - if (schema instanceof ArraySchema && ((ArraySchema) schema).getItems().get$ref() != null) { + if(schema.getAdditionalProperties() != null){ + Schema additionalProperty = schema.getAdditionalProperties(); + if (additionalProperty.get$ref() != null) { + processRefProperty(additionalProperty, file); + } else if (additionalProperty instanceof ArraySchema) { + ArraySchema arrayProp = (ArraySchema) additionalProperty; + if (arrayProp.getItems() != null && arrayProp.getItems().get$ref() != null && + StringUtils.isNotBlank(arrayProp.get$ref())) { + processRefProperty(arrayProp.getItems(), file); + } + } else if (additionalProperty.getAdditionalProperties() != null) { + Schema mapProp = additionalProperty; + if (mapProp.getAdditionalProperties().get$ref() != null) { + processRefProperty(mapProp.getAdditionalProperties(), file); + } else if (mapProp.getAdditionalProperties() instanceof ArraySchema && + ((ArraySchema) mapProp.getAdditionalProperties()).getItems() != null && + ((ArraySchema) mapProp.getAdditionalProperties()).getItems().get$ref() != null + && StringUtils.isNotBlank(((ArraySchema) mapProp.getAdditionalProperties()).getItems().get$ref())) { + processRefProperty(((ArraySchema) mapProp.getAdditionalProperties()).getItems(), file); + } + } + + } + if (schema instanceof ArraySchema && ((ArraySchema) schema).getItems() != null && ((ArraySchema) schema).getItems().get$ref() != null + && StringUtils.isNotBlank(((ArraySchema) schema).getItems().get$ref())) { processRefProperty(((ArraySchema) schema).getItems(), file); } } diff --git a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java index 9473e48a49..c073793bd5 100644 --- a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java +++ b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java @@ -303,6 +303,17 @@ public void testInlineModelResolverByUrl(@Injectable final List