Skip to content

[Openapi3.1] Ref inside of Items are not resolved #2201

@trubat-d

Description

@trubat-d

I have an OrderCreate Schema that holds properties, one of this properties is an buggedProperty which is of type array, this property holds a schema OrderItem in Items that is not resolved. Is it normal behavior for items not to be resolved ?

Options Used:

ParseOptions options = new ParseOptions();
options.setResolve(true);
options.setResolveFully(true);
options.setInferSchemaType(true);
SwaggerParseResult result = new OpenAPIParser().readLocation(path, null, options);

Using the Following JSON :

{
    "openapi": "3.1.0",
    "info": {
        "title": "test",
        "description": "test desc",
        "version": "1.0.0"
    },
    "servers": [
        {
            "url": "redacted",
            "description": "desc"
        }
    ],
    "paths": {
        "/orders": {
            "post": {
                "tags": [
                    "orders"
                ],
                "summary": "Create Order",
                "operationId": "create_order_orders_post",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/OrderCreate"
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "OrderCreate": {
                "properties": {
                    "delivery_address": {
                        "type": "string",
                        "title": "Delivery Address"
                    },
                    "phone_number": {
                        "type": "string",
                        "title": "Phone Number"
                    },
                    "buggedProperty": {
                        "items": {
                            "$ref": "#/components/schemas/OrderItem"
                        },
                        "type": "array",
                        "title": "Items",
                        "default": []
                    }
                },
                "type": "object",
                "required": [
                    "delivery_address",
                    "phone_number"
                ],
                "title": "OrderCreate"
            },
            "OrderItem": {
                "properties": {
                    "menu_item_id": {
                        "type": "integer",
                        "title": "Menu Item Id"
                    },
                    "quantity": {
                        "type": "integer",
                        "title": "Quantity"
                    }
                },
                "type": "object",
                "required": [
                    "menu_item_id",
                    "quantity"
                ],
                "title": "OrderItem"
            }
        }
    }
}

Result from:

 Schema<?> scheme = ((Schema<?>) parsedAPI.getComponents().getSchemas().get("OrderCreate").getProperties().get("buggedProperty")).getItems();

Is:

class JsonSchema {
    class Schema {
        type: null
        format: null
        $ref: #/components/schemas/OrderItem
        description: null
        title: null
        multipleOf: null
        maximum: null
        exclusiveMaximum: null
        minimum: null
        exclusiveMinimum: null
        maxLength: null
        minLength: null
        pattern: null
        maxItems: null
        minItems: null
        uniqueItems: null
        maxProperties: null
        minProperties: null
        required: null
        not: null
        properties: null
        additionalProperties: null
        nullable: null
        readOnly: null
        writeOnly: null
        example: null
        externalDocs: null
        deprecated: null
        discriminator: null
        xml: null
        patternProperties: null
        contains: null
        $id: null
        $anchor: null
        $schema: null
        $vocabulary: null
        $dynamicAnchor: null
        const: null
        contentEncoding: null
        contentMediaType: null
        contentSchema: null
        propertyNames: null
        unevaluatedProperties: null
        maxContains: null
        minContains: null
        additionalItems: null
        unevaluatedItems: null
        _if: null
        _else: null
        then: null
        dependentRequired: null
        dependentSchemas: null
        $comment: null
        prefixItems: null
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions