Search in sources :

Example 1 with Oas20Schema

use of io.apicurio.datamodels.openapi.v2.models.Oas20Schema in project apicurio-data-models by Apicurio.

the class Oas20DataModelReader method readSchema.

/**
 * @see io.apicurio.datamodels.openapi.io.OasDataModelReader#readSchema(java.lang.Object, io.apicurio.datamodels.core.models.common.Schema)
 */
@Override
public void readSchema(Object json, Schema node) {
    Oas20Schema schema = (Oas20Schema) node;
    String discriminator = JsonCompat.consumePropertyString(json, Constants.PROP_DISCRIMINATOR);
    schema.discriminator = discriminator;
    super.readSchema(json, node);
}
Also used : Oas20Schema(io.apicurio.datamodels.openapi.v2.models.Oas20Schema)

Example 2 with Oas20Schema

use of io.apicurio.datamodels.openapi.v2.models.Oas20Schema in project apicurio-data-models by Apicurio.

the class Oas20to30TransformationVisitor method transformResponse.

private void transformResponse(Oas20Response node, Oas30Response response30) {
    response30.description = node.description;
    if (!NodeCompat.isNullOrUndefined(node.schema)) {
        List<String> produces = this.findProduces(node);
        Oas20Schema schema = node.schema;
        produces.forEach(ct -> {
            Oas30MediaType mediaType30 = response30.createMediaType(ct);
            response30.addMediaType(ct, mediaType30);
            Oas30Schema schema30 = mediaType30.createSchema();
            mediaType30.schema = this.toSchema(schema, schema30, true);
            if (!NodeCompat.isNullOrUndefined(node.examples)) {
                Object ctexample = node.examples.getExample(ct);
                if (!NodeCompat.isNullOrUndefined(ctexample)) {
                    mediaType30.example = ctexample;
                }
            }
            this.mapNode(schema, schema30);
        });
        // mark the Response as needing Content post-processing
        if (produces.size() > 1) {
            this._postProcessResponses.add(response30);
        }
    }
}
Also used : Oas20Schema(io.apicurio.datamodels.openapi.v2.models.Oas20Schema) Oas30Schema(io.apicurio.datamodels.openapi.v3.models.Oas30Schema) Oas30MediaType(io.apicurio.datamodels.openapi.v3.models.Oas30MediaType)

Example 3 with Oas20Schema

use of io.apicurio.datamodels.openapi.v2.models.Oas20Schema in project apicurio-data-models by Apicurio.

the class Oas20to30TransformationVisitor method visitParameterDefinition.

/**
 * @see io.apicurio.datamodels.core.visitors.IVisitor#visitParameterDefinition(io.apicurio.datamodels.core.models.common.IDefinition)
 */
@Override
public void visitParameterDefinition(IDefinition node) {
    Oas20ParameterDefinition pd20 = (Oas20ParameterDefinition) node;
    if (NodeCompat.equals(pd20.in, "body")) {
        Oas30Components parent30 = this.getOrCreateComponents();
        Oas30RequestBodyDefinition bodyDef30 = parent30.createRequestBodyDefinition(pd20.getName());
        parent30.addRequestBodyDefinition(pd20.getName(), bodyDef30);
        bodyDef30.description = pd20.description;
        bodyDef30.required = pd20.required;
        if (!NodeCompat.isNullOrUndefined(pd20.schema)) {
            List<String> consumes = this.findConsumes(pd20);
            Oas20Schema schema = (Oas20Schema) pd20.schema;
            consumes.forEach(ct -> {
                Oas30MediaType mediaType30 = bodyDef30.createMediaType(ct);
                bodyDef30.addMediaType(ct, mediaType30);
                Oas30Schema schema30 = mediaType30.createSchema();
                mediaType30.schema = this.toSchema(schema, schema30, true);
                this.mapNode(schema, schema30);
            });
        }
    } else if (NodeCompat.equals(pd20.in, "formData")) {
    // Exclude any re-usable formData parameters - they are currently being inlined elsewhere.  I'm not sure
    // what we would do with them anyway.
    } else {
        Oas30Components components30 = this.getOrCreateComponents();
        Oas30ParameterDefinition paramDef30 = components30.createParameterDefinition(pd20.getName());
        components30.addParameterDefinition(pd20.getName(), paramDef30);
        this.transformParam(pd20, paramDef30);
        this.mapNode(pd20, paramDef30);
    }
}
Also used : Oas20Schema(io.apicurio.datamodels.openapi.v2.models.Oas20Schema) Oas30Components(io.apicurio.datamodels.openapi.v3.models.Oas30Components) Oas30ParameterDefinition(io.apicurio.datamodels.openapi.v3.models.Oas30ParameterDefinition) Oas20ParameterDefinition(io.apicurio.datamodels.openapi.v2.models.Oas20ParameterDefinition) Oas30RequestBodyDefinition(io.apicurio.datamodels.openapi.v3.models.Oas30RequestBodyDefinition) Oas30Schema(io.apicurio.datamodels.openapi.v3.models.Oas30Schema) Oas30MediaType(io.apicurio.datamodels.openapi.v3.models.Oas30MediaType)

