Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

[bug] [polymorphism] Changes in child schema are ignored when only parent schema is directly referenced

Offen
#571 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
38/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
java, openapi
Bereich
api

Rechercherichtung

Beginne damit, den gemeldeten Fall mit dem bereitgestellten OpenAPI-Dokument zu reproduzieren, und vergleiche die differ-Ausgabe nach dem Hinzufügen von Ball.material. Verfolge, wie die Referenz GET /pet/findByStatus zu den polymorphen Schemas gelangt, und bestätige, dass Änderungen an indirekt referenzierten untergeordneten Schemas eingeschlossen werden. Als abgeschlossen gilt die Aufgabe, wenn die Ausgabe die Änderung an Ball meldet und ein Regressionstest dieses Szenario abdeckt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

When using AllOf for polymorphism, when a property references a parent schema using ref and a change is done to a child schema which is not referenced directly anywhere in the OAS file, changes done to child schema are ignored in the differ output.

Example schema:

openapi: 3.0.0
servers:
  - url: 'http://petstore.swagger.io/v2'
info:
  description: >-
    This is a sample server Petstore server.  You can find out more about
    Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net,
    #swagger](http://swagger.io/irc/).  For this sample, you can use the api key
    `special-key` to test the authorization filters.
  version: 1.0.0
  title: Swagger Petstore
  termsOfService: 'http://swagger.io/terms/'
  contact:
    email: apiteam@swagger.io
  license:
    name: Apache 2.0
    url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
tags:
  - name: pet
    description: Everything about your Pets
    externalDocs:
      description: Find out more
      url: 'http://swagger.io'
  - name: store
    description: Access to Petstore orders
  - name: user
    description: Operations about user
    externalDocs:
      description: Find out more about our store
      url: 'http://swagger.io'
paths:
  /pet/findByStatus:
    get:
      tags:
        - pet
      summary: Finds Pets by status
      description: Multiple status values can be provided with comma separated strings
      operationId: findPetsByStatus
      parameters:
        - name: status
          in: query
          description: Status values that need to be considered for filter
          required: true
          explode: true
          schema:
            type: array
            items:
              type: string
              enum:
                - available
                - pending
                - sold
              default: available
      responses:
        '200':
          description: successful operation
          content:
            application/json:
              schema:
                type: object
                properties:
                  pets:
                    type: array
                    items:
                      $ref: '#/components/schemas/Pet'
        '400':
          description: Invalid status value
      security:
        - petstore_auth:
            - 'write:pets'
            - 'read:pets'
externalDocs:
  description: Find out more about Swagger
  url: 'http://swagger.io'
components:
  requestBodies:
    Pet:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Pet'
      description: Pet object that needs to be added to the store
      required: true
  securitySchemes:
    petstore_auth:
      type: oauth2
      flows:
        implicit:
          authorizationUrl: 'http://petstore.swagger.io/oauth/dialog'
          scopes:
            'write:pets': modify pets in your account
            'read:pets': read your pets
    api_key:
      type: apiKey
      name: api_key
      in: header
  schemas:
    BasePet:
      type: object
      properties:
        pet_color:
          type: string
    Pet:
      allOf:
      - $ref: '#/components/schemas/BasePet'
      type: object
      discriminator:
        propertyName: pet_type
        mapping:
          dog: '#/components/schemas/Dog'
          cat: '#/components/schemas/Cat'
      required:
      - pet_type
      properties:
        pet_type:
          nullable: false
          allOf:
          - type: string
    Cat:
      description: Cat class
      allOf:
      - $ref: '#/components/schemas/Pet'
      type: object
      discriminator:
        propertyName: pet_type
        mapping:
          dog: '#/components/schemas/Cat'
      properties:
        name:
          type: string
        toy:
          $ref: '#/components/schemas/Toy'
    Dog:
      description: Dog class
      allOf:
      - $ref: '#/components/schemas/Pet'
      type: object
      discriminator:
        propertyName: pet_type
        mapping:
          dog: '#/components/schemas/Cat'
      properties:
        bark:
          type: string
    Toy:
      description: Toy class
      type: object
      discriminator:
        propertyName: toy_type
        mapping:
          ball: '#/components/schemas/Ball'
      properties:
        toy_type:
          type: string
        price:
          type: number
    Ball:
      description: Ball class
      allOf:
        - $ref: '#/components/schemas/Toy'
        - type: object
          properties:
            size:
              type: string
      discriminator:
        propertyName: toy_type
        mapping:
          ball: '#/components/schemas/Ball'

If I add new property material to Ball, I would expect to see changes in GET /pet/findByStatus operation, while the actual situation is, that the changes are ignored.

Tested with 2.1.0-SNAPSHOT.

Vorherrschende Sprache
Java
Sterne
1.1k
Forks
190
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus OpenAPITools/openapi-diff

Alle Issues in OpenAPITools/openapi-diff

Ähnliche Issues

Weitere Issues zu Java

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.