ÅLearneŘ
ÅLearneŘ

Reputation: 103

Data does not match any schemas from 'oneOf' - Error

Am hitting the following error with swagger online editor Data does not match any schemas from 'oneOf'

'/tenants/tenant_id/groups/group_id':
get:
  description: 'Returns the group with specific id ( id, name, description, tenant_id... ) along with end point pools ( id, name, description, source, tenant_id... ) associated with this particular groups'
  operationId: getGroupWithKey
  consumes:
    - application/json
    - text/plain, */*
  produces:
    - text/xml
  parameters:
    - in: header
      name: 'X-AuthToken'
      description: authentication token obtained during login
      required: true
      schema:
        $ref: '#/definitions/token_string'
  responses:
    '200':
      description: OK (group with provided id received)
      schema:
        $ref: '#/definitions/getGroupWithKey'
    default:
      description: error
      schema:
        $ref: '#/definitions/errorModel'

definitions:
### Login Definitions ###      
  token_string:
    type: object
    required:
      - 'X-AuthToken'
    properties:
      X-AuthToken: 
        type: string

Error is as bellow points to line 206 which is line starting with "parameters"

✖ Swagger Error

Data does not match any schemas from 'oneOf'   
Jump to line 206
Details
Object
code: "ONE_OF_MISSING"   
message: "Data does not match any schemas from 'oneOf'"
path: Array [5] 
0: "paths"
1: "/tenants/tenant_id/groups/group_id"
2: "get"
3: "parameters"
4: "0"
inner: Array [2]
0: Object
code: "ONE_OF_MISSING"
message: "Data does not match any schemas from 'oneOf'"
path: Array [5]
inner: Array [2]
1: Object
code: "OBJECT_MISSING_REQUIRED_PROPERTY"
message: "Missing required property: $ref"
path: Array [5]
level: 900
type: "Swagger Error"
description: "Data does not match any schemas from 'oneOf'"
lineNumber: 206

I tried changing the type: string under definition, still no luck. Am pretty sure I am missing proper type value here, appreciate any help

Thanks you

Upvotes: 4

Views: 4646

Answers (1)

Arnaud Lauret
Arnaud Lauret

Reputation: 5281

When defining a header parameter you cannot use schema, it's allowed only when in: bodyis used. Therefore a header parameter can only be an atomic property (string, number, ...).

It seems that you want to define a reusable header parameter, you do that this way:

  • Define token_string in parameters section
  • Then use it with a $refin operation's parameters

(I also add dummy getGroupWithKey and errorModel to make the definition valid):

swagger: '2.0'
info:
  version: 1.0.0
  title: Header API
  description: A simple API to learn how you can define headers

paths:
  '/tenants/tenant_id/groups/group_id':
    get:
      description: 'Returns the group with specific id ( id, name, description, tenant_id... ) along with end point pools ( id, name, description, source, tenant_id... ) associated with this particular groups'
      operationId: getGroupWithKey
      consumes:
        - application/json
        - text/plain, */*
      produces:
        - text/xml
      parameters:
        - $ref: '#/parameters/token_string'
      responses:
        '200':
          description: OK (group with provided id received)
          schema:
            $ref: '#/definitions/getGroupWithKey'
        default:
          description: error
          schema:
            $ref: '#/definitions/errorModel'

parameters:
  token_string:
    in: header
    name: X-AuthToken
    type: string
    description: authentication token obtained during login
    required: true

definitions:
### Login Definitions ###      
  errorModel:
    type: string
  getGroupWithKey:
    type: string

You can of course define you parameter inline if you want. I suggest you to take a look at another question on the same topic Define global parameters

Upvotes: 2

Related Questions