Example 4 with Oas20Schema

use of io.apicurio.datamodels.openapi.v2.models.Oas20Schema in project apicurio-data-models by Apicurio.

the class Oas20IReferenceManipulationStrategy method attachAsComponent.

@Override
public ReferenceAndNode attachAsComponent(Document document, String name, Node component) {
    if (!(document instanceof Oas20Document))
        throw new IllegalArgumentException("Oas20Document expected.");
    Oas20Document model = (Oas20Document) document;
    if (component instanceof Oas20Schema) {
        if (model.definitions == null)
            model.definitions = model.createDefinitions();
        if (model.definitions.getDefinition(name) != null)
            throw new IllegalArgumentException("Definition with that name already exists: " + name);
        Oas20SchemaDefinition definition = wrap(component, new Oas20SchemaDefinition(name), model);
        definition.attachToParent(model.definitions);
        model.definitions.addDefinition(definition.getName(), definition);
        return new ReferenceAndNode(PREFIX + "definitions/" + name, definition);
    }
    if (component instanceof Oas20Parameter) {
        if (model.parameters == null)
            model.parameters = model.createParameterDefinitions();
        if (model.parameters.getParameter(name) != null)
            throw new IllegalArgumentException("Definition with that name already exists: " + name);
        Oas20ParameterDefinition definition = wrap(component, new Oas20ParameterDefinition(name), model);
        definition.attachToParent(model.parameters);
        model.parameters.addParameter(definition.getName(), definition);
        return new ReferenceAndNode(PREFIX + "parameters/" + name, definition);
    }
    if (component instanceof Oas20Response) {
        if (model.responses == null)
            model.responses = model.createResponseDefinitions();
        if (model.responses.getResponse(name) != null)
            throw new IllegalArgumentException("Definition with that name already exists: " + name);
        Oas20ResponseDefinition definition = wrap(component, new Oas20ResponseDefinition(name), model);
        definition.attachToParent(model.responses);
        model.responses.addResponse(definition.getName(), definition);
        return new ReferenceAndNode(PREFIX + "responses/" + name, definition);
    }
    return null;
}
Also used : Oas20Schema(io.apicurio.datamodels.openapi.v2.models.Oas20Schema) Oas20Document(io.apicurio.datamodels.openapi.v2.models.Oas20Document) Oas20ParameterDefinition(io.apicurio.datamodels.openapi.v2.models.Oas20ParameterDefinition) Oas20Response(io.apicurio.datamodels.openapi.v2.models.Oas20Response) Oas20SchemaDefinition(io.apicurio.datamodels.openapi.v2.models.Oas20SchemaDefinition) Oas20Parameter(io.apicurio.datamodels.openapi.v2.models.Oas20Parameter) Oas20ResponseDefinition(io.apicurio.datamodels.openapi.v2.models.Oas20ResponseDefinition)

Example 5 with Oas20Schema

use of io.apicurio.datamodels.openapi.v2.models.Oas20Schema in project syndesis by syndesisio.

the class CyclicValidationCheckTest method shouldFindTwoStepCyclicReferencesInResponses.

