Search in sources :

Example 11 with Schema

use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.

the class ResolverFully method resolvePath.

public void resolvePath(PathItem pathItem) {
    for (Operation op : pathItem.readOperations()) {
        // inputs
        if (op.getParameters() != null) {
            for (Parameter parameter : op.getParameters()) {
                parameter = parameter.get$ref() != null ? resolveParameter(parameter) : parameter;
                if (parameter.getSchema() != null) {
                    Schema resolved = resolveSchema(parameter.getSchema());
                    if (resolved != null) {
                        parameter.setSchema(resolved);
                    }
                }
                if (parameter.getContent() != null) {
                    Map<String, MediaType> content = parameter.getContent();
                    for (String key : content.keySet()) {
                        if (content.get(key) != null && content.get(key).getSchema() != null) {
                            Schema resolvedSchema = resolveSchema(content.get(key).getSchema());
                            if (resolvedSchema != null) {
                                content.get(key).setSchema(resolvedSchema);
                            }
                        }
                    }
                }
            }
        }
        if (op.getCallbacks() != null) {
            Map<String, Callback> callbacks = op.getCallbacks();
            for (String name : callbacks.keySet()) {
                Callback callback = callbacks.get(name);
                callback = callback.get$ref() != null ? resolveCallback(callback) : callback;
                if (callback != null) {
                    for (String callbackName : callback.keySet()) {
                        PathItem path = callback.get(callbackName);
                        if (path != null) {
                            resolvePath(path);
                        }
                    }
                }
                op.getCallbacks().put(name, callback);
            }
        }
        RequestBody refRequestBody = op.getRequestBody();
        if (refRequestBody != null) {
            RequestBody requestBody = refRequestBody.get$ref() != null ? resolveRequestBody(refRequestBody) : refRequestBody;
            op.setRequestBody(requestBody);
            if (requestBody.getContent() != null) {
                Map<String, MediaType> content = requestBody.getContent();
                for (String key : content.keySet()) {
                    if (content.get(key) != null && content.get(key).getSchema() != null) {
                        Schema resolved = resolveSchema(content.get(key).getSchema());
                        if (resolved != null) {
                            content.get(key).setSchema(resolved);
                        }
                    }
                }
            }
        }
        // responses
        ApiResponses responses = op.getResponses();
        if (responses != null) {
            for (String code : responses.keySet()) {
                ApiResponse response = responses.get(code);
                if (response.getContent() != null) {
                    Map<String, MediaType> content = response.getContent();
                    for (String mediaType : content.keySet()) {
                        if (content.get(mediaType).getSchema() != null) {
                            Schema resolved = resolveSchema(content.get(mediaType).getSchema());
                            response.getContent().get(mediaType).setSchema(resolved);
                        }
                        if (content.get(mediaType).getExamples() != null) {
                            Map<String, Example> resolved = resolveExample(content.get(mediaType).getExamples());
                            response.getContent().get(mediaType).setExamples(resolved);
                        }
                    }
                }
                resolveHeaders(response.getHeaders());
                Map<String, Link> links = response.getLinks();
                if (links != null) {
                    for (Map.Entry<String, Link> link : links.entrySet()) {
                        Link value = link.getValue();
                        Link resolvedValue = value.get$ref() != null ? resolveLink(value) : value;
                        link.setValue(resolvedValue);
                    }
                }
            }
        }
    }
}
Also used : Operation(io.swagger.v3.oas.models.Operation) ApiResponse(io.swagger.v3.oas.models.responses.ApiResponse) PathItem(io.swagger.v3.oas.models.PathItem) Callback(io.swagger.v3.oas.models.callbacks.Callback) Example(io.swagger.v3.oas.models.examples.Example) Parameter(io.swagger.v3.oas.models.parameters.Parameter) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) IdentityHashMap(java.util.IdentityHashMap) ApiResponses(io.swagger.v3.oas.models.responses.ApiResponses) Link(io.swagger.v3.oas.models.links.Link) RequestBody(io.swagger.v3.oas.models.parameters.RequestBody)

Example 12 with Schema

use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.

the class InlineModelResolver method modelFromProperty.

@SuppressWarnings("static-method")
public Schema modelFromProperty(Schema object, @SuppressWarnings("unused") String path) {
    String description = object.getDescription();
    String example = null;
    Object obj = object.getExample();
    if (obj != null) {
        example = obj.toString();
    }
    ArraySchema model = new ArraySchema();
    model.setDescription(description);
    model.setExample(example);
    if (object.getAdditionalProperties() != null && !(object.getAdditionalProperties() instanceof Boolean)) {
        model.setItems((Schema) object.getAdditionalProperties());
    }
    return model;
}
Also used : ArraySchema(io.swagger.v3.oas.models.media.ArraySchema)

