Closed
Description
Hi, it seems that AllOf references are not being resolved, it seems to work for AnyOf and OneOf but not AllOf unless I'm not understanding it correctly, test case:
package com.workday.maya.swagger.generator
import com.workday.maya.logging.Slogger
import com.workday.maya.model.{Expression, ExpressionsMappingSource, Mapping, Path}
import com.workday.maya.test.UnitSpec
import io.swagger.v3.parser.OpenAPIV3Parser
import io.swagger.v3.parser.core.models.ParseOptions
import play.api.libs.json.Json
class AllOfTest extends UnitSpec with Slogger {
val swaggerJsonGenerator = new SwaggerJsonGenerator
behavior of "AllOf"
val anyOfSchema = """openapi: 3.0.0
|paths:
| /pets:
| get:
| description: "Test"
| responses:
| 200:
| description: Parameters missing or invalid
| content:
| application/json:
| schema:
| $ref: '#/components/schemas/Pet'
|components:
| schemas:
| Dog:
| type: object
| properties:
| bark:
| type: boolean
| breed:
| type: string
| Cat:
| type: object
| properties:
| hunts:
| type: boolean
| age:
| type: integer
| Pet:
| anyOf:
| - $ref: '#/components/schemas/Cat'
| - $ref: '#/components/schemas/Dog'
|""".stripMargin
val oneOfSchema = """openapi: 3.0.0
|paths:
| /pets:
| get:
| description: "Test"
| responses:
| 200:
| description: Parameters missing or invalid
| content:
| application/json:
| schema:
| $ref: '#/components/schemas/Pet'
|components:
| schemas:
| Dog:
| type: object
| properties:
| bark:
| type: boolean
| breed:
| type: string
| Cat:
| type: object
| properties:
| hunts:
| type: boolean
| age:
| type: integer
| Pet:
| oneOf:
| - $ref: '#/components/schemas/Cat'
| - $ref: '#/components/schemas/Dog'""".stripMargin
val allOfSchema = """openapi: 3.0.0
|paths:
| /pets:
| get:
| description: "Test"
| responses:
| 200:
| description: Parameters missing or invalid
| content:
| application/json:
| schema:
| $ref: '#/components/schemas/Pet'
|components:
| schemas:
| Dog:
| type: object
| properties:
| bark:
| type: boolean
| breed:
| type: string
| Cat:
| type: object
| properties:
| hunts:
| type: boolean
| age:
| type: integer
| Pet:
| allOf:
| - $ref: '#/components/schemas/Cat'
| - $ref: '#/components/schemas/Dog'""".stripMargin
private val swaggerParserOptions = new ParseOptions
swaggerParserOptions.setResolve(true)
swaggerParserOptions.setResolveFully(true)
it should "resolve references for allOf" in {
val openApiAllOf = new OpenAPIV3Parser().readContents(allOfSchema, null, swaggerParserOptions)
println("All of schema is" + openApiAllOf.getOpenAPI.getComponents.getSchemas.get("Pet"))
}
it should "resolve references for anyOf" in {
val openApiAllOf = new OpenAPIV3Parser().readContents(anyOfSchema, null, swaggerParserOptions)
println("Any of schema is" + openApiAllOf.getOpenAPI.getComponents.getSchemas.get("Pet"))
}
it should "resolve references for oneOf" in {
val openApiAllOf = new OpenAPIV3Parser().readContents(oneOfSchema, null, swaggerParserOptions)
println("One of schema is" + openApiAllOf.getOpenAPI.getComponents.getSchemas.get("Pet"))
}
}
Output:
Activating test InMemoryLog4jAppender
All of schema isclass ComposedSchema {
class Schema {
type: null
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: null
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
allOf: [class Schema {
type: null
format: null
$ref: #/components/schemas/Cat
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: null
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}, class Schema {
type: null
format: null
$ref: #/components/schemas/Dog
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: null
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}]
anyOf: null
oneOf: null
}
Any of schema isclass ComposedSchema {
class Schema {
type: null
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: null
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
allOf: null
anyOf: [class ObjectSchema {
class Schema {
type: object
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: {hunts=class BooleanSchema {
class Schema {
type: boolean
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: null
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
}, age=class IntegerSchema {
class Schema {
type: integer
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: null
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
}}
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
}, class ObjectSchema {
class Schema {
type: object
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: {bark=class BooleanSchema {
class Schema {
type: boolean
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: null
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
}, breed=class StringSchema {
class Schema {
type: string
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: null
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
}}
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
}]
oneOf: null
}
One of schema isclass ComposedSchema {
class Schema {
type: null
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: null
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
allOf: null
anyOf: null
oneOf: [class ObjectSchema {
class Schema {
type: object
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: {hunts=class BooleanSchema {
class Schema {
type: boolean
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: null
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
}, age=class IntegerSchema {
class Schema {
type: integer
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: null
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
}}
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
}, class ObjectSchema {
class Schema {
type: object
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: {bark=class BooleanSchema {
class Schema {
type: boolean
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: null
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
}, breed=class StringSchema {
class Schema {
type: string
format: null
$ref: null
description: null
title: null
multipleOf: null
maximum: null
exclusiveMaximum: null
minimum: null
exclusiveMinimum: null
maxLength: null
minLength: null
pattern: null
maxItems: null
minItems: null
uniqueItems: null
maxProperties: null
minProperties: null
required: null
not: null
properties: null
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
}}
additionalProperties: null
nullable: null
readOnly: null
writeOnly: null
example: null
externalDocs: null
deprecated: null
discriminator: null
xml: null
}
}]
}
Process finished with exit code 0
Metadata
Metadata
Assignees
Labels
No labels