@Test
public void shouldFindTwoStepCyclicReferencesInResponses() {
    final Oas20Document openApiDoc = new Oas20Document();
    final Oas20PathItem pathItem = new Oas20PathItem("/api");
    final Oas20Operation operation = new Oas20Operation("post");
    Oas20Response response = new Oas20Response("200");
    Oas20Schema responseSchema = new Oas20Schema();
    responseSchema.$ref = "#/definitions/A";
    response.schema = responseSchema;
    operation.responses = operation.createResponses();
    operation.responses.addResponse("200", response);
    pathItem.post = operation;
    openApiDoc.paths = openApiDoc.createPaths();
    openApiDoc.paths.addPathItem("/api", pathItem);
    Oas20SchemaDefinition schemaDefinitionA = new Oas20SchemaDefinition("A");
    schemaDefinitionA.type = "object";
    Oas20Schema propertySchemaA = new Oas20Schema();
    propertySchemaA.$ref = "#/definitions/B";
    schemaDefinitionA.properties = new HashMap<>();
    schemaDefinitionA.properties.put("b", propertySchemaA);
    openApiDoc.definitions = openApiDoc.createDefinitions();
    openApiDoc.definitions.addDefinition("A", schemaDefinitionA);
    Oas20SchemaDefinition schemaDefinitionB = new Oas20SchemaDefinition("B");
    schemaDefinitionB.type = "object";
    Oas20Schema propertySchemaB = new Oas20Schema();
    propertySchemaB.$ref = "#/definitions/A";
    schemaDefinitionB.properties = new HashMap<>();
    schemaDefinitionB.properties.put("a", propertySchemaB);
    openApiDoc.definitions.addDefinition("B", schemaDefinitionB);
    assertThat(CyclicValidationCheck.hasCyclicReferences(getSchemaDefinitions(openApiDoc))).isTrue();
}
Also used : Oas20Schema(io.apicurio.datamodels.openapi.v2.models.Oas20Schema) Oas20Document(io.apicurio.datamodels.openapi.v2.models.Oas20Document) Oas20PathItem(io.apicurio.datamodels.openapi.v2.models.Oas20PathItem) Oas20Operation(io.apicurio.datamodels.openapi.v2.models.Oas20Operation) Oas20Response(io.apicurio.datamodels.openapi.v2.models.Oas20Response) Oas20SchemaDefinition(io.apicurio.datamodels.openapi.v2.models.Oas20SchemaDefinition) Test(org.junit.Test)

Aggregations

Oas20Schema (io.apicurio.datamodels.openapi.v2.models.Oas20Schema)22 Oas20Document (io.apicurio.datamodels.openapi.v2.models.Oas20Document)15 Oas20Operation (io.apicurio.datamodels.openapi.v2.models.Oas20Operation)12 Oas20PathItem (io.apicurio.datamodels.openapi.v2.models.Oas20PathItem)12 Test (org.junit.Test)12 Oas20Parameter (io.apicurio.datamodels.openapi.v2.models.Oas20Parameter)11 Oas20SchemaDefinition (io.apicurio.datamodels.openapi.v2.models.Oas20SchemaDefinition)10 Oas20Response (io.apicurio.datamodels.openapi.v2.models.Oas20Response)9 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)2 ExtensibleNode (io.apicurio.datamodels.core.models.ExtensibleNode)2 IReferenceNode (io.apicurio.datamodels.core.models.IReferenceNode)2 Node (io.apicurio.datamodels.core.models.Node)2 Oas20ParameterDefinition (io.apicurio.datamodels.openapi.v2.models.Oas20ParameterDefinition)2 Oas30MediaType (io.apicurio.datamodels.openapi.v3.models.Oas30MediaType)2 Oas30Schema (io.apicurio.datamodels.openapi.v3.models.Oas30Schema)2 OpenApiModelInfo (io.syndesis.server.api.generator.openapi.OpenApiModelInfo)2 ArrayList (java.util.ArrayList)2 List (java.util.List)2 JsonNode (com.fasterxml.jackson.databind.JsonNode)1 Library (io.apicurio.datamodels.Library)1