OpenAPITools / OpenAPITools/openapi-diff

Using a reference in items of array results in error

Open
#464 3 comments 0 reactions 0 assignees View on GitHub

@joschi is already working on this.

Since Feb 26, 2023.

  • #470 by @joschi — open
duplicate
Dominant language
Java
Stars
1.1k
Forks
190
PR merge metrics
No merged PRs in 30d

Description

When a reference is used in items: of an array, e.g. :

type: object
description: Model for response from call to GET products requiring an array of products to be returned.
title: GetProductResponse
properties:
  Products:
    type: array
    items:
      $ref: Product.yaml

and error is thrown while resolving the references:

$ java -jar openapi-diff-cli-2.1.0-beta.4-all.jar --error --fail-on-incompatible source/specification/openapi.yaml destination/specification/openapi.yaml
Unexpected exception. Reason: Invalid ref: ./common/models/Product.yaml
java.lang.IllegalArgumentException: Invalid ref: ./common/models/Product.yaml
        at org.openapitools.openapidiff.core.utils.RefPointer.getRefName(RefPointer.java:60)
        at org.openapitools.openapidiff.core.utils.RefPointer.resolveRef(RefPointer.java:16)
        at org.openapitools.openapidiff.core.compare.SchemaDiff.computeDiffForReal(SchemaDiff.java:337)
        at org.openapitools.openapidiff.core.model.deferred.DeferredSchemaCache.processSchemaQueue(DeferredSchemaCache.java:86)
        at org.openapitools.openapidiff.core.model.deferred.DeferredSchemaCache.process(DeferredSchemaCache.java:64)
        at org.openapitools.openapidiff.core.compare.OpenApiDiff.compare(OpenApiDiff.java:100)
        at org.openapitools.openapidiff.core.compare.OpenApiDiff.compare(OpenApiDiff.java:64)
        at org.openapitools.openapidiff.core.OpenApiCompare.fromSpecifications(OpenApiCompare.java:102)
        at org.openapitools.openapidiff.core.OpenApiCompare.fromLocations(OpenApiCompare.java:91)
        at org.openapitools.openapidiff.cli.Main.main(Main.java:175)

Files GetProductResponse.yaml and Product.yaml both reside in the same directory.

Attachment contains the source and destination folders, which contain a copy of the same openapi spec.
example.zip

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the attached example.zip and reproduce the CLI command; then read RefPointer.java, especially getRefName and resolveRef, along with the SchemaDiff and DeferredSchemaCache call path named in the trace. Done means the array item's sibling-file $ref resolves without the Invalid ref exception and the comparison completes.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
api
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.