Example 13 with Schema

use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.

the class InlineModelResolver method flattenDefinitions.

private void flattenDefinitions(Map<String, Schema> models) {
    if (models == null) {
        return;
    }
    List<String> modelNames = new ArrayList<String>(models.keySet());
    for (String modelName : modelNames) {
        Schema model = models.get(modelName);
        if (model.getProperties() != null) {
            Map<String, Schema> properties = model.getProperties();
            flattenProperties(properties, modelName);
            fixStringModel(model);
        } else if (model instanceof ArraySchema) {
            ArraySchema m = (ArraySchema) model;
            Schema inner = m.getItems();
            if (isObjectSchema(inner)) {
                if (inner.getProperties() != null && inner.getProperties().size() > 0) {
                    String innerModelName = resolveModelName(inner.getTitle(), modelName + "_inner");
                    String existing = matchGenerated(inner);
                    if (existing == null) {
                        openAPI.getComponents().addSchemas(innerModelName, inner);
                        addGenerated(innerModelName, inner);
                        m.setItems(new Schema().$ref(innerModelName));
                    } else {
                        m.setItems(new Schema().$ref(existing));
                    }
                } else if (inner instanceof ComposedSchema && this.flattenComposedSchemas) {
                    flattenComposedSchema(inner, modelName);
                    if (inner.get$ref() == null) {
                        modelName = resolveModelName(inner.getTitle(), "inline_array_items_" + modelName);
                        m.setItems(this.makeRefProperty(modelName, inner));
                        addGenerated(modelName, inner);
                        openAPI.getComponents().addSchemas(modelName, inner);
                    }
                }
            }
        } else if (model instanceof ComposedSchema) {
            ComposedSchema composedSchema = (ComposedSchema) model;
            String inlineModelName = "";
            List<Schema> list = null;
            if (composedSchema.getAllOf() != null) {
                list = composedSchema.getAllOf();
                inlineModelName = "AllOf";
            } else if (composedSchema.getAnyOf() != null) {
                list = composedSchema.getAnyOf();
                inlineModelName = "AnyOf";
            } else if (composedSchema.getOneOf() != null) {
                list = composedSchema.getOneOf();
                inlineModelName = "OneOf";
            }
            for (int i = 0; i < list.size(); i++) {
                if (list.get(i).get$ref() == null) {
                    Schema inline = list.get(i);
                    if (inline.getProperties() != null) {
                        flattenProperties(inline.getProperties(), modelName);
                    }
                    if (this.flattenComposedSchemas) {
                        int position = i + 1;
                        inlineModelName = resolveModelName(inline.getTitle(), modelName + inlineModelName + "_" + position);
                        list.set(i, new Schema().$ref(inlineModelName));
                        addGenerated(inlineModelName, inline);
                        openAPI.getComponents().addSchemas(inlineModelName, inline);
                    }
                }
            }
        }
    }
}
Also used : ArraySchema(io.swagger.v3.oas.models.media.ArraySchema) ArraySchema(io.swagger.v3.oas.models.media.ArraySchema) ComposedSchema(io.swagger.v3.oas.models.media.ComposedSchema) ObjectSchema(io.swagger.v3.oas.models.media.ObjectSchema) Schema(io.swagger.v3.oas.models.media.Schema) ArrayList(java.util.ArrayList) ComposedSchema(io.swagger.v3.oas.models.media.ComposedSchema)

Example 14 with Schema

use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.

the class InlineModelResolver method flattenParams.

