DEV Community

Eduardo Issao Ito
Eduardo Issao Ito

Posted on

Json validation with OpenAPI Schema

How to validate a json file against a Schema that is defined in an OpenAPI definition?

Using the open source library openapi4j!

Add the dependencies in your pom.xml file:

        <dependency>
            <groupId>org.openapi4j</groupId>
            <artifactId>openapi-parser</artifactId>
            <version>1.0.5</version>
        </dependency>

        <dependency>
            <groupId>org.openapi4j</groupId>
            <artifactId>openapi-schema-validator</artifactId>
            <version>1.0.5</version>
        </dependency>
Enter fullscreen mode Exit fullscreen mode

Load the OpenAPI definition (petstore.yaml) and the json file (pets.json) to validate against the Pets schema:

        URL specURL = new URL("file:src/main/resources/petstore.yaml");
        URL contentURL = new URL("file:src/main/resources/pets.json");
        String schemaName = "Pets";

        OpenApi3 api = new OpenApi3Parser().parse(specURL, true);
        JsonNode contentNode = TreeUtil.load(contentURL);
        Schema schema = api.getComponents().getSchema(schemaName);
        JsonNode schemaNode = schema.toNode();

        SchemaValidator schemaValidator = new SchemaValidator(new ValidationContext<>(api.getContext()), null, schemaNode);

        ValidationData<Void> validation = new ValidationData<>();
        schemaValidator.validate(contentNode, validation);
        if (validation.isValid()) {
            System.out.println("ok");
        } else {
            System.out.println(validation.results());
        }
Enter fullscreen mode Exit fullscreen mode

If there is any inconsistency, the ValidationData object will have a list of all errors found.

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (3)

Collapse
 
gauamg profile image
gauamg •

Thank you for this post - this is helpful. I am attempting something slightly different - I want to be able to validate my YAML specs against the OAS3.0 Spec file. (I am aware there are various tools but I am noticing inconsistencies and would like to be able to figure it out myself). However, if the URL is pointing to the OAS3 spec file, the OpenApi3Parser().parse() call is giving me this exception:
Exception in thread "main" org.openapi4j.core.exception.ResolutionException: Failed to load document from 'file:src/main/resources/object'

Do you know if what I am attempting is possible with openapi4j ?

Regards

Collapse
 
adzubla profile image
Eduardo Issao Ito • • Edited

In my example, the json and yaml file are in standard Maven folders.

Try to use use the full path:
"file://c:/Users/MyUser/path_to_files/pets.yaml"

Collapse
 
adzubla profile image
Eduardo Issao Ito •

The same program can parse both json and yaml files.

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs