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);
}
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);
}
}
}
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);
}
}
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;
}
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();
}
Aggregations