private void flattenParams(String pathname, List<Parameter> parameters) {
    if (parameters == null) {
        return;
    }
    for (Parameter parameter : parameters) {
        if (parameter.getSchema() != null) {
            Schema model = parameter.getSchema();
            if (model.getProperties() != null) {
                if (model.getType() == null || "object".equals(model.getType())) {
                    if (model.getProperties() != null && model.getProperties().size() > 0) {
                        flattenProperties(model.getProperties(), pathname);
                        String modelName = resolveModelName(model.getTitle(), parameter.getName());
                        parameter.setSchema(new Schema().$ref(modelName));
                        addGenerated(modelName, model);
                        openAPI.getComponents().addSchemas(modelName, model);
                    }
                }
            } else if (model instanceof ComposedSchema) {
                String modelName = resolveModelName(model.getTitle(), parameter.getName());
                parameter.setSchema(new Schema().$ref(modelName));
                addGenerated(modelName, model);
                openAPI.getComponents().addSchemas(modelName, model);
            } else if (model instanceof ArraySchema) {
                ArraySchema am = (ArraySchema) model;
                Schema inner = am.getItems();
                if (isObjectSchema(inner)) {
                    if (inner.getProperties() != null && inner.getProperties().size() > 0) {
                        flattenProperties(inner.getProperties(), pathname);
                        String modelName = resolveModelName(inner.getTitle(), parameter.getName());
                        String existing = matchGenerated(inner);
                        if (existing != null) {
                            am.setItems(new Schema().$ref(existing));
                        } else {
                            am.setItems(new Schema().$ref(modelName));
                            addGenerated(modelName, am);
                            openAPI.getComponents().addSchemas(modelName, am);
                        }
                    } else if (inner instanceof ComposedSchema && this.flattenComposedSchemas) {
                        flattenComposedSchema(inner, parameter.getName());
                        if (inner.get$ref() == null) {
                            String modelName = resolveModelName(inner.getTitle(), "inline_parameter_items_" + parameter.getName());
                            am.setItems(this.makeRefProperty(modelName, inner));
                            addGenerated(modelName, inner);
                            openAPI.getComponents().addSchemas(modelName, inner);
                        }
                    }
                }
            }
        }
    }
}
Also used : ArraySchema(io.swagger.v3.oas.models.media.ArraySchema) ArraySchema(io.swagger.v3.oas.models.media.ArraySchema) ComposedSchema(io.swagger.v3.oas.models.media.ComposedSchema) ObjectSchema(io.swagger.v3.oas.models.media.ObjectSchema) Schema(io.swagger.v3.oas.models.media.Schema) Parameter(io.swagger.v3.oas.models.parameters.Parameter) ComposedSchema(io.swagger.v3.oas.models.media.ComposedSchema)

Example 15 with Schema

use of io.swagger.v3.oas.annotations.media.Schema in project swagger-parser by swagger-api.

the class InlineModelResolver method flattenComposedSchema.

private void flattenComposedSchema(Schema inner, String key) {
    ComposedSchema composedSchema = (ComposedSchema) inner;
    String inlineModelName = "";
    List<Schema> list = null;
    if (composedSchema.getAllOf() != null) {
        list = composedSchema.getAllOf();
        inlineModelName = "AllOf";
    } else if (composedSchema.getAnyOf() != null) {
        list = composedSchema.getAnyOf();
        inlineModelName = "AnyOf";
    } else if (composedSchema.getOneOf() != null) {
        list = composedSchema.getOneOf();
        inlineModelName = "OneOf";
    }
    for (int i = 0; i < list.size(); i++) {
        if (list.get(i).get$ref() == null) {
            Schema inline = list.get(i);
            if (inline.getProperties() != null) {
                flattenProperties(inline.getProperties(), key);
            }
            if (this.flattenComposedSchemas) {
                int position = i + 1;
                inlineModelName = resolveModelName(inline.getTitle(), key + inlineModelName + "_" + position);
                list.set(i, new Schema().$ref(inlineModelName));
                addGenerated(inlineModelName, inline);
                openAPI.getComponents().addSchemas(inlineModelName, inline);
            }
        }
    }
}
Also used : ArraySchema(io.swagger.v3.oas.models.media.ArraySchema) ComposedSchema(io.swagger.v3.oas.models.media.ComposedSchema) ObjectSchema(io.swagger.v3.oas.models.media.ObjectSchema) Schema(io.swagger.v3.oas.models.media.Schema) ComposedSchema(io.swagger.v3.oas.models.media.ComposedSchema)

Aggregations

Schema (io.swagger.v3.oas.models.media.Schema)481 Test (org.testng.annotations.Test)464 ArraySchema (io.swagger.v3.oas.models.media.ArraySchema)370 StringSchema (io.swagger.v3.oas.models.media.StringSchema)311 IntegerSchema (io.swagger.v3.oas.models.media.IntegerSchema)258 OpenAPI (io.swagger.v3.oas.models.OpenAPI)250 ObjectSchema (io.swagger.v3.oas.models.media.ObjectSchema)246 ComposedSchema (io.swagger.v3.oas.models.media.ComposedSchema)239 MapSchema (io.swagger.v3.oas.models.media.MapSchema)170 OpenAPIV3Parser (io.swagger.v3.parser.OpenAPIV3Parser)116 DateTimeSchema (io.swagger.v3.oas.models.media.DateTimeSchema)99 DateSchema (io.swagger.v3.oas.models.media.DateSchema)96 ByteArraySchema (io.swagger.v3.oas.models.media.ByteArraySchema)86 NumberSchema (io.swagger.v3.oas.models.media.NumberSchema)86 SwaggerParseResult (io.swagger.v3.parser.core.models.SwaggerParseResult)84 Operation (io.swagger.v3.oas.models.Operation)72 MediaType (io.swagger.v3.oas.models.media.MediaType)72 ParseOptions (io.swagger.v3.parser.core.models.ParseOptions)70 Parameter (io.swagger.v3.oas.models.parameters.Parameter)69 Components (io.swagger.v3.oas.models.Components)67