From 3af9cb8f8f8671c4ef46a701f9666cddf4709c9b Mon Sep 17 00:00:00 2001 From: arielmirra Date: Wed, 17 Apr 2024 10:10:01 -0300 Subject: [PATCH 1/5] W-15425021: add amqp binding versions 010 and 020 --- .../bindings/amqp/Amqp091ChannelBinding.scala | 129 ++++- .../bindings/amqp/Amqp091ChannelBinding.scala | 202 +++++-- .../internal/convert/ApiBaseConverter.scala | 63 ++- .../internal/convert/ApiRegister.scala | 26 +- .../internal/entities/APIEntities.scala | 12 +- .../domain/bindings/Amqp091BindingModel.scala | 141 +++-- .../AsyncApiChannelBindingsEmitter.scala | 26 +- .../bindings/AsyncChannelBindingsParser.scala | 21 +- .../async/parser/bindings/BindingParser.scala | 35 +- .../channel/AmqpChannelBindingParser.scala | 96 ++-- .../parser/context/syntax/Async20Syntax.scala | 16 +- .../validation/model/APIRawValidations.scala | 27 +- .../client/model/domain/BindingsTest.scala | 52 +- .../bindings/amqp-channel-binding-010.yaml | 20 + ...ing.yaml => amqp-channel-binding-020.yaml} | 2 +- .../amqp-channel-binding-010.expanded.jsonld | 535 ++++++++++++++++++ .../amqp-channel-binding-010.flattened.jsonld | 378 +++++++++++++ .../async20/amqp-channel-binding-010.yaml | 20 + ... amqp-channel-binding-020.expanded.jsonld} | 120 ++-- ...amqp-channel-binding-020.flattened.jsonld} | 198 +++---- ...ing.yaml => amqp-channel-binding-020.yaml} | 4 +- .../async20/rpc-server.expanded.jsonld | 100 +--- .../async20/rpc-server.flattened.jsonld | 126 ++--- .../async20/validations/amqp-binding-010.yaml | 22 + .../async20/validations/amqp-binding-020.yaml | 24 + .../amqp-channel-binding-020-invalid.yaml | 24 + .../reports/async20/amqp-binding-010.report | 22 + .../async20/amqp-binding-020-invalid.report | 22 + .../amqp-channel-binding-is-value.report | 4 +- ...mqp-channel-binding-name-max-length.report | 8 +- .../scala/amf/emit/Async20CycleTest.scala | 22 +- ...c20UniquePlatformUnitValidationsTest.scala | 8 + .../ValidAsyncModelParserTest.scala | 10 +- documentation/model.md | 94 +++ 34 files changed, 2100 insertions(+), 509 deletions(-) create mode 100644 amf-cli/shared/src/test/resources/upanddown/cycle/async20/bindings/amqp-channel-binding-010.yaml rename amf-cli/shared/src/test/resources/upanddown/cycle/async20/bindings/{amqp-channel-binding.yaml => amqp-channel-binding-020.yaml} (92%) create mode 100644 amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.expanded.jsonld create mode 100644 amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.flattened.jsonld create mode 100644 amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml rename amf-cli/shared/src/test/resources/validations/async20/{amqp-channel-binding.expanded.jsonld => amqp-channel-binding-020.expanded.jsonld} (79%) rename amf-cli/shared/src/test/resources/validations/async20/{amqp-channel-binding.flattened.jsonld => amqp-channel-binding-020.flattened.jsonld} (58%) rename amf-cli/shared/src/test/resources/validations/async20/{amqp-channel-binding.yaml => amqp-channel-binding-020.yaml} (86%) create mode 100644 amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-010.yaml create mode 100644 amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-020.yaml create mode 100644 amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-020-invalid.yaml create mode 100644 amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-010.report create mode 100644 amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-020-invalid.report diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/model/domain/bindings/amqp/Amqp091ChannelBinding.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/model/domain/bindings/amqp/Amqp091ChannelBinding.scala index 64abb098fb..c650d45715 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/model/domain/bindings/amqp/Amqp091ChannelBinding.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/model/domain/bindings/amqp/Amqp091ChannelBinding.scala @@ -4,7 +4,13 @@ import amf.apicontract.client.platform.model.domain.bindings.{BindingVersion, Ch import amf.apicontract.client.scala.model.domain.bindings.amqp.{ Amqp091ChannelBinding => InternalAmqp091ChannelBinding, Amqp091ChannelExchange => InternalAmqp091ChannelExchange, - Amqp091Queue => InternalAmqp091Queue + Amqp091Queue => InternalAmqp091Queue, + Amqp091ChannelBinding010 => InternalAmqp091ChannelBinding010, + Amqp091ChannelExchange010 => InternalAmqp091ChannelExchange010, + Amqp091Queue010 => InternalAmqp091Queue010, + Amqp091ChannelBinding020 => InternalAmqp091ChannelBinding020, + Amqp091ChannelExchange020 => InternalAmqp091ChannelExchange020, + Amqp091Queue020 => InternalAmqp091Queue020 } import amf.apicontract.internal.convert.ApiClientConverters._ import amf.core.client.platform.model.domain.{DomainElement, NamedDomainElement} @@ -13,13 +19,10 @@ import amf.core.client.platform.model.{BoolField, StrField} import scala.scalajs.js.annotation.{JSExportAll, JSExportTopLevel} @JSExportAll -case class Amqp091ChannelBinding(override private[amf] val _internal: InternalAmqp091ChannelBinding) +abstract class Amqp091ChannelBinding(override private[amf] val _internal: InternalAmqp091ChannelBinding) extends ChannelBinding with BindingVersion { - @JSExportTopLevel("Amqp091ChannelBinding") - def this() = this(InternalAmqp091ChannelBinding()) - override protected def bindingVersion: StrField = _internal.bindingVersion override def withBindingVersion(bindingVersion: String): this.type = { _internal.withBindingVersion(bindingVersion) @@ -41,22 +44,16 @@ case class Amqp091ChannelBinding(override private[amf] val _internal: InternalAm _internal.withQueue(queue) this } - - override def linkCopy(): Amqp091ChannelBinding = _internal.linkCopy() } @JSExportAll -case class Amqp091ChannelExchange(override private[amf] val _internal: InternalAmqp091ChannelExchange) +abstract class Amqp091ChannelExchange(override private[amf] val _internal: InternalAmqp091ChannelExchange) extends DomainElement with NamedDomainElement { - @JSExportTopLevel("Amqp091ChannelExchange") - def this() = this(InternalAmqp091ChannelExchange()) - def `type`: StrField = _internal.`type` def durable: BoolField = _internal.durable def autoDelete: BoolField = _internal.autoDelete - def vHost: StrField = _internal.vHost def withType(`type`: String): this.type = { _internal.withType(`type`) @@ -70,10 +67,6 @@ case class Amqp091ChannelExchange(override private[amf] val _internal: InternalA _internal.withAutoDelete(autoDelete) this } - def withVHost(vHost: String): this.type = { - _internal.withVHost(vHost) - this - } /** Return DomainElement name. */ override def name: StrField = _internal.name @@ -86,17 +79,13 @@ case class Amqp091ChannelExchange(override private[amf] val _internal: InternalA } @JSExportAll -case class Amqp091Queue(override private[amf] val _internal: InternalAmqp091Queue) +abstract class Amqp091Queue(override private[amf] val _internal: InternalAmqp091Queue) extends DomainElement with NamedDomainElement { - @JSExportTopLevel("Amqp091Queue") - def this() = this(InternalAmqp091Queue()) - def durable: BoolField = _internal.durable def exclusive: BoolField = _internal.exclusive def autoDelete: BoolField = _internal.autoDelete - def vHost: StrField = _internal.vHost def withDurable(durable: Boolean): this.type = { _internal.withDurable(durable) @@ -110,15 +99,107 @@ case class Amqp091Queue(override private[amf] val _internal: InternalAmqp091Queu _internal.withAutoDelete(autoDelete) this } + + override def name: StrField = _internal.name + + override def withName(name: String): this.type = { + _internal.withName(name) + this + } +} + +@JSExportAll +case class Amqp091ChannelBinding010(override private[amf] val _internal: InternalAmqp091ChannelBinding010) + extends Amqp091ChannelBinding(_internal) { + + @JSExportTopLevel("Amqp091ChannelBinding010") + def this() = this(InternalAmqp091ChannelBinding010()) + + override protected def bindingVersion: StrField = _internal.bindingVersion + override def withBindingVersion(bindingVersion: String): this.type = { + _internal.withBindingVersion(bindingVersion) + this + } + + override def exchange: Amqp091ChannelExchange010 = _internal.exchange + override def queue: Amqp091Queue010 = _internal.queue + + def withExchange(exchange: Amqp091ChannelExchange010): this.type = { + _internal.withExchange(exchange) + this + } + def withQueue(queue: Amqp091Queue010): this.type = { + _internal.withQueue(queue) + this + } + + override def linkCopy(): Amqp091ChannelBinding010 = _internal.linkCopy() +} + +@JSExportAll +case class Amqp091ChannelExchange010(override private[amf] val _internal: InternalAmqp091ChannelExchange010) + extends Amqp091ChannelExchange(_internal) { + + @JSExportTopLevel("Amqp091ChannelExchange010") + def this() = this(InternalAmqp091ChannelExchange010()) +} + +@JSExportAll +case class Amqp091Queue010(override private[amf] val _internal: InternalAmqp091Queue010) + extends Amqp091Queue(_internal) { + + @JSExportTopLevel("Amqp091Queue010") + def this() = this(InternalAmqp091Queue010()) +} + +@JSExportAll +case class Amqp091ChannelBinding020(override private[amf] val _internal: InternalAmqp091ChannelBinding020) + extends Amqp091ChannelBinding(_internal) { + + @JSExportTopLevel("Amqp091ChannelBinding020") + def this() = this(InternalAmqp091ChannelBinding020()) + + override def exchange: Amqp091ChannelExchange020 = _internal.exchange + override def queue: Amqp091Queue020 = _internal.queue + + def withExchange(exchange: Amqp091ChannelExchange020): this.type = { + _internal.withExchange(exchange) + this + } + def withQueue(queue: Amqp091Queue020): this.type = { + _internal.withQueue(queue) + this + } + + override def linkCopy(): Amqp091ChannelBinding020 = _internal.linkCopy() +} + +@JSExportAll +case class Amqp091ChannelExchange020(override private[amf] val _internal: InternalAmqp091ChannelExchange020) + extends Amqp091ChannelExchange(_internal) { + + @JSExportTopLevel("Amqp091ChannelExchange020") + def this() = this(InternalAmqp091ChannelExchange020()) + + def vHost: StrField = _internal.vHost + def withVHost(vHost: String): this.type = { _internal.withVHost(vHost) this } +} - override def name: StrField = _internal.name +@JSExportAll +case class Amqp091Queue020(override private[amf] val _internal: InternalAmqp091Queue020) + extends Amqp091Queue(_internal) { - override def withName(name: String): this.type = { - _internal.withName(name) + @JSExportTopLevel("Amqp091Queue020") + def this() = this(InternalAmqp091Queue020()) + + def vHost: StrField = _internal.vHost + + def withVHost(vHost: String): this.type = { + _internal.withVHost(vHost) this } } diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/model/domain/bindings/amqp/Amqp091ChannelBinding.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/model/domain/bindings/amqp/Amqp091ChannelBinding.scala index e457d7ee62..31f6ab2807 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/model/domain/bindings/amqp/Amqp091ChannelBinding.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/model/domain/bindings/amqp/Amqp091ChannelBinding.scala @@ -4,105 +4,191 @@ import amf.core.client.scala.model.domain.{DomainElement, Linkable, NamedDomainE import amf.core.client.scala.model.{BoolField, StrField} import amf.core.internal.metamodel.Field import amf.core.internal.parser.domain.{Annotations, Fields} -import amf.apicontract.internal.metamodel.domain.bindings.Amqp091ChannelBindingModel._ +import amf.apicontract.internal.metamodel.domain.bindings.Amqp091ChannelBinding020Model._ import amf.apicontract.internal.metamodel.domain.bindings.{ - Amqp091ChannelBindingModel, - Amqp091ChannelExchangeModel => ChannelExchange, - Amqp091QueueModel => QueueModel + Amqp091ChannelBindingModel => BaseModel, + Amqp091ChannelBinding010Model => Amqp010Model, + Amqp091ChannelBinding020Model => Amqp020Model, + Amqp091ChannelExchangeModel => BaseExchangeModel, + Amqp091ChannelExchange010Model => Exchange010Model, + Amqp091ChannelExchange020Model => Exchange020Model, + Amqp091QueueModel => BaseQueueModel, + Amqp091Queue010Model => Queue010Model, + Amqp091Queue020Model => Queue020Model } import amf.apicontract.client.scala.model.domain.bindings.{BindingVersion, ChannelBinding} import amf.shapes.client.scala.model.domain.Key -class Amqp091ChannelBinding(override val fields: Fields, override val annotations: Annotations) +abstract class Amqp091ChannelBinding(override val fields: Fields, override val annotations: Annotations) extends ChannelBinding with BindingVersion with Key { + override def key: StrField = fields.field(BaseModel.key) + override protected def bindingVersionField: Field = BindingVersion + + def is: StrField = fields.field(BaseModel.Is) + def exchange: Amqp091ChannelExchange = fields.field(BaseModel.Exchange) + def queue: Amqp091Queue = fields.field(BaseModel.Queue) + + def withIs(is: String): this.type = set(BaseModel.Is, is) + def withExchange(exchange: Amqp091ChannelExchange): this.type = set(BaseModel.Exchange, exchange) + def withQueue(queue: Amqp091Queue): this.type = set(BaseModel.Queue, queue) +} + +abstract class Amqp091ChannelExchange(override val fields: Fields, override val annotations: Annotations) + extends DomainElement + with NamedDomainElement { + override def nameField: Field = BaseExchangeModel.Name + + def `type`: StrField = fields.field(BaseExchangeModel.Type) + def durable: BoolField = fields.field(BaseExchangeModel.Durable) + def autoDelete: BoolField = fields.field(BaseExchangeModel.AutoDelete) + + def withType(`type`: String): this.type = set(BaseExchangeModel.Type, `type`) + def withDurable(durable: Boolean): this.type = set(BaseExchangeModel.Durable, durable) + def withAutoDelete(autoDelete: Boolean): this.type = set(BaseExchangeModel.AutoDelete, autoDelete) +} + +abstract class Amqp091Queue(override val fields: Fields, override val annotations: Annotations) + extends DomainElement + with NamedDomainElement { + override def nameField: Field = BaseQueueModel.Name + + def durable: BoolField = fields.field(BaseQueueModel.Durable) + def exclusive: BoolField = fields.field(BaseQueueModel.Exclusive) + def autoDelete: BoolField = fields.field(BaseQueueModel.AutoDelete) + + def withDurable(durable: Boolean): this.type = set(BaseQueueModel.Durable, durable) + def withExclusive(exclusive: Boolean): this.type = set(BaseQueueModel.Exclusive, exclusive) + def withAutoDelete(autoDelete: Boolean): this.type = set(BaseQueueModel.AutoDelete, autoDelete) +} + +class Amqp091ChannelBinding010(override val fields: Fields, override val annotations: Annotations) + extends Amqp091ChannelBinding(fields, annotations) { - override def meta: Amqp091ChannelBindingModel.type = Amqp091ChannelBindingModel + override def meta: Amqp010Model.type = Amqp010Model - override def componentId: String = "/amqp091-channel" + override def componentId: String = "/amqp091-channel-010" - override def key: StrField = fields.field(Amqp091ChannelBindingModel.key) + override def key: StrField = fields.field(Amqp010Model.key) override protected def bindingVersionField: Field = BindingVersion - def is: StrField = fields.field(Is) - def exchange: Amqp091ChannelExchange = fields.field(Exchange) - def queue: Amqp091Queue = fields.field(Queue) - def withIs(is: String): this.type = set(Is, is) - def withExchange(exchange: Amqp091ChannelExchange): this.type = set(Exchange, exchange) - def withQueue(queue: Amqp091Queue): this.type = set(Queue, queue) + override def exchange: Amqp091ChannelExchange010 = fields.field(Amqp010Model.Exchange) + override def queue: Amqp091Queue010 = fields.field(Amqp010Model.Queue) + def withExchange(exchange: Amqp091ChannelExchange010): this.type = set(Amqp010Model.Exchange, exchange) + def withQueue(queue: Amqp091Queue010): this.type = set(Amqp010Model.Queue, queue) - override def linkCopy(): Amqp091ChannelBinding = Amqp091ChannelBinding().withId(id) + override def linkCopy(): Amqp091ChannelBinding010 = Amqp091ChannelBinding010().withId(id) override protected def classConstructor: (Fields, Annotations) => Linkable with DomainElement = - Amqp091ChannelBinding.apply + Amqp091ChannelBinding010.apply } -object Amqp091ChannelBinding { +object Amqp091ChannelBinding010 { + def apply(): Amqp091ChannelBinding010 = apply(Annotations()) - def apply(): Amqp091ChannelBinding = apply(Annotations()) + def apply(annotations: Annotations): Amqp091ChannelBinding010 = apply(Fields(), annotations) - def apply(annotations: Annotations): Amqp091ChannelBinding = apply(Fields(), annotations) + def apply(fields: Fields, annotations: Annotations): Amqp091ChannelBinding010 = + new Amqp091ChannelBinding010(fields, annotations) +} + +class Amqp091ChannelExchange010(override val fields: Fields, override val annotations: Annotations) + extends Amqp091ChannelExchange(fields, annotations) { + override def meta: Exchange010Model.type = Exchange010Model - def apply(fields: Fields, annotations: Annotations): Amqp091ChannelBinding = - new Amqp091ChannelBinding(fields, annotations) + override def componentId: String = "/amqp091-exchange-010" } -class Amqp091ChannelExchange(override val fields: Fields, override val annotations: Annotations) - extends DomainElement - with NamedDomainElement { - override def meta: ChannelExchange.type = ChannelExchange +object Amqp091ChannelExchange010 { + def apply(): Amqp091ChannelExchange010 = apply(Annotations()) + + def apply(annotations: Annotations): Amqp091ChannelExchange010 = apply(Fields(), annotations) - override def nameField: Field = ChannelExchange.Name - def `type`: StrField = fields.field(ChannelExchange.Type) - def durable: BoolField = fields.field(ChannelExchange.Durable) - def autoDelete: BoolField = fields.field(ChannelExchange.AutoDelete) - def vHost: StrField = fields.field(ChannelExchange.VHost) + def apply(fields: Fields, annotations: Annotations): Amqp091ChannelExchange010 = + new Amqp091ChannelExchange010(fields, annotations) +} + +class Amqp091Queue010(override val fields: Fields, override val annotations: Annotations) + extends Amqp091Queue(fields, annotations) { + override def meta: Queue010Model.type = Queue010Model + + override def componentId: String = "/amqp091-queue-010" +} + +object Amqp091Queue010 { + def apply(): Amqp091Queue010 = apply(Annotations()) - def withType(`type`: String): this.type = set(ChannelExchange.Type, `type`) - def withDurable(durable: Boolean): this.type = set(ChannelExchange.Durable, durable) - def withAutoDelete(autoDelete: Boolean): this.type = set(ChannelExchange.AutoDelete, autoDelete) - def withVHost(vHost: String): this.type = set(ChannelExchange.VHost, vHost) + def apply(annotations: Annotations): Amqp091Queue010 = apply(Fields(), annotations) - override def componentId: String = "/amqp091-exchange" + def apply(fields: Fields, annotations: Annotations): Amqp091Queue010 = new Amqp091Queue010(fields, annotations) } -object Amqp091ChannelExchange { +class Amqp091ChannelBinding020(override val fields: Fields, override val annotations: Annotations) + extends Amqp091ChannelBinding(fields, annotations) { + + override def meta: Amqp020Model.type = Amqp020Model + + override def componentId: String = "/amqp091-channel-020" + + override def key: StrField = fields.field(Amqp020Model.key) + + override protected def bindingVersionField: Field = BindingVersion + + override def exchange: Amqp091ChannelExchange020 = fields.field(Amqp020Model.Exchange) + override def queue: Amqp091Queue020 = fields.field(Amqp020Model.Queue) + def withExchange(exchange: Amqp091ChannelExchange020): this.type = set(Amqp020Model.Exchange, exchange) + def withQueue(queue: Amqp091Queue020): this.type = set(Amqp020Model.Queue, queue) - def apply(): Amqp091ChannelExchange = apply(Annotations()) + override def linkCopy(): Amqp091ChannelBinding020 = Amqp091ChannelBinding020().withId(id) - def apply(annotations: Annotations): Amqp091ChannelExchange = apply(Fields(), annotations) + override protected def classConstructor: (Fields, Annotations) => Linkable with DomainElement = + Amqp091ChannelBinding020.apply +} + +object Amqp091ChannelBinding020 { + def apply(): Amqp091ChannelBinding020 = apply(Annotations()) - def apply(fields: Fields, annotations: Annotations): Amqp091ChannelExchange = - new Amqp091ChannelExchange(fields, annotations) + def apply(annotations: Annotations): Amqp091ChannelBinding020 = apply(Fields(), annotations) + + def apply(fields: Fields, annotations: Annotations): Amqp091ChannelBinding020 = + new Amqp091ChannelBinding020(fields, annotations) } -class Amqp091Queue(override val fields: Fields, override val annotations: Annotations) - extends DomainElement - with NamedDomainElement { - override def meta: QueueModel.type = QueueModel +class Amqp091Queue020(override val fields: Fields, override val annotations: Annotations) + extends Amqp091Queue(fields, annotations) { + override def meta: Queue020Model.type = Queue020Model - override def nameField: Field = QueueModel.Name + def vHost: StrField = fields.field(Queue020Model.VHost) + def withVHost(vHost: String): this.type = set(Queue020Model.VHost, vHost) - def durable: BoolField = fields.field(QueueModel.Durable) - def exclusive: BoolField = fields.field(QueueModel.Exclusive) - def autoDelete: BoolField = fields.field(QueueModel.AutoDelete) - def vHost: StrField = fields.field(QueueModel.VHost) + override def componentId: String = "/amqp091-queue-020" +} + +object Amqp091Queue020 { + def apply(): Amqp091Queue020 = apply(Annotations()) - def withDurable(durable: Boolean): this.type = set(QueueModel.Durable, durable) - def withExclusive(exclusive: Boolean): this.type = set(QueueModel.Exclusive, exclusive) - def withAutoDelete(autoDelete: Boolean): this.type = set(QueueModel.AutoDelete, autoDelete) - def withVHost(vHost: String): this.type = set(QueueModel.VHost, vHost) + def apply(annotations: Annotations): Amqp091Queue020 = apply(Fields(), annotations) - override def componentId: String = "/amqp091-queue" + def apply(fields: Fields, annotations: Annotations): Amqp091Queue020 = new Amqp091Queue020(fields, annotations) } -object Amqp091Queue { +class Amqp091ChannelExchange020(override val fields: Fields, override val annotations: Annotations) + extends Amqp091ChannelExchange(fields, annotations) { + override def meta: Exchange020Model.type = Exchange020Model + + def vHost: StrField = fields.field(Exchange020Model.VHost) + def withVHost(vHost: String): this.type = set(Exchange020Model.VHost, vHost) + + override def componentId: String = "/amqp091-exchange-020" +} - def apply(): Amqp091Queue = apply(Annotations()) +object Amqp091ChannelExchange020 { + def apply(): Amqp091ChannelExchange020 = apply(Annotations()) - def apply(annotations: Annotations): Amqp091Queue = apply(Fields(), annotations) + def apply(annotations: Annotations): Amqp091ChannelExchange020 = apply(Fields(), annotations) - def apply(fields: Fields, annotations: Annotations): Amqp091Queue = new Amqp091Queue(fields, annotations) + def apply(fields: Fields, annotations: Annotations): Amqp091ChannelExchange020 = + new Amqp091ChannelExchange020(fields, annotations) } diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiBaseConverter.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiBaseConverter.scala index 650635bdc5..a4cebcd7eb 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiBaseConverter.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiBaseConverter.scala @@ -59,6 +59,8 @@ trait ApiBaseConverter with ServerBindingsConverter with MessageBindingsConverter with Amqp091ChannelBindingConverter + with Amqp091ChannelBinding010Converter + with Amqp091ChannelBinding020Converter with Amqp091MessageBindingConverter with Amqp091OperationBindingConverter with EmptyBindingConverter @@ -72,7 +74,11 @@ trait ApiBaseConverter with WebSocketsChannelBindingConverter with MqttServerLastWillConverter with Amqp091ChannelExchangeConverter + with Amqp091ChannelExchange010Converter + with Amqp091ChannelExchange020Converter with Amqp091QueueConverter + with Amqp091Queue010Converter + with Amqp091Queue020Converter with SolaceServerBindingConverter with SolaceOperationBindingConverter with SolaceOperationDestinationConverter @@ -167,7 +173,6 @@ trait ServerBindingConverter extends PlatformSecrets { override def asInternal(from: domain.bindings.ServerBinding): ServerBinding = from._internal } } - trait Amqp091ChannelBindingConverter extends PlatformSecrets { implicit object Amqp091ChannelBindingMatcher extends BidirectionalMatcher[Amqp091ChannelBinding, domain.bindings.amqp.Amqp091ChannelBinding] { @@ -176,6 +181,24 @@ trait Amqp091ChannelBindingConverter extends PlatformSecrets { override def asInternal(from: domain.bindings.amqp.Amqp091ChannelBinding): Amqp091ChannelBinding = from._internal } } +trait Amqp091ChannelBinding010Converter extends PlatformSecrets { + implicit object Amqp091ChannelBinding010Matcher + extends BidirectionalMatcher[Amqp091ChannelBinding010, domain.bindings.amqp.Amqp091ChannelBinding010] { + override def asClient(from: Amqp091ChannelBinding010): domain.bindings.amqp.Amqp091ChannelBinding010 = + platform.wrap[domain.bindings.amqp.Amqp091ChannelBinding010](from) + override def asInternal(from: domain.bindings.amqp.Amqp091ChannelBinding010): Amqp091ChannelBinding010 = + from._internal + } +} +trait Amqp091ChannelBinding020Converter extends PlatformSecrets { + implicit object Amqp091ChannelBinding020Matcher + extends BidirectionalMatcher[Amqp091ChannelBinding020, domain.bindings.amqp.Amqp091ChannelBinding020] { + override def asClient(from: Amqp091ChannelBinding020): domain.bindings.amqp.Amqp091ChannelBinding020 = + platform.wrap[domain.bindings.amqp.Amqp091ChannelBinding020](from) + override def asInternal(from: domain.bindings.amqp.Amqp091ChannelBinding020): Amqp091ChannelBinding020 = + from._internal + } +} trait Amqp091MessageBindingConverter extends PlatformSecrets { implicit object Amqp091MessageBindingMatcher extends BidirectionalMatcher[Amqp091MessageBinding, domain.bindings.amqp.Amqp091MessageBinding] { @@ -284,6 +307,26 @@ trait Amqp091ChannelExchangeConverter extends PlatformSecrets { } } +trait Amqp091ChannelExchange010Converter extends PlatformSecrets { + implicit object Amqp091ChannelExchange010Matcher + extends BidirectionalMatcher[Amqp091ChannelExchange010, domain.bindings.amqp.Amqp091ChannelExchange010] { + override def asClient(from: Amqp091ChannelExchange010): domain.bindings.amqp.Amqp091ChannelExchange010 = + platform.wrap[domain.bindings.amqp.Amqp091ChannelExchange010](from) + override def asInternal(from: domain.bindings.amqp.Amqp091ChannelExchange010): Amqp091ChannelExchange010 = + from._internal + } +} + +trait Amqp091ChannelExchange020Converter extends PlatformSecrets { + implicit object Amqp091ChannelExchange020Matcher + extends BidirectionalMatcher[Amqp091ChannelExchange020, domain.bindings.amqp.Amqp091ChannelExchange020] { + override def asClient(from: Amqp091ChannelExchange020): domain.bindings.amqp.Amqp091ChannelExchange020 = + platform.wrap[domain.bindings.amqp.Amqp091ChannelExchange020](from) + override def asInternal(from: domain.bindings.amqp.Amqp091ChannelExchange020): Amqp091ChannelExchange020 = + from._internal + } +} + trait Amqp091QueueConverter extends PlatformSecrets { implicit object Amqp091QueueMatcher extends BidirectionalMatcher[Amqp091Queue, domain.bindings.amqp.Amqp091Queue] { override def asClient(from: Amqp091Queue): domain.bindings.amqp.Amqp091Queue = @@ -292,6 +335,24 @@ trait Amqp091QueueConverter extends PlatformSecrets { } } +trait Amqp091Queue010Converter extends PlatformSecrets { + implicit object Amqp091Queue010Matcher + extends BidirectionalMatcher[Amqp091Queue010, domain.bindings.amqp.Amqp091Queue010] { + override def asClient(from: Amqp091Queue010): domain.bindings.amqp.Amqp091Queue010 = + platform.wrap[domain.bindings.amqp.Amqp091Queue010](from) + override def asInternal(from: domain.bindings.amqp.Amqp091Queue010): Amqp091Queue010 = from._internal + } +} + +trait Amqp091Queue020Converter extends PlatformSecrets { + implicit object Amqp091Queue020Matcher + extends BidirectionalMatcher[Amqp091Queue020, domain.bindings.amqp.Amqp091Queue020] { + override def asClient(from: Amqp091Queue020): domain.bindings.amqp.Amqp091Queue020 = + platform.wrap[domain.bindings.amqp.Amqp091Queue020](from) + override def asInternal(from: domain.bindings.amqp.Amqp091Queue020): Amqp091Queue020 = from._internal + } +} + trait PulsarServerBindingConverter extends PlatformSecrets { implicit object PulsarServerBindingMatcher extends BidirectionalMatcher[PulsarServerBinding, domain.bindings.pulsar.PulsarServerBinding] { diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiRegister.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiRegister.scala index 868fd00a3a..f1c4f05887 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiRegister.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiRegister.scala @@ -219,8 +219,13 @@ private[amf] object ApiRegister extends UniqueInitializer with PlatformSecrets { platform.registerWrapper(CorrelationIdModel) { case s: domain.CorrelationId => CorrelationId(s) } - platform.registerWrapper(Amqp091ChannelBindingModel) { - case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091ChannelBinding => Amqp091ChannelBinding(s) + platform.registerWrapper(Amqp091ChannelBinding010Model) { + case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091ChannelBinding010 => + Amqp091ChannelBinding010(s) + } + platform.registerWrapper(Amqp091ChannelBinding020Model) { + case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091ChannelBinding020 => + Amqp091ChannelBinding020(s) } platform.registerWrapper(OperationBindingsModel) { case s: amf.apicontract.client.scala.model.domain.bindings.OperationBindings => OperationBindings(s) @@ -234,12 +239,19 @@ private[amf] object ApiRegister extends UniqueInitializer with PlatformSecrets { platform.registerWrapper(MessageBindingsModel) { case s: amf.apicontract.client.scala.model.domain.bindings.MessageBindings => MessageBindings(s) } - platform.registerWrapper(Amqp091ChannelExchangeModel) { - case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091ChannelExchange => - Amqp091ChannelExchange(s) + platform.registerWrapper(Amqp091ChannelExchange010Model) { + case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091ChannelExchange010 => + Amqp091ChannelExchange010(s) + } + platform.registerWrapper(Amqp091ChannelExchange020Model) { + case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091ChannelExchange020 => + Amqp091ChannelExchange020(s) + } + platform.registerWrapper(Amqp091Queue010Model) { + case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091Queue010 => Amqp091Queue010(s) } - platform.registerWrapper(Amqp091QueueModel) { - case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091Queue => Amqp091Queue(s) + platform.registerWrapper(Amqp091Queue020Model) { + case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091Queue020 => Amqp091Queue020(s) } platform.registerWrapper(Amqp091MessageBindingModel) { case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091MessageBinding => Amqp091MessageBinding(s) diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/entities/APIEntities.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/entities/APIEntities.scala index 25af2c8ca3..b93367ed83 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/entities/APIEntities.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/entities/APIEntities.scala @@ -60,10 +60,17 @@ private[amf] object APIEntities extends Entities { CorrelationIdModel, CallbackModel, Amqp091ChannelBindingModel, - Amqp091MessageBindingModel, + Amqp091ChannelBinding010Model, + Amqp091ChannelBinding020Model, Amqp091QueueModel, - OperationBindingModel, + Amqp091Queue010Model, + Amqp091Queue020Model, Amqp091ChannelExchangeModel, + Amqp091ChannelExchange010Model, + Amqp091ChannelExchange020Model, + Amqp091MessageBindingModel, + Amqp091OperationBindingModel, + OperationBindingModel, ChannelBindingModel, EmptyBindingModel, HttpOperationBindingModel, @@ -83,7 +90,6 @@ private[amf] object APIEntities extends Entities { ChannelBindingsModel, ServerBindingsModel, MessageModel, - Amqp091OperationBindingModel, OpenIdConnectSettingsModel, HttpSettingsModel, HttpApiKeySettingsModel, diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/metamodel/domain/bindings/Amqp091BindingModel.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/metamodel/domain/bindings/Amqp091BindingModel.scala index ac6658daf2..98bf63e4b8 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/metamodel/domain/bindings/Amqp091BindingModel.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/metamodel/domain/bindings/Amqp091BindingModel.scala @@ -9,48 +9,87 @@ import amf.core.internal.metamodel.Type.{Array, Bool, Int, Str} import amf.core.internal.metamodel.domain.common.NameFieldSchema import amf.core.internal.metamodel.domain.{DomainElementModel, ModelDoc, ModelVocabularies} -object Amqp091ChannelBindingModel extends ChannelBindingModel with BindingVersion { +trait Amqp091ChannelBindingModel extends ChannelBindingModel with BindingVersion { - val Is = + val Is: Field = Field(Str, ApiBinding + "is", ModelDoc(ModelVocabularies.ApiBinding, "is", "Defines what type of channel is it")) - val Exchange = Field( + val Exchange: Field = Field( Amqp091ChannelExchangeModel, ApiBinding + "exchange", ModelDoc(ModelVocabularies.ApiBinding, "exchange", "Defines the exchange properties") ) - val Queue = Field( + val Queue: Field = Field( Amqp091QueueModel, ApiBinding + "queue", ModelDoc(ModelVocabularies.ApiBinding, "queue", "Defines the queue properties") ) - override def modelInstance: AmfObject = Amqp091ChannelBinding() - override def fields: List[Field] = List(Is, Exchange, Queue, BindingVersion) ++ ChannelBindingModel.fields override val `type`: List[ValueType] = ApiBinding + "Amqp091ChannelBinding" :: ChannelBindingModel.`type` - override val doc: ModelDoc = ModelDoc( - ModelVocabularies.ApiBinding, - "Amqp091ChannelBinding", - "" - ) + override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "Amqp091ChannelBinding") + override val key: Field = Type } -object Amqp091ChannelExchangeModel extends DomainElementModel with NameFieldSchema { - val Type = +object Amqp091ChannelBindingModel extends Amqp091ChannelBindingModel { + override def modelInstance: AmfObject = throw new Exception("Amqp091ChannelBindingModel is an abstract class") +} + +object Amqp091ChannelBinding010Model extends Amqp091ChannelBindingModel { + override val Exchange: Field = Field( + Amqp091ChannelExchange010Model, + ApiBinding + "exchange", + ModelDoc(ModelVocabularies.ApiBinding, "exchange", "Defines the exchange properties") + ) + + override val Queue: Field = Field( + Amqp091Queue010Model, + ApiBinding + "queue", + ModelDoc(ModelVocabularies.ApiBinding, "queue", "Defines the queue properties") + ) + + override def modelInstance: AmfObject = Amqp091ChannelBinding010() + + override val `type`: List[ValueType] = ApiBinding + "Amqp091ChannelBinding010" :: ChannelBindingModel.`type` + + override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "Amqp091ChannelBinding010") +} + +object Amqp091ChannelBinding020Model extends Amqp091ChannelBindingModel { + override val Exchange: Field = Field( + Amqp091ChannelExchange020Model, + ApiBinding + "exchange", + ModelDoc(ModelVocabularies.ApiBinding, "exchange", "Defines the exchange properties") + ) + + override val Queue: Field = Field( + Amqp091Queue020Model, + ApiBinding + "queue", + ModelDoc(ModelVocabularies.ApiBinding, "queue", "Defines the queue properties") + ) + + override def modelInstance: AmfObject = Amqp091ChannelBinding020() + + override val `type`: List[ValueType] = ApiBinding + "Amqp091ChannelBinding020" :: ChannelBindingModel.`type` + + override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "Amqp091ChannelBinding020") +} + +trait Amqp091ChannelExchangeModel extends DomainElementModel with NameFieldSchema { + val Type: Field = Field(Str, ApiBinding + "type", ModelDoc(ModelVocabularies.ApiBinding, "type", "The type of the exchange")) - val Durable = Field( + val Durable: Field = Field( Bool, ApiBinding + "durable", ModelDoc(ModelVocabularies.ApiBinding, "durable", "Whether the exchange should survive broker restarts or not") ) - val AutoDelete = Field( + val AutoDelete: Field = Field( Bool, ApiBinding + "autoDelete", ModelDoc( @@ -60,7 +99,27 @@ object Amqp091ChannelExchangeModel extends DomainElementModel with NameFieldSche ) ) - val VHost = Field( + override def fields: List[Field] = List(Name, Type, Durable, AutoDelete) ++ DomainElementModel.fields + + override val `type`: List[ValueType] = ApiBinding + "Amqp091ChannelExchange" :: DomainElementModel.`type` + + override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "Amqp091ChannelExchange") +} + +object Amqp091ChannelExchangeModel extends Amqp091ChannelExchangeModel { + override def modelInstance: AmfObject = throw new Exception("Amqp091ChannelExchangeModel is an abstract class") +} + +object Amqp091ChannelExchange010Model extends Amqp091ChannelExchangeModel { + override val `type`: List[ValueType] = ApiBinding + "Amqp091ChannelExchange010" :: DomainElementModel.`type` + + override def modelInstance: AmfObject = Amqp091ChannelExchange010() + + override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "Amqp091ChannelExchange010") +} + +object Amqp091ChannelExchange020Model extends Amqp091ChannelExchangeModel { + val VHost: Field = Field( Str, ApiBinding + "vhost", ModelDoc(ModelVocabularies.ApiBinding, "vhost", "The virtual host of the exchange") @@ -68,25 +127,21 @@ object Amqp091ChannelExchangeModel extends DomainElementModel with NameFieldSche override def fields: List[Field] = List(Name, Type, Durable, AutoDelete, VHost) ++ DomainElementModel.fields - override val `type`: List[ValueType] = ApiBinding + "Amqp091ChannelExchange" :: DomainElementModel.`type` + override val `type`: List[ValueType] = ApiBinding + "Amqp091ChannelExchange020" :: DomainElementModel.`type` - override def modelInstance: AmfObject = Amqp091ChannelExchange() + override def modelInstance: AmfObject = Amqp091ChannelExchange020() - override val doc: ModelDoc = ModelDoc( - ModelVocabularies.ApiBinding, - "Amqp091ChannelExchange", - "" - ) + override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "Amqp091ChannelExchange020") } -object Amqp091QueueModel extends DomainElementModel with NameFieldSchema { - val Durable = Field( +trait Amqp091QueueModel extends DomainElementModel with NameFieldSchema { + val Durable: Field = Field( Bool, ApiBinding + "durable", ModelDoc(ModelVocabularies.ApiBinding, "durable", "Whether the exchange should survive broker restarts or not") ) - val Exclusive = Field( + val Exclusive: Field = Field( Bool, ApiBinding + "exclusive", ModelDoc( @@ -96,7 +151,7 @@ object Amqp091QueueModel extends DomainElementModel with NameFieldSchema { ) ) - val AutoDelete = Field( + val AutoDelete: Field = Field( Bool, ApiBinding + "autoDelete", ModelDoc( @@ -106,7 +161,27 @@ object Amqp091QueueModel extends DomainElementModel with NameFieldSchema { ) ) - val VHost = Field( + override def fields: List[Field] = List(Name, Durable, Exclusive, AutoDelete) ++ DomainElementModel.fields + + override val `type`: List[ValueType] = ApiBinding + "Amqp091ChannelQueue" :: DomainElementModel.`type` + + override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "Amqp091Queue") +} + +object Amqp091QueueModel extends Amqp091QueueModel { + override def modelInstance: AmfObject = throw new Exception("Amqp091ChannelExchangeModel is an abstract class") +} + +object Amqp091Queue010Model extends Amqp091QueueModel { + override val `type`: List[ValueType] = ApiBinding + "Amqp091ChannelQueue010" :: DomainElementModel.`type` + + override def modelInstance: AmfObject = Amqp091Queue010() + + override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "Amqp091Queue010") +} + +object Amqp091Queue020Model extends Amqp091QueueModel { + val VHost: Field = Field( Str, ApiBinding + "vhost", ModelDoc(ModelVocabularies.ApiBinding, "vhost", "The virtual host of the exchange") @@ -114,15 +189,11 @@ object Amqp091QueueModel extends DomainElementModel with NameFieldSchema { override def fields: List[Field] = List(Name, Durable, Exclusive, AutoDelete, VHost) ++ DomainElementModel.fields - override val `type`: List[ValueType] = ApiBinding + "Amqp091ChannelQueue" :: DomainElementModel.`type` + override val `type`: List[ValueType] = ApiBinding + "Amqp091ChannelQueue020" :: DomainElementModel.`type` - override def modelInstance: AmfObject = Amqp091Queue() + override def modelInstance: AmfObject = Amqp091Queue020() - override val doc: ModelDoc = ModelDoc( - ModelVocabularies.ApiBinding, - "Amqp091Queue", - "" - ) + override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "Amqp091Queue020") } object Amqp091OperationBindingModel extends OperationBindingModel with BindingVersion { diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/emitters/bindings/AsyncApiChannelBindingsEmitter.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/emitters/bindings/AsyncApiChannelBindingsEmitter.scala index 9b641f1aa8..4bf40655ba 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/emitters/bindings/AsyncApiChannelBindingsEmitter.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/emitters/bindings/AsyncApiChannelBindingsEmitter.scala @@ -21,7 +21,9 @@ import amf.apicontract.client.scala.model.domain.bindings.pulsar.{PulsarChannelB import amf.apicontract.client.scala.model.domain.bindings.websockets.WebSocketsChannelBinding import amf.apicontract.internal.metamodel.domain.bindings.{ Amqp091ChannelBindingModel, + Amqp091ChannelExchange020Model, Amqp091ChannelExchangeModel, + Amqp091Queue020Model, Amqp091QueueModel, AnypointMQChannelBindingModel, GooglePubSubChannelBindingModel, @@ -31,11 +33,19 @@ import amf.apicontract.internal.metamodel.domain.bindings.{ IBMMQChannelBindingModel, IBMMQChannelQueueModel, IBMMQChannelTopicModel, - PulsarChannelBindingModel, - PulsarChannelRetentionModel, WebSocketsChannelBindingModel + PulsarChannelBindingModel, + PulsarChannelRetentionModel, + WebSocketsChannelBindingModel } import amf.apicontract.internal.spec.async.emitters.domain -import amf.apicontract.internal.spec.async.parser.bindings.Bindings.{Amqp, AnypointMQ, GooglePubSub, IBMMQ, Pulsar, WebSockets} +import amf.apicontract.internal.spec.async.parser.bindings.Bindings.{ + Amqp, + AnypointMQ, + GooglePubSub, + IBMMQ, + Pulsar, + WebSockets +} import amf.apicontract.internal.spec.oas.emitter.context.OasLikeSpecEmitterContext import org.mulesoft.common.client.lexical.Position import amf.core.client.scala.model.domain.{AmfScalar, ObjectNode, Shape} @@ -72,7 +82,7 @@ class AsyncApiChannelBindingsEmitter(binding: ChannelBinding, ordering: SpecOrde case binding: WebSocketsChannelBinding => Some(new WebSocketChannelBindingEmitter(binding, ordering)) case binding: IBMMQChannelBinding => Some(new IBMMQChannelBindingEmitter(binding, ordering)) case binding: AnypointMQChannelBinding => Some(new AnypointMQChannelBindingEmitter(binding, ordering)) - case binding: PulsarChannelBinding => Some(new PulsarChannelBindingEmitter(binding, ordering)) + case binding: PulsarChannelBinding => Some(new PulsarChannelBindingEmitter(binding, ordering)) case binding: GooglePubSubChannelBinding => Some(new GooglePubSubChannelBindingEmitter(binding, ordering)) case _ => None } @@ -145,13 +155,17 @@ class Amqp091ChannelExchangeEmitter(binding: Amqp091ChannelExchange, ordering: S fs.entry(Amqp091ChannelExchangeModel.Type).foreach(f => result += ValueEmitter("type", f)) fs.entry(Amqp091ChannelExchangeModel.Durable).foreach(f => result += ValueEmitter("durable", f)) fs.entry(Amqp091ChannelExchangeModel.AutoDelete).foreach(f => result += ValueEmitter("autoDelete", f)) - fs.entry(Amqp091ChannelExchangeModel.VHost).foreach(f => result += ValueEmitter("vhost", f)) + fs.entry(Amqp091ChannelExchange020Model.VHost).foreach { f => + if (!isSynthesized(f)) result += ValueEmitter("vhost", f) + } traverse(ordering.sorted(result), emitter) } ) } + private def isSynthesized(f: FieldEntry): Boolean = f.value.annotations.contains(classOf[SynthesizedField]) + override def position(): Position = pos(binding.annotations) } @@ -168,7 +182,7 @@ class Amqp091ChannelQueueEmitter(binding: Amqp091Queue, ordering: SpecOrdering) fs.entry(Amqp091QueueModel.Exclusive).foreach(f => result += ValueEmitter("exclusive", f)) fs.entry(Amqp091QueueModel.Durable).foreach(f => result += ValueEmitter("durable", f)) fs.entry(Amqp091QueueModel.AutoDelete).foreach(f => result += ValueEmitter("autoDelete", f)) - fs.entry(Amqp091QueueModel.VHost).foreach { f => + fs.entry(Amqp091Queue020Model.VHost).foreach { f => if (!isSynthesized(f)) result += ValueEmitter("vhost", f) } traverse(ordering.sorted(result), emitter) diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/AsyncChannelBindingsParser.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/AsyncChannelBindingsParser.scala index f536b9b0b4..0f87818bed 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/AsyncChannelBindingsParser.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/AsyncChannelBindingsParser.scala @@ -1,10 +1,15 @@ package amf.apicontract.internal.spec.async.parser.bindings -import amf.apicontract.client.scala.model.domain.bindings.googlepubsub.GooglePubSubChannelBinding import amf.apicontract.client.scala.model.domain.bindings.{ChannelBinding, ChannelBindings} import amf.apicontract.internal.metamodel.domain.bindings._ -import amf.apicontract.internal.spec.async.parser.bindings.Bindings.{Amqp, AnypointMQ, GooglePubSub, IBMMQ, Pulsar, WebSockets} -//import amf.apicontract.internal.spec.async.parser.bindings.channel.{Amqp091ChannelBindingParser, AnypointMQChannelBindingParser, GooglePubSubChannelBindingParser, IBMMQChannelBindingParser,PulsarChannelBindingParser, WebSocketsChannelBindingParser} +import amf.apicontract.internal.spec.async.parser.bindings.Bindings.{ + Amqp, + AnypointMQ, + GooglePubSub, + IBMMQ, + Pulsar, + WebSockets +} import amf.apicontract.internal.spec.async.parser.context.AsyncWebApiContext import amf.apicontract.internal.spec.common.WebApiDeclarations.ErrorChannelBindings import amf.apicontract.internal.spec.spec.OasDefinitions @@ -16,11 +21,11 @@ import amf.apicontract.internal.spec.async.parser.bindings.channel._ object AsyncChannelBindingsParser { private val parserMap: Map[String, BindingParser[ChannelBinding]] = Map( - Amqp -> Amqp091ChannelBindingParser, - WebSockets -> WebSocketsChannelBindingParser, - IBMMQ -> IBMMQChannelBindingParser, - AnypointMQ -> AnypointMQChannelBindingParser, - Pulsar -> PulsarChannelBindingParser, + Amqp -> AmqpChannelBindingParser, + WebSockets -> WebSocketsChannelBindingParser, + IBMMQ -> IBMMQChannelBindingParser, + AnypointMQ -> AnypointMQChannelBindingParser, + Pulsar -> PulsarChannelBindingParser, GooglePubSub -> GooglePubSubChannelBindingParser ) } diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/BindingParser.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/BindingParser.scala index 001af28229..880fa86a07 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/BindingParser.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/BindingParser.scala @@ -7,11 +7,13 @@ import amf.core.client.scala.model.domain.{AmfElement, AmfObject, AmfScalar, Dom import amf.core.internal.metamodel.Field import amf.core.internal.parser.YMapOps import amf.core.internal.parser.domain.Annotations +import amf.core.internal.remote.Spec +import amf.core.internal.remote.Spec._ import amf.shapes.internal.spec.common.JSONSchemaDraft7SchemaVersion import amf.shapes.internal.spec.common.parser.YMapEntryLike import amf.shapes.internal.spec.oas.parser.OasTypeParser import amf.shapes.internal.validation.definitions.ShapeParserSideValidations.RequiredField -import org.yaml.model.{YMap, YMapEntry} +import org.yaml.model.{YMap, YMapEntry, YNode, YNodePlain, YScalar, YSequence} trait BindingParser[+Binding <: DomainElement] extends SpecParserOps { @@ -25,6 +27,37 @@ trait BindingParser[+Binding <: DomainElement] extends SpecParserOps { if (bindingVersionIsEmpty(binding)) setDefaultBindingVersionValue(binding, field) } + protected def getBindingVersion(map: YMap, binding: String, spec: Spec): String = { + extractValidBindingVersion(map) match { + case Some(version) => version + case None => getDefaultBindingVersion(binding, spec) + } + } + + protected def extractValidBindingVersion(map: YMap): Option[String] = map.key("bindingVersion") match { + case Some(value) => + value.value match { + case plain: YNodePlain => + plain.value match { + case scalar: YScalar if isSemVer(scalar.text) => Some(scalar.text) + case _ => None + } + case _ => None + } + case None => None + } + + protected def isSemVer(str: String): Boolean = { + val regex = """^([0-9]+)\.([0-9]+)\.([0-9]+)$""".r + regex.findFirstIn(str).isDefined + } + + protected def getDefaultBindingVersion(binding: String, spec: Spec): String = { + (binding, spec) match { + case ("Amqp091ChannelBinding", ASYNC20 | ASYNC21 | ASYNC22 | ASYNC23 | ASYNC24 | ASYNC25 | ASYNC26) => "0.1.0" + } + } + protected def setDefaultValue(obj: AmfObject, field: Field, element: AmfElement): obj.type = { // TODO: if field not explicit in spec we should check for synthesized and not emit it obj.setWithoutId(field, element, Annotations.synthesized()) diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/channel/AmqpChannelBindingParser.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/channel/AmqpChannelBindingParser.scala index c5be2f3228..00a3b45405 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/channel/AmqpChannelBindingParser.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/channel/AmqpChannelBindingParser.scala @@ -2,91 +2,121 @@ package amf.apicontract.internal.spec.async.parser.bindings.channel import amf.apicontract.client.scala.model.domain.bindings.amqp.{ Amqp091ChannelBinding, - Amqp091ChannelExchange, - Amqp091Queue + Amqp091ChannelBinding010, + Amqp091ChannelBinding020, + Amqp091ChannelExchange010, + Amqp091ChannelExchange020, + Amqp091Queue010, + Amqp091Queue020 } import amf.apicontract.internal.metamodel.domain.bindings.{ + Amqp091ChannelBinding010Model, + Amqp091ChannelBinding020Model, Amqp091ChannelBindingModel, + Amqp091ChannelExchange020Model, Amqp091ChannelExchangeModel, + Amqp091Queue020Model, Amqp091QueueModel, WebSocketsChannelBindingModel } import amf.apicontract.internal.spec.async.parser.bindings.BindingParser import amf.apicontract.internal.spec.async.parser.context.AsyncWebApiContext -import amf.apicontract.internal.spec.common.parser.SpecParserOps import amf.core.client.scala.model.domain.{AmfScalar, DomainElement} import amf.core.internal.metamodel.Field import amf.core.internal.parser.YMapOps import amf.core.internal.parser.domain.Annotations import org.yaml.model.{YMap, YMapEntry} -object Amqp091ChannelBindingParser extends BindingParser[Amqp091ChannelBinding] { +object AmqpChannelBindingParser extends BindingParser[Amqp091ChannelBinding] { override def parse(entry: YMapEntry, parent: String)(implicit ctx: AsyncWebApiContext): Amqp091ChannelBinding = { - val binding = Amqp091ChannelBinding(Annotations(entry)) - val map = entry.value.as[YMap] + val bindingVersion = getBindingVersion(entry.value.as[YMap], "Amqp091ChannelBinding", ctx.specSettings.spec) - map.key("is", Amqp091ChannelBindingModel.Is in binding) + // bindingVersion is either well defined or defaults to 0.1.0 + val binding: Amqp091ChannelBinding = bindingVersion match { + case "0.2.0" | "latest" => Amqp091ChannelBinding020(Annotations(entry)) + case _ => Amqp091ChannelBinding010(Annotations(entry)) + } + + val map = entry.value.as[YMap] - // Default channel type is 'routingKey'. - if (binding.is.isNullOrEmpty) { - binding.setWithoutId(Amqp091ChannelBindingModel.Is, AmfScalar("routingKey"), Annotations.synthesized()) + map.key("is") match { + case Some(value) => Some(value).foreach(Amqp091ChannelBindingModel.Is in binding) + case None => setDefaultValue(binding, Amqp091ChannelBindingModel.Is, AmfScalar("routingKey")) } - parseQueue(binding, map) - parseExchange(binding, map) + + parseQueue(binding, map, bindingVersion) + parseExchange(binding, map, bindingVersion) parseBindingVersion(binding, WebSocketsChannelBindingModel.BindingVersion, map) ctx.closedShape(binding, map, "amqpChannelBinding") binding } - private def parseExchange(binding: Amqp091ChannelBinding, map: YMap)(implicit ctx: AsyncWebApiContext): Unit = { + private def parseExchange(binding: Amqp091ChannelBinding, map: YMap, bindingVersion: String)(implicit + ctx: AsyncWebApiContext + ): Unit = { map.key( "exchange", { entry => - val exchange = Amqp091ChannelExchange(Annotations(entry.value)) + val exchange = bindingVersion match { + case "0.2.0" | "latest" => Amqp091ChannelExchange020(Annotations(entry.value)) + case _ => Amqp091ChannelExchange010(Annotations(entry.value)) + } + val exchangeMap = entry.value.as[YMap] - exchangeMap.key("name", Amqp091ChannelExchangeModel.Name in exchange) // TODO validate maxlength 255 + exchangeMap.key("name", Amqp091ChannelExchangeModel.Name in exchange) exchangeMap.key("type", Amqp091ChannelExchangeModel.Type in exchange) exchangeMap.key("durable", Amqp091ChannelExchangeModel.Durable in exchange) exchangeMap.key("autoDelete", Amqp091ChannelExchangeModel.AutoDelete in exchange) - parseVHost(exchange, Amqp091ChannelExchangeModel.VHost, exchangeMap) - - ctx.closedShape(exchange, exchangeMap, "amqpExchangeChannelBinding") - - binding.setWithoutId(Amqp091ChannelBindingModel.Exchange, exchange, Annotations(entry)) + bindingVersion match { + case "0.2.0" | "latest" => + parseVHost(exchange, Amqp091ChannelExchange020Model.VHost, exchangeMap) + ctx.closedShape(exchange, exchangeMap, "amqpExchangeChannelBinding020") + binding.setWithoutId(Amqp091ChannelBinding020Model.Exchange, exchange, Annotations(entry)) + case _ => + ctx.closedShape(exchange, exchangeMap, "amqpExchangeChannelBinding010") + binding.setWithoutId(Amqp091ChannelBinding010Model.Exchange, exchange, Annotations(entry)) + } } ) } - private def parseQueue(binding: Amqp091ChannelBinding, map: YMap)(implicit ctx: AsyncWebApiContext): Unit = { + private def parseQueue(binding: Amqp091ChannelBinding, map: YMap, bindingVersion: String)(implicit + ctx: AsyncWebApiContext + ): Unit = { map.key( "queue", { entry => - val queue = Amqp091Queue(Annotations(entry.value)) + val queue = bindingVersion match { + case "0.2.0" | "latest" => Amqp091Queue020(Annotations(entry.value)) + case _ => Amqp091Queue010(Annotations(entry.value)) + } val queueMap = entry.value.as[YMap] - queueMap.key("name", Amqp091QueueModel.Name in queue) // TODO validate maxlength 255 + queueMap.key("name", Amqp091QueueModel.Name in queue) queueMap.key("durable", Amqp091QueueModel.Durable in queue) queueMap.key("exclusive", Amqp091QueueModel.Exclusive in queue) queueMap.key("autoDelete", Amqp091QueueModel.AutoDelete in queue) - parseVHost(queue, Amqp091QueueModel.VHost, queueMap) - - ctx.closedShape(queue, queueMap, "amqpQueueChannelBinding") - - binding.setWithoutId(Amqp091ChannelBindingModel.Queue, queue, Annotations(entry)) + bindingVersion match { + case "0.2.0" | "latest" => + parseVHost(queue, Amqp091Queue020Model.VHost, queueMap) + ctx.closedShape(queue, queueMap, "amqpQueueChannelBinding020") + binding.setWithoutId(Amqp091ChannelBinding020Model.Queue, queue, Annotations(entry)) + case _ => + ctx.closedShape(queue, queueMap, "amqpQueueChannelBinding010") + binding.setWithoutId(Amqp091ChannelBinding010Model.Queue, queue, Annotations(entry)) + } } ) } private def parseVHost(element: DomainElement, field: Field, map: YMap)(implicit ctx: AsyncWebApiContext) = { - map.key("vhost", field in element) - - // Default vhost is '/'. - if (!element.fields.exists(field)) { - element.setWithoutId(field, AmfScalar("/"), Annotations.synthesized()) + map.key("vhost") match { + case Some(value) => Some(value).foreach(field in element) + case None => element.setWithoutId(field, AmfScalar("/"), Annotations.synthesized()) } } } diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/context/syntax/Async20Syntax.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/context/syntax/Async20Syntax.scala index ac1022bb0d..669e3d428e 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/context/syntax/Async20Syntax.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/context/syntax/Async20Syntax.scala @@ -56,14 +56,26 @@ object Async20Syntax extends SpecSyntax { "bindingVersion", "exchange" ), - "amqpQueueChannelBinding" -> Set( + "amqpQueueChannelBinding010" -> Set( + "name", + "durable", + "exclusive", + "autoDelete" + ), + "amqpQueueChannelBinding020" -> Set( "name", "durable", "exclusive", "autoDelete", "vhost" ), - "amqpExchangeChannelBinding" -> Set( + "amqpExchangeChannelBinding010" -> Set( + "name", + "type", + "durable", + "autoDelete" + ), + "amqpExchangeChannelBinding020" -> Set( "name", "type", "durable", diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/validation/model/APIRawValidations.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/validation/model/APIRawValidations.scala index b9a476a2ad..3dad316f4f 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/validation/model/APIRawValidations.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/validation/model/APIRawValidations.scala @@ -899,7 +899,14 @@ object APIRawValidations extends CommonValidationDefinitions { openApiErrorMessage = "'qos' for mqtt operation binding object must be one of 0, 1 or 2" ), AMFValidation( - owlClass = apiBinding("Amqp091ChannelBinding"), + owlClass = apiBinding("Amqp091ChannelBinding010"), + owlProperty = apiBinding("is"), + constraint = sh("in"), + value = "routingKey,queue", + openApiErrorMessage = "'is' for amqp 0.9.1 channel binding object must be one of 'queue' or 'routingKey'" + ), + AMFValidation( + owlClass = apiBinding("Amqp091ChannelBinding020"), owlProperty = apiBinding("is"), constraint = sh("in"), value = "routingKey,queue", @@ -936,14 +943,28 @@ object APIRawValidations extends CommonValidationDefinitions { openApiErrorMessage = "'type' for http operation binding is required" ), AMFValidation( - owlClass = apiBinding("Amqp091ChannelExchange"), + owlClass = apiBinding("Amqp091ChannelExchange010"), + owlProperty = core("name"), + constraint = sh("maxLength"), + value = "255", + openApiErrorMessage = "Amqp channel binding name can't be longer than 255 characters" + ), + AMFValidation( + owlClass = apiBinding("Amqp091ChannelExchange020"), + owlProperty = core("name"), + constraint = sh("maxLength"), + value = "255", + openApiErrorMessage = "Amqp channel binding name can't be longer than 255 characters" + ), + AMFValidation( + owlClass = apiBinding("Amqp091ChannelQueue010"), owlProperty = core("name"), constraint = sh("maxLength"), value = "255", openApiErrorMessage = "Amqp channel binding name can't be longer than 255 characters" ), AMFValidation( - owlClass = apiBinding("Amqp091ChannelQueue"), + owlClass = apiBinding("Amqp091ChannelQueue020"), owlProperty = core("name"), constraint = sh("maxLength"), value = "255", diff --git a/amf-api-contract/shared/src/test/scala/amf/client/model/domain/BindingsTest.scala b/amf-api-contract/shared/src/test/scala/amf/client/model/domain/BindingsTest.scala index 1eaf67217a..3b94d50f92 100644 --- a/amf-api-contract/shared/src/test/scala/amf/client/model/domain/BindingsTest.scala +++ b/amf-api-contract/shared/src/test/scala/amf/client/model/domain/BindingsTest.scala @@ -29,8 +29,18 @@ class BindingsTest extends AnyFunSuite with Matchers with BeforeAndAfterAll { APIConfiguration.API() // TODO: ARM remove after wrappers are deleted } - test("test Amqp091ChannelExchange") { - val exchange = new Amqp091ChannelExchange() + test("test Amqp091ChannelExchange010") { + val exchange = new Amqp091ChannelExchange010() + .withType(s) + .withDurable(true) + .withAutoDelete(false) + exchange.`type`.value() shouldBe s + exchange.durable.value() shouldBe true + exchange.autoDelete.value() shouldBe false + } + + test("test Amqp091ChannelExchange020") { + val exchange = new Amqp091ChannelExchange020() .withType(s) .withDurable(true) .withAutoDelete(false) @@ -39,11 +49,20 @@ class BindingsTest extends AnyFunSuite with Matchers with BeforeAndAfterAll { exchange.durable.value() shouldBe true exchange.autoDelete.value() shouldBe false exchange.vHost.value() shouldBe s + } + test("test Amqp091Queue010") { + val queue = new Amqp091Queue010() + .withExclusive(false) + .withDurable(true) + .withAutoDelete(false) + queue.exclusive.value() shouldBe false + queue.durable.value() shouldBe true + queue.autoDelete.value() shouldBe false } - test("test Amqp091Queue") { - val queue = new Amqp091Queue() + test("test Amqp091Queue020") { + val queue = new Amqp091Queue020() .withExclusive(false) .withDurable(true) .withAutoDelete(false) @@ -54,10 +73,25 @@ class BindingsTest extends AnyFunSuite with Matchers with BeforeAndAfterAll { queue.vHost.value() shouldBe s } - test("test Amqp091ChannelBinding") { - val exchange = new Amqp091ChannelExchange() - val queue = new Amqp091Queue() - val amqpChannelBinding = new Amqp091ChannelBinding() + test("test Amqp091ChannelBinding010") { + val exchange = new Amqp091ChannelExchange010() + val queue = new Amqp091Queue010() + val amqpChannelBinding = new Amqp091ChannelBinding010() + .withIs(s) + .withExchange(exchange) + .withQueue(queue) + .withBindingVersion(s) + .withId(s) + amqpChannelBinding.is.value() shouldBe s + amqpChannelBinding.id shouldBe s + amqpChannelBinding.exchange shouldBe exchange + amqpChannelBinding.queue shouldBe queue + } + + test("test Amqp091ChannelBinding020") { + val exchange = new Amqp091ChannelExchange020() + val queue = new Amqp091Queue020() + val amqpChannelBinding = new Amqp091ChannelBinding020() .withIs(s) .withExchange(exchange) .withQueue(queue) @@ -103,7 +137,7 @@ class BindingsTest extends AnyFunSuite with Matchers with BeforeAndAfterAll { test("test ChannelBindings") { val internalChannelBindings: Seq[amf.apicontract.client.scala.model.domain.bindings.ChannelBinding] = - Seq(new Amqp091ChannelBinding()._internal) + Seq(new Amqp091ChannelBinding010()._internal) val clientChannelBindings = internalChannelBindings.asClient val channelBindings = new ChannelBindings() diff --git a/amf-cli/shared/src/test/resources/upanddown/cycle/async20/bindings/amqp-channel-binding-010.yaml b/amf-cli/shared/src/test/resources/upanddown/cycle/async20/bindings/amqp-channel-binding-010.yaml new file mode 100644 index 0000000000..0489d41dca --- /dev/null +++ b/amf-cli/shared/src/test/resources/upanddown/cycle/async20/bindings/amqp-channel-binding-010.yaml @@ -0,0 +1,20 @@ +asyncapi: 2.0.0 +info: + title: Amqp channel binding + version: 1.0.0 +channels: + some-channel: + bindings: + amqp: + bindingVersion: 0.1.0 + is: queue + exchange: + name: some name + type: topic + durable: false + autoDelete: true + queue: + name: somename + durable: true + exclusive: false + autoDelete: true diff --git a/amf-cli/shared/src/test/resources/upanddown/cycle/async20/bindings/amqp-channel-binding.yaml b/amf-cli/shared/src/test/resources/upanddown/cycle/async20/bindings/amqp-channel-binding-020.yaml similarity index 92% rename from amf-cli/shared/src/test/resources/upanddown/cycle/async20/bindings/amqp-channel-binding.yaml rename to amf-cli/shared/src/test/resources/upanddown/cycle/async20/bindings/amqp-channel-binding-020.yaml index 3e669fecae..166e577fa0 100644 --- a/amf-cli/shared/src/test/resources/upanddown/cycle/async20/bindings/amqp-channel-binding.yaml +++ b/amf-cli/shared/src/test/resources/upanddown/cycle/async20/bindings/amqp-channel-binding-020.yaml @@ -6,7 +6,7 @@ channels: some-channel: bindings: amqp: - bindingVersion: 31.07.92 + bindingVersion: 0.2.0 is: queue exchange: name: some name diff --git a/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.expanded.jsonld b/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.expanded.jsonld new file mode 100644 index 0000000000..54d2ed3a25 --- /dev/null +++ b/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.expanded.jsonld @@ -0,0 +1,535 @@ +[ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml", + "@type": [ + "http://a.ml/vocabularies/document#Document", + "http://a.ml/vocabularies/document#Fragment", + "http://a.ml/vocabularies/document#Module", + "http://a.ml/vocabularies/document#Unit" + ], + "http://a.ml/vocabularies/document#encodes": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api", + "@type": [ + "http://a.ml/vocabularies/apiContract#AsyncAPI", + "http://a.ml/vocabularies/apiContract#API", + "http://a.ml/vocabularies/document#RootDomainElement", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/core#name": [ + { + "@value": "Amqp channel binding" + } + ], + "http://a.ml/vocabularies/core#version": [ + { + "@value": "1.0.0" + } + ], + "http://a.ml/vocabularies/apiContract#endpoint": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel", + "@type": [ + "http://a.ml/vocabularies/apiContract#EndPoint", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/apiContract#path": [ + { + "@value": "some-channel" + } + ], + "http://a.ml/vocabularies/apiBinding#binding": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings", + "@type": [ + "http://a.ml/vocabularies/apiBinding#ChannelBindings", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/apiBinding#bindings": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010", + "@type": [ + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding010", + "http://a.ml/vocabularies/apiBinding#ChannelBinding", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/apiBinding#is": [ + { + "@value": "routingKey" + } + ], + "http://a.ml/vocabularies/apiBinding#exchange": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010", + "@type": [ + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelExchange010", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/core#name": [ + { + "@value": "some name" + } + ], + "http://a.ml/vocabularies/apiBinding#type": [ + { + "@value": "topic" + } + ], + "http://a.ml/vocabularies/apiBinding#durable": [ + { + "@value": false + } + ], + "http://a.ml/vocabularies/apiBinding#autoDelete": [ + { + "@value": true + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_4", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiBinding#durable" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(14,10)-(15,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(11,17)-(16,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiBinding#autoDelete" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(15,10)-(16,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiBinding#type" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(13,10)-(14,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/core#name" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(12,10)-(13,0)]" + } + ] + } + ] + } + ] + } + ], + "http://a.ml/vocabularies/apiBinding#queue": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010", + "@type": [ + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue010", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/core#name": [ + { + "@value": "somename" + } + ], + "http://a.ml/vocabularies/apiBinding#durable": [ + { + "@value": true + } + ], + "http://a.ml/vocabularies/apiBinding#exclusive": [ + { + "@value": false + } + ], + "http://a.ml/vocabularies/apiBinding#autoDelete": [ + { + "@value": true + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_4", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiBinding#exclusive" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(19,10)-(20,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(16,14)-(21,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiBinding#autoDelete" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(20,10)-(21,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiBinding#durable" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(18,10)-(19,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/core#name" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(17,10)-(18,0)]" + } + ] + } + ] + } + ] + } + ], + "http://a.ml/vocabularies/apiBinding#bindingVersion": [ + { + "@value": "0.1.0" + } + ], + "http://a.ml/vocabularies/apiBinding#type": [ + { + "@value": "amqp" + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/synthesized-field/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiBinding#is" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "true" + } + ] + } + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_4", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiBinding#bindingVersion" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(10,8)-(11,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(9,6)-(21,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiBinding#type" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(9,6)-(9,10)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiBinding#queue" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(16,8)-(21,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiBinding#exchange" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(11,8)-(16,0)]" + } + ] + } + ] + } + ] + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(9,0)-(21,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiBinding#bindings" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(9,0)-(21,0)]" + } + ] + } + ] + } + ] + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(7,2)-(21,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiBinding#binding" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(8,4)-(21,0)]" + } + ] + } + ] + } + ] + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/core#version" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(4,2)-(6,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/core#name" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(3,2)-(4,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "http://a.ml/vocabularies/apiContract#endpoint" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(6,0)-(21,0)]" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": [ + { + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api" + } + ], + "http://a.ml/vocabularies/document-source-maps#value": [ + { + "@value": "[(1,0)-(21,0)]" + } + ] + } + ] + } + ] + } + ], + "http://a.ml/vocabularies/document#root": [ + { + "@value": true + } + ], + "http://a.ml/vocabularies/document#processingData": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/BaseUnitProcessingData", + "@type": [ + "http://a.ml/vocabularies/document#APIContractProcessingData" + ], + "http://a.ml/vocabularies/apiContract#modelVersion": [ + { + "@value": "3.9.0" + } + ], + "http://a.ml/vocabularies/document#sourceSpec": [ + { + "@value": "ASYNC 2.0" + } + ] + } + ] + } +] diff --git a/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.flattened.jsonld b/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.flattened.jsonld new file mode 100644 index 0000000000..c8a69530b6 --- /dev/null +++ b/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.flattened.jsonld @@ -0,0 +1,378 @@ +{ + "@graph": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/BaseUnitProcessingData", + "@type": [ + "http://a.ml/vocabularies/document#APIContractProcessingData" + ], + "http://a.ml/vocabularies/apiContract#modelVersion": "3.9.0", + "http://a.ml/vocabularies/document#sourceSpec": "ASYNC 2.0" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api", + "@type": [ + "http://a.ml/vocabularies/apiContract#AsyncAPI", + "http://a.ml/vocabularies/apiContract#API", + "http://a.ml/vocabularies/document#RootDomainElement", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/core#name": "Amqp channel binding", + "http://a.ml/vocabularies/core#version": "1.0.0", + "http://a.ml/vocabularies/apiContract#endpoint": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel" + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel", + "@type": [ + "http://a.ml/vocabularies/apiContract#EndPoint", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/apiContract#path": "some-channel", + "http://a.ml/vocabularies/apiBinding#binding": { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings" + }, + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/source-map" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map/lexical/element_3" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map/lexical/element_1" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map/lexical/element_0" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map/lexical/element_2" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings", + "@type": [ + "http://a.ml/vocabularies/apiBinding#ChannelBindings", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/apiBinding#bindings": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010" + } + ], + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_1" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_0" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/core#version", + "http://a.ml/vocabularies/document-source-maps#value": "[(4,2)-(6,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/core#name", + "http://a.ml/vocabularies/document-source-maps#value": "[(3,2)-(4,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiContract#endpoint", + "http://a.ml/vocabularies/document-source-maps#value": "[(6,0)-(21,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api", + "http://a.ml/vocabularies/document-source-maps#value": "[(1,0)-(21,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010", + "@type": [ + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding010", + "http://a.ml/vocabularies/apiBinding#ChannelBinding", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/apiBinding#is": "routingKey", + "http://a.ml/vocabularies/apiBinding#exchange": { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010" + }, + "http://a.ml/vocabularies/apiBinding#queue": { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010" + }, + "http://a.ml/vocabularies/apiBinding#bindingVersion": "0.1.0", + "http://a.ml/vocabularies/apiBinding#type": "amqp", + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_1" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_0" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel", + "http://a.ml/vocabularies/document-source-maps#value": "[(7,2)-(21,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#binding", + "http://a.ml/vocabularies/document-source-maps#value": "[(8,4)-(21,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010", + "@type": [ + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelExchange010", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/core#name": "some name", + "http://a.ml/vocabularies/apiBinding#type": "topic", + "http://a.ml/vocabularies/apiBinding#durable": false, + "http://a.ml/vocabularies/apiBinding#autoDelete": true, + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010", + "@type": [ + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue010", + "http://a.ml/vocabularies/document#DomainElement" + ], + "http://a.ml/vocabularies/core#name": "somename", + "http://a.ml/vocabularies/apiBinding#durable": true, + "http://a.ml/vocabularies/apiBinding#exclusive": false, + "http://a.ml/vocabularies/apiBinding#autoDelete": true, + "http://a.ml/vocabularies/document-source-maps#sources": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/synthesized-field/element_0" + } + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_4" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_2" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_0" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_1" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_3" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings", + "http://a.ml/vocabularies/document-source-maps#value": "[(9,0)-(21,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#bindings", + "http://a.ml/vocabularies/document-source-maps#value": "[(9,0)-(21,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_4" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_2" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_0" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_1" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_3" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map", + "@type": [ + "http://a.ml/vocabularies/document-source-maps#SourceMap" + ], + "http://a.ml/vocabularies/document-source-maps#lexical": [ + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_4" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_2" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_0" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_1" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_3" + } + ] + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/synthesized-field/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#is", + "http://a.ml/vocabularies/document-source-maps#value": "true" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_4", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#bindingVersion", + "http://a.ml/vocabularies/document-source-maps#value": "[(10,8)-(11,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010", + "http://a.ml/vocabularies/document-source-maps#value": "[(9,6)-(21,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#type", + "http://a.ml/vocabularies/document-source-maps#value": "[(9,6)-(9,10)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#queue", + "http://a.ml/vocabularies/document-source-maps#value": "[(16,8)-(21,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#exchange", + "http://a.ml/vocabularies/document-source-maps#value": "[(11,8)-(16,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_4", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#durable", + "http://a.ml/vocabularies/document-source-maps#value": "[(14,10)-(15,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010", + "http://a.ml/vocabularies/document-source-maps#value": "[(11,17)-(16,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#autoDelete", + "http://a.ml/vocabularies/document-source-maps#value": "[(15,10)-(16,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#type", + "http://a.ml/vocabularies/document-source-maps#value": "[(13,10)-(14,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/core#name", + "http://a.ml/vocabularies/document-source-maps#value": "[(12,10)-(13,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_4", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#exclusive", + "http://a.ml/vocabularies/document-source-maps#value": "[(19,10)-(20,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010", + "http://a.ml/vocabularies/document-source-maps#value": "[(16,14)-(21,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_0", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#autoDelete", + "http://a.ml/vocabularies/document-source-maps#value": "[(20,10)-(21,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#durable", + "http://a.ml/vocabularies/document-source-maps#value": "[(18,10)-(19,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/core#name", + "http://a.ml/vocabularies/document-source-maps#value": "[(17,10)-(18,0)]" + }, + { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml", + "@type": [ + "http://a.ml/vocabularies/document#Document", + "http://a.ml/vocabularies/document#Fragment", + "http://a.ml/vocabularies/document#Module", + "http://a.ml/vocabularies/document#Unit" + ], + "http://a.ml/vocabularies/document#encodes": { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/async-api" + }, + "http://a.ml/vocabularies/document#root": true, + "http://a.ml/vocabularies/document#processingData": { + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml#/BaseUnitProcessingData" + } + } + ] +} diff --git a/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml b/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml new file mode 100644 index 0000000000..909cd6503a --- /dev/null +++ b/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-010.yaml @@ -0,0 +1,20 @@ +asyncapi: '2.0.0' +info: + title: Amqp channel binding + version: '1.0.0' + +channels: + some-channel: + bindings: + amqp: + bindingVersion: 0.1.0 + exchange: + name: some name + type: topic + durable: false + autoDelete: true + queue: + name: somename + durable: true + exclusive: false + autoDelete: true diff --git a/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.expanded.jsonld b/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.expanded.jsonld similarity index 79% rename from amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.expanded.jsonld rename to amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.expanded.jsonld index 3515a793ec..34c7a6e7ea 100644 --- a/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.expanded.jsonld +++ b/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.expanded.jsonld @@ -1,6 +1,6 @@ [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml", "@type": [ "http://a.ml/vocabularies/document#Document", "http://a.ml/vocabularies/document#Fragment", @@ -9,7 +9,7 @@ ], "http://a.ml/vocabularies/document#encodes": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api", "@type": [ "http://a.ml/vocabularies/apiContract#AsyncAPI", "http://a.ml/vocabularies/apiContract#API", @@ -28,7 +28,7 @@ ], "http://a.ml/vocabularies/apiContract#endpoint": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel", "@type": [ "http://a.ml/vocabularies/apiContract#EndPoint", "http://a.ml/vocabularies/document#DomainElement" @@ -40,16 +40,16 @@ ], "http://a.ml/vocabularies/apiBinding#binding": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings", "@type": [ "http://a.ml/vocabularies/apiBinding#ChannelBindings", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding020", "http://a.ml/vocabularies/apiBinding#ChannelBinding", "http://a.ml/vocabularies/document#DomainElement" ], @@ -60,9 +60,9 @@ ], "http://a.ml/vocabularies/apiBinding#exchange": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelExchange", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelExchange020", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/core#name": [ @@ -92,13 +92,13 @@ ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_5", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_5", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#autoDelete" @@ -111,10 +111,10 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_3", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_3", "http://a.ml/vocabularies/document-source-maps#element": [ { - "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange" + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020" } ], "http://a.ml/vocabularies/document-source-maps#value": [ @@ -124,7 +124,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#durable" @@ -137,7 +137,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#vhost" @@ -150,7 +150,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/core#name" @@ -163,7 +163,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_4", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_4", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#type" @@ -182,9 +182,9 @@ ], "http://a.ml/vocabularies/apiBinding#queue": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue020", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/core#name": [ @@ -214,13 +214,13 @@ ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_5", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_5", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#autoDelete" @@ -233,20 +233,20 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_3", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_3", "http://a.ml/vocabularies/document-source-maps#element": [ { - "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue" + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020" } ], "http://a.ml/vocabularies/document-source-maps#value": [ { - "@value": "[(17,14)-(22,27)]" + "@value": "[(17,14)-(23,0)]" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#exclusive" @@ -259,7 +259,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#vhost" @@ -267,12 +267,12 @@ ], "http://a.ml/vocabularies/document-source-maps#value": [ { - "@value": "[(22,10)-(22,27)]" + "@value": "[(22,10)-(23,0)]" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/core#name" @@ -285,7 +285,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_4", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_4", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#durable" @@ -304,7 +304,7 @@ ], "http://a.ml/vocabularies/apiBinding#bindingVersion": [ { - "@value": "31.07.92" + "@value": "0.2.0" } ], "http://a.ml/vocabularies/apiBinding#type": [ @@ -314,13 +314,13 @@ ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/synthesized-field/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/synthesized-field/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#is" @@ -335,7 +335,7 @@ ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_4", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_4", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#bindingVersion" @@ -348,20 +348,20 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": [ { - "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel" + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020" } ], "http://a.ml/vocabularies/document-source-maps#value": [ { - "@value": "[(9,6)-(22,27)]" + "@value": "[(9,6)-(23,0)]" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#type" @@ -374,7 +374,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#queue" @@ -382,12 +382,12 @@ ], "http://a.ml/vocabularies/document-source-maps#value": [ { - "@value": "[(17,8)-(22,27)]" + "@value": "[(17,8)-(23,0)]" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_3", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_3", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#exchange" @@ -406,26 +406,26 @@ ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": [ { - "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings" + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings" } ], "http://a.ml/vocabularies/document-source-maps#value": [ { - "@value": "[(9,0)-(22,27)]" + "@value": "[(9,0)-(23,0)]" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#bindings" @@ -433,7 +433,7 @@ ], "http://a.ml/vocabularies/document-source-maps#value": [ { - "@value": "[(9,0)-(22,27)]" + "@value": "[(9,0)-(23,0)]" } ] } @@ -444,26 +444,26 @@ ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": [ { - "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel" + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel" } ], "http://a.ml/vocabularies/document-source-maps#value": [ { - "@value": "[(7,2)-(22,27)]" + "@value": "[(7,2)-(23,0)]" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#binding" @@ -471,7 +471,7 @@ ], "http://a.ml/vocabularies/document-source-maps#value": [ { - "@value": "[(8,4)-(22,27)]" + "@value": "[(8,4)-(23,0)]" } ] } @@ -482,13 +482,13 @@ ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map/lexical/element_3", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map/lexical/element_3", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/core#version" @@ -501,7 +501,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/core#name" @@ -514,7 +514,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiContract#endpoint" @@ -522,20 +522,20 @@ ], "http://a.ml/vocabularies/document-source-maps#value": [ { - "@value": "[(6,0)-(22,27)]" + "@value": "[(6,0)-(23,0)]" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": [ { - "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api" + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api" } ], "http://a.ml/vocabularies/document-source-maps#value": [ { - "@value": "[(1,0)-(22,27)]" + "@value": "[(1,0)-(23,0)]" } ] } @@ -551,7 +551,7 @@ ], "http://a.ml/vocabularies/document#processingData": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/BaseUnitProcessingData", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/BaseUnitProcessingData", "@type": [ "http://a.ml/vocabularies/document#APIContractProcessingData" ], diff --git a/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.flattened.jsonld b/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.flattened.jsonld similarity index 58% rename from amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.flattened.jsonld rename to amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.flattened.jsonld index c9a8fad93e..404b45174e 100644 --- a/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.flattened.jsonld +++ b/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.flattened.jsonld @@ -1,7 +1,7 @@ { "@graph": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/BaseUnitProcessingData", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/BaseUnitProcessingData", "@type": [ "http://a.ml/vocabularies/document#APIContractProcessingData" ], @@ -9,7 +9,7 @@ "http://a.ml/vocabularies/document#sourceSpec": "ASYNC 2.0" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api", "@type": [ "http://a.ml/vocabularies/apiContract#AsyncAPI", "http://a.ml/vocabularies/apiContract#API", @@ -20,152 +20,152 @@ "http://a.ml/vocabularies/core#version": "1.0.0", "http://a.ml/vocabularies/apiContract#endpoint": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel" } ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel", "@type": [ "http://a.ml/vocabularies/apiContract#EndPoint", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/apiContract#path": "some-channel", "http://a.ml/vocabularies/apiBinding#binding": { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings" }, "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/source-map" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/source-map" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map/lexical/element_3" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map/lexical/element_3" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map/lexical/element_1" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map/lexical/element_1" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map/lexical/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map/lexical/element_0" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map/lexical/element_2" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map/lexical/element_2" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings", "@type": [ "http://a.ml/vocabularies/apiBinding#ChannelBindings", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020" } ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_1" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_1" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_0" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map/lexical/element_3", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map/lexical/element_3", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/core#version", "http://a.ml/vocabularies/document-source-maps#value": "[(4,2)-(6,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/core#name", "http://a.ml/vocabularies/document-source-maps#value": "[(3,2)-(4,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiContract#endpoint", - "http://a.ml/vocabularies/document-source-maps#value": "[(6,0)-(22,27)]" + "http://a.ml/vocabularies/document-source-maps#value": "[(6,0)-(23,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/source-map/lexical/element_2", - "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api", - "http://a.ml/vocabularies/document-source-maps#value": "[(1,0)-(22,27)]" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api", + "http://a.ml/vocabularies/document-source-maps#value": "[(1,0)-(23,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding020", "http://a.ml/vocabularies/apiBinding#ChannelBinding", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/apiBinding#is": "routingKey", "http://a.ml/vocabularies/apiBinding#exchange": { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020" }, "http://a.ml/vocabularies/apiBinding#queue": { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020" }, - "http://a.ml/vocabularies/apiBinding#bindingVersion": "31.07.92", + "http://a.ml/vocabularies/apiBinding#bindingVersion": "0.2.0", "http://a.ml/vocabularies/apiBinding#type": "amqp", "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_1" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_1" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_0" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_1", - "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel", - "http://a.ml/vocabularies/document-source-maps#value": "[(7,2)-(22,27)]" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel", + "http://a.ml/vocabularies/document-source-maps#value": "[(7,2)-(23,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#binding", - "http://a.ml/vocabularies/document-source-maps#value": "[(8,4)-(22,27)]" + "http://a.ml/vocabularies/document-source-maps#value": "[(8,4)-(23,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelExchange", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelExchange020", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/core#name": "some name", @@ -175,14 +175,14 @@ "http://a.ml/vocabularies/apiBinding#vhost": "/some-some", "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue020", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/core#name": "somename", @@ -192,192 +192,192 @@ "http://a.ml/vocabularies/apiBinding#vhost": "/some-some", "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/synthesized-field/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/synthesized-field/element_0" } ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_4" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_4" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_2" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_2" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_0" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_1" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_1" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_3" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_3" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_1", - "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings", - "http://a.ml/vocabularies/document-source-maps#value": "[(9,0)-(22,27)]" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings", + "http://a.ml/vocabularies/document-source-maps#value": "[(9,0)-(23,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#bindings", - "http://a.ml/vocabularies/document-source-maps#value": "[(9,0)-(22,27)]" + "http://a.ml/vocabularies/document-source-maps#value": "[(9,0)-(23,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_5" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_5" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_3" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_3" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_1" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_1" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_0" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_2" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_2" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_4" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_4" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_5" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_5" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_3" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_3" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_1" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_1" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_0" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_2" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_2" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_4" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_4" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/synthesized-field/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/synthesized-field/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#is", "http://a.ml/vocabularies/document-source-maps#value": "true" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_4", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_4", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#bindingVersion", "http://a.ml/vocabularies/document-source-maps#value": "[(10,8)-(11,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_2", - "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel", - "http://a.ml/vocabularies/document-source-maps#value": "[(9,6)-(22,27)]" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020", + "http://a.ml/vocabularies/document-source-maps#value": "[(9,6)-(23,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#type", "http://a.ml/vocabularies/document-source-maps#value": "[(9,6)-(9,10)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#queue", - "http://a.ml/vocabularies/document-source-maps#value": "[(17,8)-(22,27)]" + "http://a.ml/vocabularies/document-source-maps#value": "[(17,8)-(23,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_3", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/source-map/lexical/element_3", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#exchange", "http://a.ml/vocabularies/document-source-maps#value": "[(11,8)-(17,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_5", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_5", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#autoDelete", "http://a.ml/vocabularies/document-source-maps#value": "[(15,10)-(16,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_3", - "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020", "http://a.ml/vocabularies/document-source-maps#value": "[(11,17)-(17,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#durable", "http://a.ml/vocabularies/document-source-maps#value": "[(14,10)-(15,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#vhost", "http://a.ml/vocabularies/document-source-maps#value": "[(16,10)-(17,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/core#name", "http://a.ml/vocabularies/document-source-maps#value": "[(12,10)-(13,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-exchange/source-map/lexical/element_4", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020/source-map/lexical/element_4", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#type", "http://a.ml/vocabularies/document-source-maps#value": "[(13,10)-(14,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_5", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_5", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#autoDelete", "http://a.ml/vocabularies/document-source-maps#value": "[(21,10)-(22,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_3", - "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue", - "http://a.ml/vocabularies/document-source-maps#value": "[(17,14)-(22,27)]" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_3", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020", + "http://a.ml/vocabularies/document-source-maps#value": "[(17,14)-(23,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#exclusive", "http://a.ml/vocabularies/document-source-maps#value": "[(20,10)-(21,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#vhost", - "http://a.ml/vocabularies/document-source-maps#value": "[(22,10)-(22,27)]" + "http://a.ml/vocabularies/document-source-maps#value": "[(22,10)-(23,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/core#name", "http://a.ml/vocabularies/document-source-maps#value": "[(18,10)-(19,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_4", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020/source-map/lexical/element_4", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#durable", "http://a.ml/vocabularies/document-source-maps#value": "[(19,10)-(20,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml", "@type": [ "http://a.ml/vocabularies/document#Document", "http://a.ml/vocabularies/document#Fragment", @@ -385,11 +385,11 @@ "http://a.ml/vocabularies/document#Unit" ], "http://a.ml/vocabularies/document#encodes": { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/async-api" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/async-api" }, "http://a.ml/vocabularies/document#root": true, "http://a.ml/vocabularies/document#processingData": { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml#/BaseUnitProcessingData" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml#/BaseUnitProcessingData" } } ] diff --git a/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml b/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml similarity index 86% rename from amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml rename to amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml index 497c154bf5..5853d6836c 100644 --- a/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding.yaml +++ b/amf-cli/shared/src/test/resources/validations/async20/amqp-channel-binding-020.yaml @@ -7,7 +7,7 @@ channels: some-channel: bindings: amqp: - bindingVersion: 31.07.92 + bindingVersion: 0.2.0 exchange: name: some name type: topic @@ -19,4 +19,4 @@ channels: durable: true exclusive: false autoDelete: true - vhost: /some-some \ No newline at end of file + vhost: /some-some diff --git a/amf-cli/shared/src/test/resources/validations/async20/rpc-server.expanded.jsonld b/amf-cli/shared/src/test/resources/validations/async20/rpc-server.expanded.jsonld index d3be6c355f..4734d0d4d2 100644 --- a/amf-cli/shared/src/test/resources/validations/async20/rpc-server.expanded.jsonld +++ b/amf-cli/shared/src/test/resources/validations/async20/rpc-server.expanded.jsonld @@ -1078,9 +1078,9 @@ ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding010", "http://a.ml/vocabularies/apiBinding#ChannelBinding", "http://a.ml/vocabularies/document#DomainElement" ], @@ -1091,9 +1091,9 @@ ], "http://a.ml/vocabularies/apiBinding#queue": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue010", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/apiBinding#exclusive": [ @@ -1101,38 +1101,18 @@ "@value": true } ], - "http://a.ml/vocabularies/apiBinding#vhost": [ - { - "@value": "/" - } - ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], - "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ - { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/synthesized-field/element_0", - "http://a.ml/vocabularies/document-source-maps#element": [ - { - "@value": "http://a.ml/vocabularies/apiBinding#vhost" - } - ], - "http://a.ml/vocabularies/document-source-maps#value": [ - { - "@value": "true" - } - ] - } - ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": [ { - "@value": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue" + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010" } ], "http://a.ml/vocabularies/document-source-maps#value": [ @@ -1142,7 +1122,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#exclusive" @@ -1171,13 +1151,13 @@ ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/synthesized-field/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/synthesized-field/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#bindingVersion" @@ -1192,7 +1172,7 @@ ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_3", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_3", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#queue" @@ -1205,7 +1185,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#is" @@ -1218,7 +1198,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#type" @@ -1231,10 +1211,10 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": [ { - "@value": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel" + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010" } ], "http://a.ml/vocabularies/document-source-maps#value": [ @@ -2313,9 +2293,9 @@ ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding010", "http://a.ml/vocabularies/apiBinding#ChannelBinding", "http://a.ml/vocabularies/document#DomainElement" ], @@ -2326,9 +2306,9 @@ ], "http://a.ml/vocabularies/apiBinding#queue": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue010", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/apiBinding#durable": [ @@ -2336,38 +2316,18 @@ "@value": false } ], - "http://a.ml/vocabularies/apiBinding#vhost": [ - { - "@value": "/" - } - ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], - "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ - { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/synthesized-field/element_0", - "http://a.ml/vocabularies/document-source-maps#element": [ - { - "@value": "http://a.ml/vocabularies/apiBinding#vhost" - } - ], - "http://a.ml/vocabularies/document-source-maps#value": [ - { - "@value": "true" - } - ] - } - ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": [ { - "@value": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue" + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010" } ], "http://a.ml/vocabularies/document-source-maps#value": [ @@ -2377,7 +2337,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#durable" @@ -2406,13 +2366,13 @@ ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/synthesized-field/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/synthesized-field/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#bindingVersion" @@ -2427,7 +2387,7 @@ ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_3", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_3", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#queue" @@ -2440,7 +2400,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#is" @@ -2453,7 +2413,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#type" @@ -2466,10 +2426,10 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": [ { - "@value": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel" + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010" } ], "http://a.ml/vocabularies/document-source-maps#value": [ diff --git a/amf-cli/shared/src/test/resources/validations/async20/rpc-server.flattened.jsonld b/amf-cli/shared/src/test/resources/validations/async20/rpc-server.flattened.jsonld index 23f9e29ec3..549127d2e1 100644 --- a/amf-cli/shared/src/test/resources/validations/async20/rpc-server.flattened.jsonld +++ b/amf-cli/shared/src/test/resources/validations/async20/rpc-server.flattened.jsonld @@ -208,7 +208,7 @@ ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010" } ], "http://a.ml/vocabularies/document-source-maps#sources": [ @@ -265,7 +265,7 @@ ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010" } ], "http://a.ml/vocabularies/document-source-maps#sources": [ @@ -455,21 +455,21 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding010", "http://a.ml/vocabularies/apiBinding#ChannelBinding", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/apiBinding#is": "queue", "http://a.ml/vocabularies/apiBinding#queue": { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010" }, "http://a.ml/vocabularies/apiBinding#bindingVersion": "latest", "http://a.ml/vocabularies/apiBinding#type": "amqp", "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map" } ] }, @@ -550,21 +550,21 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding010", "http://a.ml/vocabularies/apiBinding#ChannelBinding", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/apiBinding#is": "queue", "http://a.ml/vocabularies/apiBinding#queue": { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010" }, "http://a.ml/vocabularies/apiBinding#bindingVersion": "latest", "http://a.ml/vocabularies/apiBinding#type": "amqp", "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map" } ] }, @@ -738,41 +738,40 @@ "http://a.ml/vocabularies/document-source-maps#value": "[(18,6)-(22,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue010", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/apiBinding#exclusive": true, - "http://a.ml/vocabularies/apiBinding#vhost": "/", "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/synthesized-field/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/synthesized-field/element_0" } ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_3" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_3" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_1" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_1" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_0" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_2" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_2" } ] }, @@ -870,41 +869,40 @@ "http://a.ml/vocabularies/document-source-maps#value": "[(49,4)-(65,23)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue", + "http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue010", "http://a.ml/vocabularies/document#DomainElement" ], "http://a.ml/vocabularies/apiBinding#durable": false, - "http://a.ml/vocabularies/apiBinding#vhost": "/", "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/synthesized-field/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/synthesized-field/element_0" } ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_3" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_3" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_1" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_1" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_0" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_2" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_2" } ] }, @@ -1036,47 +1034,42 @@ "http://a.ml/vocabularies/document-source-maps#value": "[(19,8)-(22,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], - "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ - { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/synthesized-field/element_0" - } - ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_1" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_1" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_0" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/synthesized-field/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/synthesized-field/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#bindingVersion", "http://a.ml/vocabularies/document-source-maps#value": "true" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_3", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_3", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#queue", "http://a.ml/vocabularies/document-source-maps#value": "[(25,8)-(27,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#is", "http://a.ml/vocabularies/document-source-maps#value": "[(24,8)-(25,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#type", "http://a.ml/vocabularies/document-source-maps#value": "[(23,6)-(23,10)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_2", - "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010", "http://a.ml/vocabularies/document-source-maps#value": "[(23,6)-(27,0)]" }, { @@ -1180,47 +1173,42 @@ "http://a.ml/vocabularies/document-source-maps#value": "[(52,0)-(65,23)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], - "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ - { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/synthesized-field/element_0" - } - ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_1" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_1" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_0" } ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/synthesized-field/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/synthesized-field/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#bindingVersion", "http://a.ml/vocabularies/document-source-maps#value": "true" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_3", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_3", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#queue", "http://a.ml/vocabularies/document-source-maps#value": "[(47,8)-(49,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#is", "http://a.ml/vocabularies/document-source-maps#value": "[(46,8)-(47,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#type", "http://a.ml/vocabularies/document-source-maps#value": "[(45,6)-(45,10)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/source-map/lexical/element_2", - "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/source-map/lexical/element_2", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010", "http://a.ml/vocabularies/document-source-maps#value": "[(45,6)-(49,0)]" }, { @@ -1312,17 +1300,12 @@ "http://a.ml/vocabularies/document-source-maps#value": "[(30,8)-(32,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/synthesized-field/element_0", - "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#vhost", - "http://a.ml/vocabularies/document-source-maps#value": "true" - }, - { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_1", - "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010", "http://a.ml/vocabularies/document-source-maps#value": "[(25,14)-(27,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#exclusive", "http://a.ml/vocabularies/document-source-maps#value": "[(26,10)-(27,0)]" }, @@ -1427,17 +1410,12 @@ "http://a.ml/vocabularies/document-source-maps#value": "[(53,0)-(55,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/synthesized-field/element_0", - "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#vhost", - "http://a.ml/vocabularies/document-source-maps#value": "true" - }, - { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_1", - "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010", "http://a.ml/vocabularies/document-source-maps#value": "[(47,14)-(49,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel/amqp091-queue/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/rpc_queue/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#durable", "http://a.ml/vocabularies/document-source-maps#value": "[(48,10)-(49,0)]" }, diff --git a/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-010.yaml b/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-010.yaml new file mode 100644 index 0000000000..db57d2dccb --- /dev/null +++ b/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-010.yaml @@ -0,0 +1,22 @@ +asyncapi: '2.0.0' +info: + title: Amqp channel binding + version: '1.0.0' + +channels: + some-channel: + bindings: + amqp: + bindingVersion: 0.1.0 + exchange: + name: some name + type: topic + durable: false + autoDelete: true + vhost: /some-some # vhost is added on 0.2.0, not valid here + queue: + name: somename + durable: true + exclusive: false + autoDelete: true + vhost: /some-some # vhost is added on 0.2.0, not valid here diff --git a/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-020.yaml b/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-020.yaml new file mode 100644 index 0000000000..2da2ac6f65 --- /dev/null +++ b/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-020.yaml @@ -0,0 +1,24 @@ +asyncapi: '2.0.0' +info: + title: Amqp channel binding + version: '1.0.0' + +channels: + some-channel: + bindings: + amqp: + bindingVersion: 0.2.0 + exchange: + name: some name + type: topic + durable: false + autoDelete: true + vhost: /some-some + invalidKey: should throw error + queue: + name: somename + durable: true + exclusive: false + autoDelete: true + vhost: /some-some + invalidKey: should throw error diff --git a/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-020-invalid.yaml b/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-020-invalid.yaml new file mode 100644 index 0000000000..2da2ac6f65 --- /dev/null +++ b/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-020-invalid.yaml @@ -0,0 +1,24 @@ +asyncapi: '2.0.0' +info: + title: Amqp channel binding + version: '1.0.0' + +channels: + some-channel: + bindings: + amqp: + bindingVersion: 0.2.0 + exchange: + name: some name + type: topic + durable: false + autoDelete: true + vhost: /some-some + invalidKey: should throw error + queue: + name: somename + durable: true + exclusive: false + autoDelete: true + vhost: /some-some + invalidKey: should throw error diff --git a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-010.report b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-010.report new file mode 100644 index 0000000000..4aa8f10c44 --- /dev/null +++ b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-010.report @@ -0,0 +1,22 @@ +ModelId: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-010.yaml +Profile: +Conforms: false +Number of results: 2 + +Level: Violation + +- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape + Message: Property 'vhost' not supported in a ASYNC 2.0 amqpExchangeChannelBinding010 node + Severity: Violation + Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010 + Property: + Range: [(16,10)-(17,0)] + Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-010.yaml + +- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape + Message: Property 'vhost' not supported in a ASYNC 2.0 amqpQueueChannelBinding010 node + Severity: Violation + Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-010.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010 + Property: + Range: [(22,10)-(23,0)] + Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-010.yaml diff --git a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-020-invalid.report b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-020-invalid.report new file mode 100644 index 0000000000..390d4e2ce1 --- /dev/null +++ b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-020-invalid.report @@ -0,0 +1,22 @@ +ModelId: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-020-invalid.yaml +Profile: +Conforms: false +Number of results: 2 + +Level: Violation + +- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape + Message: Property 'invalidKey' not supported in a ASYNC 2.0 amqpExchangeChannelBinding020 node + Severity: Violation + Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-020-invalid.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-exchange-020 + Property: + Range: [(17,10)-(18,0)] + Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-020-invalid.yaml + +- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape + Message: Property 'invalidKey' not supported in a ASYNC 2.0 amqpQueueChannelBinding020 node + Severity: Violation + Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-020-invalid.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-020/amqp091-queue-020 + Property: + Range: [(24,10)-(25,0)] + Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-020-invalid.yaml diff --git a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-channel-binding-is-value.report b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-channel-binding-is-value.report index 41d0de7117..3a59d92548 100644 --- a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-channel-binding-is-value.report +++ b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-channel-binding-is-value.report @@ -5,10 +5,10 @@ Number of results: 1 Level: Violation -- Constraint: http://a.ml/vocabularies/amf/parser#Amqp091ChannelBinding-is-in +- Constraint: http://a.ml/vocabularies/amf/parser#Amqp091ChannelBinding010-is-in Message: 'is' for amqp 0.9.1 channel binding object must be one of 'queue' or 'routingKey' Severity: Violation - Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-is-value.yaml#/async-api/endpoint/%2Finvalid/channel-bindings/bindings/amqp091-channel + Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-is-value.yaml#/async-api/endpoint/%2Finvalid/channel-bindings/bindings/amqp091-channel-010 Property: http://a.ml/vocabularies/apiBinding#is Range: [(17,12)-(17,19)] Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-is-value.yaml diff --git a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-channel-binding-name-max-length.report b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-channel-binding-name-max-length.report index 10183f5fb1..7986cccb17 100644 --- a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-channel-binding-name-max-length.report +++ b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-channel-binding-name-max-length.report @@ -5,18 +5,18 @@ Number of results: 2 Level: Violation -- Constraint: http://a.ml/vocabularies/amf/parser#Amqp091ChannelQueue-name-maxLength +- Constraint: http://a.ml/vocabularies/amf/parser#Amqp091ChannelQueue010-name-maxLength Message: Amqp channel binding name can't be longer than 255 characters Severity: Violation - Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-name-max-length.yaml#/async-api/endpoint/%2FinvalidName/channel-bindings/bindings/amqp091-channel/amqp091-queue + Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-name-max-length.yaml#/async-api/endpoint/%2FinvalidName/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010 Property: http://a.ml/vocabularies/core#name Range: [(23,16)-(28,0)] Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-name-max-length.yaml -- Constraint: http://a.ml/vocabularies/amf/parser#Amqp091ChannelExchange-name-maxLength +- Constraint: http://a.ml/vocabularies/amf/parser#Amqp091ChannelExchange010-name-maxLength Message: Amqp channel binding name can't be longer than 255 characters Severity: Violation - Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-name-max-length.yaml#/async-api/endpoint/%2FanotherInvalidName/channel-bindings/bindings/amqp091-channel/amqp091-exchange + Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-name-max-length.yaml#/async-api/endpoint/%2FanotherInvalidName/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010 Property: http://a.ml/vocabularies/core#name Range: [(33,16)-(38,0)] Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-channel-binding-name-max-length.yaml diff --git a/amf-cli/shared/src/test/scala/amf/emit/Async20CycleTest.scala b/amf-cli/shared/src/test/scala/amf/emit/Async20CycleTest.scala index 28b8d9b06a..77aefb4a7d 100644 --- a/amf-cli/shared/src/test/scala/amf/emit/Async20CycleTest.scala +++ b/amf-cli/shared/src/test/scala/amf/emit/Async20CycleTest.scala @@ -35,7 +35,16 @@ class Async20CycleTest extends FunSuiteCycleTests { "empty-binding-and-annotations.yaml", "empty-binding-and-annotations.%s" ), - FixtureData("Amqp 0.9.1 channel binding", "amqp-channel-binding.yaml", "amqp-channel-binding.%s"), + FixtureData( + "Amqp 0.9.1 channel binding version 0.1.0", + "amqp-channel-binding-010.yaml", + "amqp-channel-binding-010.%s" + ), + FixtureData( + "Amqp 0.9.1 channel binding version 0.2.0", + "amqp-channel-binding-020.yaml", + "amqp-channel-binding-020.%s" + ), FixtureData("Amqp 0.9.1 message binding", "amqp-message-binding.yaml", "amqp-message-binding.%s"), FixtureData("Amqp 0.9.1 operation binding", "amqp-operation-binding.yaml", "amqp-operation-binding.%s"), FixtureData("Http message binding", "http-message-binding.yaml", "http-message-binding.%s"), @@ -84,9 +93,14 @@ class Async20CycleTest extends FunSuiteCycleTests { "bindings/empty-binding-and-annotations.yaml" ), FixtureData( - "Amqp 0.9.1 channel binding", - "bindings/amqp-channel-binding.yaml", - "bindings/amqp-channel-binding.yaml" + "Amqp 0.9.1 channel binding version 0.1.0", + "bindings/amqp-channel-binding-010.yaml", + "bindings/amqp-channel-binding-010.yaml" + ), + FixtureData( + "Amqp 0.9.1 channel binding version 0.2.0", + "bindings/amqp-channel-binding-020.yaml", + "bindings/amqp-channel-binding-020.yaml" ), FixtureData( "Amqp 0.9.1 message binding", diff --git a/amf-cli/shared/src/test/scala/amf/validation/Async20UniquePlatformUnitValidationsTest.scala b/amf-cli/shared/src/test/scala/amf/validation/Async20UniquePlatformUnitValidationsTest.scala index 566a5bf7aa..38f1962a36 100644 --- a/amf-cli/shared/src/test/scala/amf/validation/Async20UniquePlatformUnitValidationsTest.scala +++ b/amf-cli/shared/src/test/scala/amf/validation/Async20UniquePlatformUnitValidationsTest.scala @@ -419,4 +419,12 @@ class Async20UniquePlatformUnitValidationsTest extends UniquePlatformReportGenTe test("Async inter components references") { validate("message-references.yaml") } + + test("Async Amqp 0.1.0 Closed Shape validation") { + validate("amqp-binding-010.yaml", Some("amqp-binding-010.report")) + } + + test("Async Amqp 0.2.0 Closed Shape validation") { + validate("amqp-channel-binding-020-invalid.yaml", Some("amqp-binding-020-invalid.report")) + } } diff --git a/amf-cli/shared/src/test/scala/amf/validation/ValidAsyncModelParserTest.scala b/amf-cli/shared/src/test/scala/amf/validation/ValidAsyncModelParserTest.scala index 941d20ffd4..1911cdbf80 100644 --- a/amf-cli/shared/src/test/scala/amf/validation/ValidAsyncModelParserTest.scala +++ b/amf-cli/shared/src/test/scala/amf/validation/ValidAsyncModelParserTest.scala @@ -27,7 +27,7 @@ class ValidAsyncModelParserTest extends ValidModelTest { } test("Amqp 0.9.1 channel binding") { - checkValid("amqp-channel-binding.yaml") + checkValid("amqp-channel-binding-020.yaml") } test("Amqp 0.9.1 message binding") { @@ -74,8 +74,12 @@ class ValidAsyncModelParserTest extends ValidModelTest { checkValid("rpc-server.yaml") } - test("Amqp channel binding") { - checkValid("amqp-channel-binding.yaml") + test("Amqp channel binding version 0.1.0") { + checkValid("amqp-channel-binding-010.yaml") + } + + test("Amqp channel binding version 0.2.0") { + checkValid("amqp-channel-binding-020.yaml") } test("References to message defined in components") { diff --git a/documentation/model.md b/documentation/model.md index e2c29d0b56..578057ab7b 100644 --- a/documentation/model.md +++ b/documentation/model.md @@ -10,10 +10,16 @@ AMF Model Documentation * [AbstractRequest](#abstractrequest) * [AbstractResponse](#abstractresponse) * [Amqp091ChannelBinding](#amqp091channelbinding) +* [Amqp091ChannelBinding010](#amqp091channelbinding010) +* [Amqp091ChannelBinding020](#amqp091channelbinding020) * [Amqp091ChannelExchange](#amqp091channelexchange) +* [Amqp091ChannelExchange010](#amqp091channelexchange010) +* [Amqp091ChannelExchange020](#amqp091channelexchange020) * [Amqp091MessageBinding](#amqp091messagebinding) * [Amqp091OperationBinding](#amqp091operationbinding) * [Amqp091Queue](#amqp091queue) +* [Amqp091Queue010](#amqp091queue010) +* [Amqp091Queue020](#amqp091queue020) * [AnnotationMapping](#annotationmapping) * [AnnotationTypeDeclarationFragment](#annotationtypedeclarationfragment) * [AnyMapping](#anymapping) @@ -307,10 +313,70 @@ Types: | type | string | - | Binding for a corresponding known type | `http://a.ml/vocabularies/apiBinding#type` | | extends | [[DomainElement](#domainelement)] | false | Entity that is going to be extended overlaying or adding additional information The type of the relationship provide the semantics about thow the referenced and referencer elements must be combined when generating the domain model from the document model. | `http://a.ml/vocabularies/document#extends` | +## Amqp091ChannelBinding010 + +Types: +* `http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding010` +* `http://a.ml/vocabularies/apiBinding#ChannelBinding` +* `http://a.ml/vocabularies/document#DomainElement` + + | Name | Value | Sorted | Documentation | Namespace | + | ------ | ------ | ------ | ------ | ------ | + | is | string | - | Defines what type of channel is it | `http://a.ml/vocabularies/apiBinding#is` | + | exchange | [Amqp091ChannelExchange010](#amqp091channelexchange010) | - | Defines the exchange properties | `http://a.ml/vocabularies/apiBinding#exchange` | + | queue | [Amqp091Queue010](#amqp091queue010) | - | Defines the queue properties | `http://a.ml/vocabularies/apiBinding#queue` | + | bindingVersion | string | - | The version of this binding | `http://a.ml/vocabularies/apiBinding#bindingVersion` | + | type | string | - | Binding for a corresponding known type | `http://a.ml/vocabularies/apiBinding#type` | + | extends | [[DomainElement](#domainelement)] | false | Entity that is going to be extended overlaying or adding additional information The type of the relationship provide the semantics about thow the referenced and referencer elements must be combined when generating the domain model from the document model. | `http://a.ml/vocabularies/document#extends` | + +## Amqp091ChannelBinding020 + +Types: +* `http://a.ml/vocabularies/apiBinding#Amqp091ChannelBinding020` +* `http://a.ml/vocabularies/apiBinding#ChannelBinding` +* `http://a.ml/vocabularies/document#DomainElement` + + | Name | Value | Sorted | Documentation | Namespace | + | ------ | ------ | ------ | ------ | ------ | + | is | string | - | Defines what type of channel is it | `http://a.ml/vocabularies/apiBinding#is` | + | exchange | [Amqp091ChannelExchange020](#amqp091channelexchange020) | - | Defines the exchange properties | `http://a.ml/vocabularies/apiBinding#exchange` | + | queue | [Amqp091Queue020](#amqp091queue020) | - | Defines the queue properties | `http://a.ml/vocabularies/apiBinding#queue` | + | bindingVersion | string | - | The version of this binding | `http://a.ml/vocabularies/apiBinding#bindingVersion` | + | type | string | - | Binding for a corresponding known type | `http://a.ml/vocabularies/apiBinding#type` | + | extends | [[DomainElement](#domainelement)] | false | Entity that is going to be extended overlaying or adding additional information The type of the relationship provide the semantics about thow the referenced and referencer elements must be combined when generating the domain model from the document model. | `http://a.ml/vocabularies/document#extends` | + ## Amqp091ChannelExchange Types: * `http://a.ml/vocabularies/apiBinding#Amqp091ChannelExchange` +* `http://a.ml/vocabularies/document#DomainElement` + + | Name | Value | Sorted | Documentation | Namespace | + | ------ | ------ | ------ | ------ | ------ | + | name | string | - | Name of the shape | `http://a.ml/vocabularies/core#name` | + | type | string | - | The type of the exchange | `http://a.ml/vocabularies/apiBinding#type` | + | durable | boolean | - | Whether the exchange should survive broker restarts or not | `http://a.ml/vocabularies/apiBinding#durable` | + | autoDelete | boolean | - | Whether the exchange should be deleted when the last queue is unbound from it | `http://a.ml/vocabularies/apiBinding#autoDelete` | + | extends | [[DomainElement](#domainelement)] | false | Entity that is going to be extended overlaying or adding additional information The type of the relationship provide the semantics about thow the referenced and referencer elements must be combined when generating the domain model from the document model. | `http://a.ml/vocabularies/document#extends` | + +## Amqp091ChannelExchange010 + +Types: +* `http://a.ml/vocabularies/apiBinding#Amqp091ChannelExchange010` +* `http://a.ml/vocabularies/document#DomainElement` + + | Name | Value | Sorted | Documentation | Namespace | + | ------ | ------ | ------ | ------ | ------ | + | name | string | - | Name of the shape | `http://a.ml/vocabularies/core#name` | + | type | string | - | The type of the exchange | `http://a.ml/vocabularies/apiBinding#type` | + | durable | boolean | - | Whether the exchange should survive broker restarts or not | `http://a.ml/vocabularies/apiBinding#durable` | + | autoDelete | boolean | - | Whether the exchange should be deleted when the last queue is unbound from it | `http://a.ml/vocabularies/apiBinding#autoDelete` | + | extends | [[DomainElement](#domainelement)] | false | Entity that is going to be extended overlaying or adding additional information The type of the relationship provide the semantics about thow the referenced and referencer elements must be combined when generating the domain model from the document model. | `http://a.ml/vocabularies/document#extends` | + +## Amqp091ChannelExchange020 + +Types: +* `http://a.ml/vocabularies/apiBinding#Amqp091ChannelExchange020` * `http://a.ml/vocabularies/document#DomainElement` | Name | Value | Sorted | Documentation | Namespace | @@ -364,6 +430,34 @@ Types: Types: * `http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue` +* `http://a.ml/vocabularies/document#DomainElement` + + | Name | Value | Sorted | Documentation | Namespace | + | ------ | ------ | ------ | ------ | ------ | + | name | string | - | Name of the shape | `http://a.ml/vocabularies/core#name` | + | durable | boolean | - | Whether the exchange should survive broker restarts or not | `http://a.ml/vocabularies/apiBinding#durable` | + | exclusive | boolean | - | Whether the queue should be used only by one connection or not | `http://a.ml/vocabularies/apiBinding#exclusive` | + | autoDelete | boolean | - | Whether the exchange should be deleted when the last queue is unbound from it | `http://a.ml/vocabularies/apiBinding#autoDelete` | + | extends | [[DomainElement](#domainelement)] | false | Entity that is going to be extended overlaying or adding additional information The type of the relationship provide the semantics about thow the referenced and referencer elements must be combined when generating the domain model from the document model. | `http://a.ml/vocabularies/document#extends` | + +## Amqp091Queue010 + +Types: +* `http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue010` +* `http://a.ml/vocabularies/document#DomainElement` + + | Name | Value | Sorted | Documentation | Namespace | + | ------ | ------ | ------ | ------ | ------ | + | name | string | - | Name of the shape | `http://a.ml/vocabularies/core#name` | + | durable | boolean | - | Whether the exchange should survive broker restarts or not | `http://a.ml/vocabularies/apiBinding#durable` | + | exclusive | boolean | - | Whether the queue should be used only by one connection or not | `http://a.ml/vocabularies/apiBinding#exclusive` | + | autoDelete | boolean | - | Whether the exchange should be deleted when the last queue is unbound from it | `http://a.ml/vocabularies/apiBinding#autoDelete` | + | extends | [[DomainElement](#domainelement)] | false | Entity that is going to be extended overlaying or adding additional information The type of the relationship provide the semantics about thow the referenced and referencer elements must be combined when generating the domain model from the document model. | `http://a.ml/vocabularies/document#extends` | + +## Amqp091Queue020 + +Types: +* `http://a.ml/vocabularies/apiBinding#Amqp091ChannelQueue020` * `http://a.ml/vocabularies/document#DomainElement` | Name | Value | Sorted | Documentation | Namespace | From a2b33da4fbda16da194bb307a3e361ace50de693 Mon Sep 17 00:00:00 2001 From: arielmirra Date: Wed, 17 Apr 2024 15:14:59 -0300 Subject: [PATCH 2/5] W-15426401: add warning for unsupported binding versions --- .../channel/AmqpChannelBindingParser.scala | 12 +++++++++- .../definitions/ParserSideValidations.scala | 17 ++++++++++++-- .../amqp-binding-wrong-binding-version.yaml | 22 +++++++++++++++++++ .../amqp-binding-wrong-binding-version.report | 0 ...c20UniquePlatformUnitValidationsTest.scala | 4 ++++ 5 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-wrong-binding-version.yaml create mode 100644 amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-wrong-binding-version.report diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/channel/AmqpChannelBindingParser.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/channel/AmqpChannelBindingParser.scala index 00a3b45405..a1d241b656 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/channel/AmqpChannelBindingParser.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/channel/AmqpChannelBindingParser.scala @@ -21,6 +21,7 @@ import amf.apicontract.internal.metamodel.domain.bindings.{ } import amf.apicontract.internal.spec.async.parser.bindings.BindingParser import amf.apicontract.internal.spec.async.parser.context.AsyncWebApiContext +import amf.apicontract.internal.validation.definitions.ParserSideValidations.UnsupportedBindingVersionWarning import amf.core.client.scala.model.domain.{AmfScalar, DomainElement} import amf.core.internal.metamodel.Field import amf.core.internal.parser.YMapOps @@ -34,7 +35,16 @@ object AmqpChannelBindingParser extends BindingParser[Amqp091ChannelBinding] { // bindingVersion is either well defined or defaults to 0.1.0 val binding: Amqp091ChannelBinding = bindingVersion match { case "0.2.0" | "latest" => Amqp091ChannelBinding020(Annotations(entry)) - case _ => Amqp091ChannelBinding010(Annotations(entry)) + case "0.1.0" => Amqp091ChannelBinding010(Annotations(entry)) + case invalidVersion => + ctx.eh.warning( + UnsupportedBindingVersionWarning, + Amqp091ChannelBinding010(Annotations(entry)), + Some("bindingVersion"), + s"Version $invalidVersion is not supported in an Amqp091ChannelBinding", + entry.value.location + ) + Amqp091ChannelBinding010(Annotations(entry)) } val map = entry.value.as[YMap] diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/validation/definitions/ParserSideValidations.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/validation/definitions/ParserSideValidations.scala index 3e771448a2..978599cb69 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/validation/definitions/ParserSideValidations.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/validation/definitions/ParserSideValidations.scala @@ -432,6 +432,16 @@ object ParserSideValidations extends Validations { "Syntax error" ) + val UnsupportedBindingVersionWarning: ValidationSpecification = validation( + id = "unsupported-binding-version-warning", + message = "The provided binding version is not supported" + ) + + val UnsupportedBindingVersion: ValidationSpecification = validation( + id = "unsupported-binding-version", + message = "The provided binding version is not supported" + ) + override val levels: Map[String, Map[ProfileName, String]] = Map( ExclusiveLinkTargetError.id -> all(VIOLATION), OasBodyAndFormDataParameterSpecification.id -> Map( @@ -455,7 +465,8 @@ object ParserSideValidations extends Validations { InvalidPayload.id -> all(VIOLATION), ImplicitVersionParameterWithoutApiVersion.id -> all(WARNING), // TODO: should be violation InvalidVersionBaseUriParameterDefinition.id -> all(WARNING), // TODO: should be violation - HeaderMustBeObject.id -> Map(Async20Profile -> VIOLATION) + HeaderMustBeObject.id -> Map(Async20Profile -> VIOLATION), + UnsupportedBindingVersionWarning.id -> all(WARNING) ) override val validations: List[ValidationSpecification] = List( @@ -512,6 +523,8 @@ object ParserSideValidations extends Validations { InvalidStatusCode, HeaderMustBeObject, InvalidModuleType, - DuplicatedDeclaration + DuplicatedDeclaration, + UnsupportedBindingVersionWarning, + UnsupportedBindingVersion ) } diff --git a/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-wrong-binding-version.yaml b/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-wrong-binding-version.yaml new file mode 100644 index 0000000000..a529cd2dc0 --- /dev/null +++ b/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-wrong-binding-version.yaml @@ -0,0 +1,22 @@ +asyncapi: '2.0.0' +info: + title: Amqp channel binding + version: '1.0.0' + +channels: + some-channel: + bindings: + amqp: + bindingVersion: 9.9.9 # this is not a valid binding version, throws warning and defaults to 0.1.0 + exchange: + name: some name + type: topic + durable: false + autoDelete: true + vhost: /some-some # vhost is added on 0.2.0, not valid here + queue: + name: somename + durable: true + exclusive: false + autoDelete: true + vhost: /some-some # vhost is added on 0.2.0, not valid here diff --git a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-wrong-binding-version.report b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-wrong-binding-version.report new file mode 100644 index 0000000000..e69de29bb2 diff --git a/amf-cli/shared/src/test/scala/amf/validation/Async20UniquePlatformUnitValidationsTest.scala b/amf-cli/shared/src/test/scala/amf/validation/Async20UniquePlatformUnitValidationsTest.scala index 38f1962a36..770e0758d0 100644 --- a/amf-cli/shared/src/test/scala/amf/validation/Async20UniquePlatformUnitValidationsTest.scala +++ b/amf-cli/shared/src/test/scala/amf/validation/Async20UniquePlatformUnitValidationsTest.scala @@ -427,4 +427,8 @@ class Async20UniquePlatformUnitValidationsTest extends UniquePlatformReportGenTe test("Async Amqp 0.2.0 Closed Shape validation") { validate("amqp-channel-binding-020-invalid.yaml", Some("amqp-binding-020-invalid.report")) } + + test("Async Amqp wrong binding version") { + validate("amqp-binding-wrong-binding-version.yaml", Some("amqp-binding-wrong-binding-version.report")) + } } From 7b2a63ad34b8bfa460b987d509370c5425456483 Mon Sep 17 00:00:00 2001 From: arielmirra Date: Wed, 17 Apr 2024 16:11:56 -0300 Subject: [PATCH 3/5] W-15425021: add amqp operation binding version 1, 2, and 3 --- .../bindings/amqp/Amqp091ChannelBinding.scala | 6 - .../amqp/Amqp091OperationBinding.scala | 45 +++++--- .../bindings/amqp/Amqp091ChannelBinding.scala | 4 - .../amqp/Amqp091OperationBinding.scala | 109 ++++++++++++------ .../internal/convert/ApiBaseConverter.scala | 20 ++++ .../internal/convert/ApiRegister.scala | 18 ++- .../internal/entities/APIEntities.scala | 2 + .../domain/bindings/Amqp091BindingModel.scala | 94 +++++++++++---- .../AsyncApiOperationBindingsEmitter.scala | 4 +- .../Amqp091OperationBindingParser.scala | 41 ++++++- .../parser/context/syntax/Async20Syntax.scala | 14 ++- .../validation/model/APIRawValidations.scala | 23 +++- .../golden.expanded.jsonld | 4 +- .../golden.flattened.jsonld | 6 +- .../amqp-operation-binding.expanded.jsonld | 50 ++++---- .../amqp-operation-binding.flattened.jsonld | 90 +++++++-------- .../async20/amqp-operation-binding.yaml | 2 +- .../async20/rpc-server.expanded.jsonld | 16 +-- .../async20/rpc-server.flattened.jsonld | 28 ++--- .../amqp-operation-binding-030.yaml | 28 +++++ .../amqp-binding-wrong-binding-version.report | 32 +++++ .../async20/amqp-operation-binding-030.report | 24 ++++ ...amqp-operation-binding-deliveryMode.report | 4 +- .../amqp-operation-binding-expiration.report | 4 +- ...c20UniquePlatformUnitValidationsTest.scala | 4 + documentation/model.md | 46 ++++++++ 26 files changed, 512 insertions(+), 206 deletions(-) create mode 100644 amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-030.yaml create mode 100644 amf-cli/shared/src/test/resources/validations/reports/async20/amqp-operation-binding-030.report diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/model/domain/bindings/amqp/Amqp091ChannelBinding.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/model/domain/bindings/amqp/Amqp091ChannelBinding.scala index c650d45715..0131dd6cb9 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/model/domain/bindings/amqp/Amqp091ChannelBinding.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/model/domain/bindings/amqp/Amqp091ChannelBinding.scala @@ -115,12 +115,6 @@ case class Amqp091ChannelBinding010(override private[amf] val _internal: Interna @JSExportTopLevel("Amqp091ChannelBinding010") def this() = this(InternalAmqp091ChannelBinding010()) - override protected def bindingVersion: StrField = _internal.bindingVersion - override def withBindingVersion(bindingVersion: String): this.type = { - _internal.withBindingVersion(bindingVersion) - this - } - override def exchange: Amqp091ChannelExchange010 = _internal.exchange override def queue: Amqp091Queue010 = _internal.queue diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/model/domain/bindings/amqp/Amqp091OperationBinding.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/model/domain/bindings/amqp/Amqp091OperationBinding.scala index 43ff3b4e1d..d705244596 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/model/domain/bindings/amqp/Amqp091OperationBinding.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/platform/model/domain/bindings/amqp/Amqp091OperationBinding.scala @@ -2,7 +2,9 @@ package amf.apicontract.client.platform.model.domain.bindings.amqp import amf.apicontract.client.platform.model.domain.bindings.{BindingVersion, OperationBinding} import amf.apicontract.client.scala.model.domain.bindings.amqp.{ - Amqp091OperationBinding => InternalAmqp091OperationBinding + Amqp091OperationBinding => InternalAmqp091OperationBinding, + Amqp091OperationBinding010 => InternalAmqp091OperationBinding010, + Amqp091OperationBinding030 => InternalAmqp091OperationBinding030 } import amf.apicontract.internal.convert.ApiClientConverters._ import amf.core.client.platform.model.{BoolField, IntField, StrField} @@ -10,12 +12,10 @@ import amf.core.client.platform.model.{BoolField, IntField, StrField} import scala.scalajs.js.annotation.{JSExportAll, JSExportTopLevel} @JSExportAll -case class Amqp091OperationBinding(override private[amf] val _internal: InternalAmqp091OperationBinding) +abstract class Amqp091OperationBinding(override private[amf] val _internal: InternalAmqp091OperationBinding) extends OperationBinding with BindingVersion { - @JSExportTopLevel("Amqp091OperationBinding") - def this() = this(InternalAmqp091OperationBinding()) override protected def bindingVersion: StrField = _internal.bindingVersion override def withBindingVersion(bindingVersion: String): this.type = { _internal.withBindingVersion(bindingVersion) @@ -29,9 +29,9 @@ case class Amqp091OperationBinding(override private[amf] val _internal: Internal def deliveryMode: IntField = _internal.deliveryMode def mandatory: BoolField = _internal.mandatory def bcc: ClientList[StrField] = _internal.bcc.asClient - def replyTo: StrField = _internal.replyTo - def timestamp: BoolField = _internal.timestamp - def ack: BoolField = _internal.ack + + def timestamp: BoolField = _internal.timestamp + def ack: BoolField = _internal.ack def withExpiration(expiration: Int): this.type = { _internal.withExpiration(expiration) @@ -68,11 +68,6 @@ case class Amqp091OperationBinding(override private[amf] val _internal: Internal this } - def withReplyTo(replyTo: String): this.type = { - _internal.withReplyTo(replyTo) - this - } - def withTimestamp(timestamp: Boolean): this.type = { _internal.withTimestamp(timestamp) this @@ -82,6 +77,30 @@ case class Amqp091OperationBinding(override private[amf] val _internal: Internal _internal.withAck(ack) this } +} + +@JSExportAll +case class Amqp091OperationBinding010(override private[amf] val _internal: InternalAmqp091OperationBinding010) + extends Amqp091OperationBinding(_internal) { + + @JSExportTopLevel("Amqp091OperationBinding010") + def this() = this(InternalAmqp091OperationBinding010()) + + def replyTo: StrField = _internal.replyTo + def withReplyTo(replyTo: String): this.type = { + _internal.withReplyTo(replyTo) + this + } + + override def linkCopy(): Amqp091OperationBinding010 = _internal.linkCopy() +} + +@JSExportAll +case class Amqp091OperationBinding030(override private[amf] val _internal: InternalAmqp091OperationBinding030) + extends Amqp091OperationBinding(_internal) { + + @JSExportTopLevel("Amqp091OperationBinding030") + def this() = this(InternalAmqp091OperationBinding030()) - override def linkCopy(): Amqp091OperationBinding = _internal.linkCopy() + override def linkCopy(): Amqp091OperationBinding030 = _internal.linkCopy() } diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/model/domain/bindings/amqp/Amqp091ChannelBinding.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/model/domain/bindings/amqp/Amqp091ChannelBinding.scala index 31f6ab2807..2cc1cc8d83 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/model/domain/bindings/amqp/Amqp091ChannelBinding.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/model/domain/bindings/amqp/Amqp091ChannelBinding.scala @@ -72,8 +72,6 @@ class Amqp091ChannelBinding010(override val fields: Fields, override val annotat override def key: StrField = fields.field(Amqp010Model.key) - override protected def bindingVersionField: Field = BindingVersion - override def exchange: Amqp091ChannelExchange010 = fields.field(Amqp010Model.Exchange) override def queue: Amqp091Queue010 = fields.field(Amqp010Model.Queue) def withExchange(exchange: Amqp091ChannelExchange010): this.type = set(Amqp010Model.Exchange, exchange) @@ -134,8 +132,6 @@ class Amqp091ChannelBinding020(override val fields: Fields, override val annotat override def key: StrField = fields.field(Amqp020Model.key) - override protected def bindingVersionField: Field = BindingVersion - override def exchange: Amqp091ChannelExchange020 = fields.field(Amqp020Model.Exchange) override def queue: Amqp091Queue020 = fields.field(Amqp020Model.Queue) def withExchange(exchange: Amqp091ChannelExchange020): this.type = set(Amqp020Model.Exchange, exchange) diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/model/domain/bindings/amqp/Amqp091OperationBinding.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/model/domain/bindings/amqp/Amqp091OperationBinding.scala index 6c2b014f4d..ea953d31ce 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/model/domain/bindings/amqp/Amqp091OperationBinding.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/client/scala/model/domain/bindings/amqp/Amqp091OperationBinding.scala @@ -1,57 +1,92 @@ package amf.apicontract.client.scala.model.domain.bindings.amqp + import amf.core.client.scala.model.domain.{DomainElement, Linkable} import amf.core.client.scala.model.{BoolField, IntField, StrField} import amf.core.internal.metamodel.Field import amf.core.internal.parser.domain.{Annotations, Fields} -import amf.apicontract.internal.metamodel.domain.bindings.Amqp091OperationBindingModel -import amf.apicontract.internal.metamodel.domain.bindings.Amqp091OperationBindingModel._ +import amf.apicontract.internal.metamodel.domain.bindings.{ + Amqp091OperationBinding010Model => Amqp010Model, + Amqp091OperationBinding030Model => Amqp030Model, + Amqp091OperationBindingModel => BaseModel +} +import amf.apicontract.internal.metamodel.domain.bindings.BindingVersion.BindingVersion import amf.apicontract.client.scala.model.domain.bindings.{BindingVersion, OperationBinding} import amf.shapes.client.scala.model.domain.Key -class Amqp091OperationBinding(override val fields: Fields, override val annotations: Annotations) +abstract class Amqp091OperationBinding(override val fields: Fields, override val annotations: Annotations) extends OperationBinding with BindingVersion with Key { - override protected def bindingVersionField: Field = BindingVersion - override def meta: Amqp091OperationBindingModel.type = Amqp091OperationBindingModel - - override def componentId: String = "/amqp091-operation" - def expiration: IntField = fields.field(Expiration) - def userId: StrField = fields.field(UserId) - def cc: Seq[StrField] = fields.field(CC) - def priority: IntField = fields.field(Priority) - def deliveryMode: IntField = fields.field(DeliveryMode) - def mandatory: BoolField = fields.field(Mandatory) - def bcc: Seq[StrField] = fields.field(BCC) - def replyTo: StrField = fields.field(ReplyTo) - def timestamp: BoolField = fields.field(Timestamp) - def ack: BoolField = fields.field(Ack) - - def withExpiration(expiration: Int): this.type = set(Expiration, expiration) - def withUserId(userId: String): this.type = set(UserId, userId) - def withCc(cC: Seq[String]): this.type = set(CC, cC) - def withPriority(priority: Int): this.type = set(Priority, priority) - def withDeliveryMode(deliveryMode: Int): this.type = set(DeliveryMode, deliveryMode) - def withMandatory(mandatory: Boolean): this.type = set(Mandatory, mandatory) - def withBcc(bCC: Seq[String]): this.type = set(BCC, bCC) - def withReplyTo(replyTo: String): this.type = set(ReplyTo, replyTo) - def withTimestamp(timestamp: Boolean): this.type = set(Timestamp, timestamp) - def withAck(ack: Boolean): this.type = set(Ack, ack) - - override def linkCopy(): Amqp091OperationBinding = Amqp091OperationBinding().withId(id) + override def key: StrField = fields.field(BaseModel.key) + override protected def bindingVersionField: Field = BindingVersion + + def expiration: IntField = fields.field(BaseModel.Expiration) + def userId: StrField = fields.field(BaseModel.UserId) + def cc: Seq[StrField] = fields.field(BaseModel.CC) + def priority: IntField = fields.field(BaseModel.Priority) + def deliveryMode: IntField = fields.field(BaseModel.DeliveryMode) + def mandatory: BoolField = fields.field(BaseModel.Mandatory) + def bcc: Seq[StrField] = fields.field(BaseModel.BCC) + def timestamp: BoolField = fields.field(BaseModel.Timestamp) + def ack: BoolField = fields.field(BaseModel.Ack) + + def withExpiration(expiration: Int): this.type = set(BaseModel.Expiration, expiration) + def withUserId(userId: String): this.type = set(BaseModel.UserId, userId) + def withCc(cC: Seq[String]): this.type = set(BaseModel.CC, cC) + def withPriority(priority: Int): this.type = set(BaseModel.Priority, priority) + def withDeliveryMode(deliveryMode: Int): this.type = set(BaseModel.DeliveryMode, deliveryMode) + def withMandatory(mandatory: Boolean): this.type = set(BaseModel.Mandatory, mandatory) + def withBcc(bCC: Seq[String]): this.type = set(BaseModel.BCC, bCC) + def withTimestamp(timestamp: Boolean): this.type = set(BaseModel.Timestamp, timestamp) + def withAck(ack: Boolean): this.type = set(BaseModel.Ack, ack) +} + +class Amqp091OperationBinding010(override val fields: Fields, override val annotations: Annotations) + extends Amqp091OperationBinding(fields, annotations) { + + def replyTo: StrField = fields.field(Amqp010Model.ReplyTo) + def withReplyTo(replyTo: String): this.type = set(Amqp010Model.ReplyTo, replyTo) + + override def meta: Amqp010Model.type = Amqp010Model + + override def componentId: String = "/amqp091-operation-010" + + override def linkCopy(): Amqp091OperationBinding010 = Amqp091OperationBinding010().withId(id) override protected def classConstructor: (Fields, Annotations) => Linkable with DomainElement = - Amqp091OperationBinding.apply + Amqp091OperationBinding010.apply +} - override def key: StrField = fields.field(Amqp091OperationBindingModel.key) +object Amqp091OperationBinding010 { + + def apply(): Amqp091OperationBinding010 = apply(Annotations()) + + def apply(annotations: Annotations): Amqp091OperationBinding010 = apply(Fields(), annotations) + + def apply(fields: Fields, annotations: Annotations): Amqp091OperationBinding010 = + new Amqp091OperationBinding010(fields, annotations) +} + +class Amqp091OperationBinding030(override val fields: Fields, override val annotations: Annotations) + extends Amqp091OperationBinding(fields, annotations) { + override def key: StrField = fields.field(BaseModel.key) + + override def meta: Amqp030Model.type = Amqp030Model + + override def componentId: String = "/amqp091-operation-030" + + override def linkCopy(): Amqp091OperationBinding030 = Amqp091OperationBinding030().withId(id) + + override protected def classConstructor: (Fields, Annotations) => Linkable with DomainElement = + Amqp091OperationBinding030.apply } -object Amqp091OperationBinding { +object Amqp091OperationBinding030 { - def apply(): Amqp091OperationBinding = apply(Annotations()) + def apply(): Amqp091OperationBinding030 = apply(Annotations()) - def apply(annotations: Annotations): Amqp091OperationBinding = apply(Fields(), annotations) + def apply(annotations: Annotations): Amqp091OperationBinding030 = apply(Fields(), annotations) - def apply(fields: Fields, annotations: Annotations): Amqp091OperationBinding = - new Amqp091OperationBinding(fields, annotations) + def apply(fields: Fields, annotations: Annotations): Amqp091OperationBinding030 = + new Amqp091OperationBinding030(fields, annotations) } diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiBaseConverter.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiBaseConverter.scala index a4cebcd7eb..7b6b2c593f 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiBaseConverter.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiBaseConverter.scala @@ -63,6 +63,8 @@ trait ApiBaseConverter with Amqp091ChannelBinding020Converter with Amqp091MessageBindingConverter with Amqp091OperationBindingConverter + with Amqp091OperationBinding010Converter + with Amqp091OperationBinding030Converter with EmptyBindingConverter with HttpMessageBindingConverter with HttpOperationBindingConverter @@ -216,6 +218,24 @@ trait Amqp091OperationBindingConverter extends PlatformSecrets { from._internal } } +trait Amqp091OperationBinding010Converter extends PlatformSecrets { + implicit object Amqp091OperationBinding010Matcher + extends BidirectionalMatcher[Amqp091OperationBinding010, domain.bindings.amqp.Amqp091OperationBinding010] { + override def asClient(from: Amqp091OperationBinding010): domain.bindings.amqp.Amqp091OperationBinding010 = + platform.wrap[domain.bindings.amqp.Amqp091OperationBinding010](from) + override def asInternal(from: domain.bindings.amqp.Amqp091OperationBinding010): Amqp091OperationBinding010 = + from._internal + } +} +trait Amqp091OperationBinding030Converter extends PlatformSecrets { + implicit object Amqp091OperationBinding030Matcher + extends BidirectionalMatcher[Amqp091OperationBinding030, domain.bindings.amqp.Amqp091OperationBinding030] { + override def asClient(from: Amqp091OperationBinding030): domain.bindings.amqp.Amqp091OperationBinding030 = + platform.wrap[domain.bindings.amqp.Amqp091OperationBinding030](from) + override def asInternal(from: domain.bindings.amqp.Amqp091OperationBinding030): Amqp091OperationBinding030 = + from._internal + } +} trait EmptyBindingConverter extends PlatformSecrets { implicit object EmptyBindingMatcher extends BidirectionalMatcher[EmptyBinding, domain.bindings.EmptyBinding] { override def asClient(from: EmptyBinding): domain.bindings.EmptyBinding = diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiRegister.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiRegister.scala index f1c4f05887..4791d94e4a 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiRegister.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/convert/ApiRegister.scala @@ -6,13 +6,7 @@ import amf.apicontract.client.platform.model.domain.api.{AsyncApi, WebApi} import amf.apicontract.client.platform.model.domain.bindings._ import amf.apicontract.client.platform.model.domain.bindings.amqp._ import amf.apicontract.client.platform.model.domain.bindings.anypointmq._ -import amf.apicontract.client.platform.model.domain.bindings.googlepubsub.{ - GooglePubSubChannelBinding, - GooglePubSubMessageBinding, - GooglePubSubMessageStoragePolicy, - GooglePubSubSchemaDefinition, - GooglePubSubSchemaSettings -} +import amf.apicontract.client.platform.model.domain.bindings.googlepubsub._ import amf.apicontract.client.platform.model.domain.bindings.http._ import amf.apicontract.client.platform.model.domain.bindings.ibmmq._ import amf.apicontract.client.platform.model.domain.bindings.kafka._ @@ -256,9 +250,13 @@ private[amf] object ApiRegister extends UniqueInitializer with PlatformSecrets { platform.registerWrapper(Amqp091MessageBindingModel) { case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091MessageBinding => Amqp091MessageBinding(s) } - platform.registerWrapper(Amqp091OperationBindingModel) { - case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091OperationBinding => - Amqp091OperationBinding(s) + platform.registerWrapper(Amqp091OperationBinding010Model) { + case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091OperationBinding010 => + Amqp091OperationBinding010(s) + } + platform.registerWrapper(Amqp091OperationBinding030Model) { + case s: amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091OperationBinding030 => + Amqp091OperationBinding030(s) } platform.registerWrapper(HttpMessageBindingModel) { case s: amf.apicontract.client.scala.model.domain.bindings.http.HttpMessageBinding => HttpMessageBinding(s) diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/entities/APIEntities.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/entities/APIEntities.scala index b93367ed83..460ceea5de 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/entities/APIEntities.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/entities/APIEntities.scala @@ -70,6 +70,8 @@ private[amf] object APIEntities extends Entities { Amqp091ChannelExchange020Model, Amqp091MessageBindingModel, Amqp091OperationBindingModel, + Amqp091OperationBinding010Model, + Amqp091OperationBinding030Model, OperationBindingModel, ChannelBindingModel, EmptyBindingModel, diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/metamodel/domain/bindings/Amqp091BindingModel.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/metamodel/domain/bindings/Amqp091BindingModel.scala index 98bf63e4b8..9db9a96944 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/metamodel/domain/bindings/Amqp091BindingModel.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/metamodel/domain/bindings/Amqp091BindingModel.scala @@ -196,22 +196,22 @@ object Amqp091Queue020Model extends Amqp091QueueModel { override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "Amqp091Queue020") } -object Amqp091OperationBindingModel extends OperationBindingModel with BindingVersion { - val Expiration = +trait Amqp091OperationBindingModel extends OperationBindingModel with BindingVersion { + val Expiration: Field = Field( Int, ApiBinding + "expiration", ModelDoc(ModelVocabularies.ApiBinding, "expiration", "TTL (Time-To-Live) for the message") ) - val UserId = + val UserId: Field = Field( Str, ApiBinding + "userId", ModelDoc(ModelVocabularies.ApiBinding, "userId", "Identifies the user who has sent the message") ) - val CC = + val CC: Field = Field( Array(Str), ApiBinding + "cc", @@ -222,57 +222,48 @@ object Amqp091OperationBindingModel extends OperationBindingModel with BindingVe ) ) - val Priority = + val Priority: Field = Field( Int, ApiBinding + "priority", ModelDoc(ModelVocabularies.ApiBinding, "priority", "A priority for the message") ) - val DeliveryMode = + val DeliveryMode: Field = Field( Int, ApiBinding + "deliveryMode", ModelDoc(ModelVocabularies.ApiBinding, "deliveryMode", "Delivery mode of the message") ) - val Mandatory = + val Mandatory: Field = Field( Bool, ApiBinding + "mandatory", ModelDoc(ModelVocabularies.ApiBinding, "mandatory", "Whether the message is mandatory or not") ) - val BCC = + val BCC: Field = Field( Array(Str), ApiBinding + "bcc", ModelDoc(ModelVocabularies.ApiBinding, "bcc", "Like cc but consumers will not receive this information") ) - val ReplyTo = - Field( - Str, - ApiBinding + "replyTo", - ModelDoc(ModelVocabularies.ApiBinding, "replyTo", "Name of the queue where the consumer should send the response") - ) - - val Timestamp = + val Timestamp: Field = Field( Bool, ApiBinding + "timestamp", ModelDoc(ModelVocabularies.ApiBinding, "timestamp", "Whether the message should include a timestamp or not") ) - val Ack = + val Ack: Field = Field( Bool, ApiBinding + "ack", ModelDoc(ModelVocabularies.ApiBinding, "ack", "Whether the consumer should ack the message or not") ) - override def modelInstance: AmfObject = Amqp091OperationBinding() - override def fields: List[Field] = List( Expiration, @@ -282,7 +273,6 @@ object Amqp091OperationBindingModel extends OperationBindingModel with BindingVe DeliveryMode, Mandatory, BCC, - ReplyTo, Timestamp, Ack, BindingVersion @@ -292,11 +282,65 @@ object Amqp091OperationBindingModel extends OperationBindingModel with BindingVe override val key: Field = Type - override val doc: ModelDoc = ModelDoc( - ModelVocabularies.ApiBinding, - "Amqp091OperationBinding", - "" - ) + override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "Amqp091OperationBinding") +} + +object Amqp091OperationBindingModel extends Amqp091OperationBindingModel { + override def modelInstance: AmfObject = throw new Exception("Amqp091OperationBindingModel is an abstract class") +} + +// version 0.1.0 and 0.2.0 are the same +object Amqp091OperationBinding010Model extends Amqp091OperationBindingModel { + override def modelInstance: AmfObject = Amqp091OperationBinding010() + + val ReplyTo: Field = + Field( + Str, + ApiBinding + "replyTo", + ModelDoc(ModelVocabularies.ApiBinding, "replyTo", "Name of the queue where the consumer should send the response") + ) + + override def fields: List[Field] = + List( + Expiration, + UserId, + CC, + Priority, + DeliveryMode, + Mandatory, + BCC, + ReplyTo, + Timestamp, + Ack, + BindingVersion + ) ++ OperationBindingModel.fields + + override val `type`: List[ValueType] = ApiBinding + "Amqp091OperationBinding010" :: OperationBindingModel.`type` + + override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "Amqp091OperationBinding010") +} + +// version 0.3.0 removes the `replyTo` field, so it's the same as the base type +object Amqp091OperationBinding030Model extends Amqp091OperationBindingModel { + override def fields: List[Field] = + List( + Expiration, + UserId, + CC, + Priority, + DeliveryMode, + Mandatory, + BCC, + Timestamp, + Ack, + BindingVersion + ) ++ OperationBindingModel.fields + + override def modelInstance: AmfObject = Amqp091OperationBinding030() + + override val `type`: List[ValueType] = ApiBinding + "Amqp091OperationBinding030" :: OperationBindingModel.`type` + + override val doc: ModelDoc = ModelDoc(ModelVocabularies.ApiBinding, "Amqp091OperationBinding030") } object Amqp091MessageBindingModel extends MessageBindingModel with BindingVersion { diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/emitters/bindings/AsyncApiOperationBindingsEmitter.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/emitters/bindings/AsyncApiOperationBindingsEmitter.scala index 602e84f10b..a1cdaf232b 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/emitters/bindings/AsyncApiOperationBindingsEmitter.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/emitters/bindings/AsyncApiOperationBindingsEmitter.scala @@ -12,6 +12,8 @@ import amf.apicontract.client.scala.model.domain.bindings.solace.{ SolaceOperationTopic } import amf.apicontract.internal.metamodel.domain.bindings.{ + Amqp091OperationBinding010Model, + Amqp091OperationBinding030Model, Amqp091OperationBindingModel, HttpOperationBindingModel, KafkaOperationBindingModel, @@ -141,7 +143,7 @@ class Amqp091OperationBindingEmitter(binding: Amqp091OperationBinding, ordering: fs.entry(Amqp091OperationBindingModel.DeliveryMode).foreach(f => result += ValueEmitter("deliveryMode", f)) fs.entry(Amqp091OperationBindingModel.Mandatory).foreach(f => result += ValueEmitter("mandatory", f)) fs.entry(Amqp091OperationBindingModel.BCC).foreach(f => result += spec.arrayEmitter("bcc", f, ordering)) - fs.entry(Amqp091OperationBindingModel.ReplyTo).foreach(f => result += ValueEmitter("replyTo", f)) + fs.entry(Amqp091OperationBinding010Model.ReplyTo).foreach(f => result += ValueEmitter("replyTo", f)) fs.entry(Amqp091OperationBindingModel.Timestamp).foreach(f => result += ValueEmitter("timestamp", f)) fs.entry(Amqp091OperationBindingModel.Ack).foreach(f => result += ValueEmitter("ack", f)) emitBindingVersion(fs, result) diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/operation/Amqp091OperationBindingParser.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/operation/Amqp091OperationBindingParser.scala index bad453e95b..3da0b715d1 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/operation/Amqp091OperationBindingParser.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/operation/Amqp091OperationBindingParser.scala @@ -1,17 +1,41 @@ package amf.apicontract.internal.spec.async.parser.bindings.operation -import amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091OperationBinding -import amf.apicontract.internal.metamodel.domain.bindings.{Amqp091OperationBindingModel, KafkaOperationBindingModel} +import amf.apicontract.client.scala.model.domain.bindings.amqp.{ + Amqp091OperationBinding, + Amqp091OperationBinding010, + Amqp091OperationBinding030 +} +import amf.apicontract.internal.metamodel.domain.bindings.{ + Amqp091OperationBinding010Model, + Amqp091OperationBindingModel, + KafkaOperationBindingModel +} import amf.apicontract.internal.spec.async.parser.bindings.BindingParser import amf.apicontract.internal.spec.async.parser.context.AsyncWebApiContext +import amf.apicontract.internal.validation.definitions.ParserSideValidations.UnsupportedBindingVersionWarning import amf.core.internal.parser.YMapOps import amf.core.internal.parser.domain.Annotations import org.yaml.model.{YMap, YMapEntry} object Amqp091OperationBindingParser extends BindingParser[Amqp091OperationBinding] { override def parse(entry: YMapEntry, parent: String)(implicit ctx: AsyncWebApiContext): Amqp091OperationBinding = { - val binding = Amqp091OperationBinding(Annotations(entry)) - val map = entry.value.as[YMap] + val bindingVersion = getBindingVersion(entry.value.as[YMap], "Amqp091ChannelBinding", ctx.specSettings.spec) + + // bindingVersion is either well defined or defaults to 0.1.0 + val binding: Amqp091OperationBinding = bindingVersion match { + case "0.3.0" | "latest" => Amqp091OperationBinding030(Annotations(entry)) + case "0.1.0" | "0.2.0" => Amqp091OperationBinding010(Annotations(entry)) + case invalidVersion => + ctx.eh.warning( + UnsupportedBindingVersionWarning, + Amqp091OperationBinding010(Annotations(entry)), + Some("bindingVersion"), + s"Version $invalidVersion is not supported in an Amqp091ChannelBinding", + entry.value.location + ) + Amqp091OperationBinding010(Annotations(entry)) + } + val map = entry.value.as[YMap] map.key("expiration", Amqp091OperationBindingModel.Expiration in binding) map.key("userId", Amqp091OperationBindingModel.UserId in binding) @@ -20,13 +44,18 @@ object Amqp091OperationBindingParser extends BindingParser[Amqp091OperationBindi map.key("deliveryMode", Amqp091OperationBindingModel.DeliveryMode in binding) map.key("mandatory", Amqp091OperationBindingModel.Mandatory in binding) map.key("bcc", Amqp091OperationBindingModel.BCC in binding) - map.key("replyTo", Amqp091OperationBindingModel.ReplyTo in binding) map.key("timestamp", Amqp091OperationBindingModel.Timestamp in binding) map.key("ack", Amqp091OperationBindingModel.Ack in binding) parseBindingVersion(binding, KafkaOperationBindingModel.BindingVersion, map) - ctx.closedShape(binding, map, "amqpOperationBinding") + bindingVersion match { + case "0.3.0" => + ctx.closedShape(binding, map, "amqpOperationBinding030") + case _ => + map.key("replyTo", Amqp091OperationBinding010Model.ReplyTo in binding) + ctx.closedShape(binding, map, "amqpOperationBinding010") + } binding } diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/context/syntax/Async20Syntax.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/context/syntax/Async20Syntax.scala index 669e3d428e..84bcf8bb44 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/context/syntax/Async20Syntax.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/context/syntax/Async20Syntax.scala @@ -88,7 +88,7 @@ object Async20Syntax extends SpecSyntax { "query", "bindingVersion" ), - "amqpOperationBinding" -> Set( + "amqpOperationBinding010" -> Set( "expiration", "userId", "cc", @@ -101,6 +101,18 @@ object Async20Syntax extends SpecSyntax { "ack", "bindingVersion" ), + "amqpOperationBinding030" -> Set( + "expiration", + "userId", + "cc", + "priority", + "deliveryMode", + "mandatory", + "bcc", + "timestamp", + "ack", + "bindingVersion" + ), "amqpMessageBinding" -> Set( "contentEncoding", "messageType", diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/validation/model/APIRawValidations.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/validation/model/APIRawValidations.scala index 3dad316f4f..377cd52497 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/validation/model/APIRawValidations.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/validation/model/APIRawValidations.scala @@ -998,12 +998,33 @@ object APIRawValidations extends CommonValidationDefinitions { openApiErrorMessage = "'qos' for mqtt server binding last will object must be one of 0, 1 or 2" ), AMFValidation( - owlClass = apiBinding("Amqp091OperationBinding"), + owlClass = apiBinding("Amqp091OperationBinding010"), + owlProperty = apiBinding("deliveryMode"), + constraint = sh("pattern"), + value = "^[1-2]$", + openApiErrorMessage = "'deliveryMode' for amqp 0.9.1 operation binding object must be one of 1 or 2" + ), + AMFValidation( + owlClass = apiBinding("Amqp091OperationBinding030"), owlProperty = apiBinding("deliveryMode"), constraint = sh("pattern"), value = "^[1-2]$", openApiErrorMessage = "'deliveryMode' for amqp 0.9.1 operation binding object must be one of 1 or 2" ), + AMFValidation( + owlClass = apiBinding("Amqp091OperationBinding010"), + owlProperty = apiBinding("expiration"), + constraint = sh("pattern"), + value = "^[0-9]+(.[0-9]+)?$", + openApiErrorMessage = "'expiration' for amqp 0.9.1 operation binding object must greather than or equal to 0" + ), + AMFValidation( + owlClass = apiBinding("Amqp091OperationBinding030"), + owlProperty = apiBinding("expiration"), + constraint = sh("pattern"), + value = "^[0-9]+(.[0-9]+)?$", + openApiErrorMessage = "'expiration' for amqp 0.9.1 operation binding object must greather than or equal to 0" + ), AMFValidation( owlClass = apiBinding("Amqp091OperationBinding"), owlProperty = apiBinding("expiration"), diff --git a/amf-cli/shared/src/test/resources/resolution/merge/operation-different-binding/golden.expanded.jsonld b/amf-cli/shared/src/test/resources/resolution/merge/operation-different-binding/golden.expanded.jsonld index 6ab49fc9d7..e7ac27800c 100644 --- a/amf-cli/shared/src/test/resources/resolution/merge/operation-different-binding/golden.expanded.jsonld +++ b/amf-cli/shared/src/test/resources/resolution/merge/operation-different-binding/golden.expanded.jsonld @@ -29,9 +29,9 @@ ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "target/operation-bindings/amqp091-operation", + "@id": "target/operation-bindings/amqp091-operation-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding010", "http://a.ml/vocabularies/apiBinding#OperationBinding", "http://a.ml/vocabularies/document#DomainElement" ], diff --git a/amf-cli/shared/src/test/resources/resolution/merge/operation-different-binding/golden.flattened.jsonld b/amf-cli/shared/src/test/resources/resolution/merge/operation-different-binding/golden.flattened.jsonld index 2e6812bc5e..ca9cbcd662 100644 --- a/amf-cli/shared/src/test/resources/resolution/merge/operation-different-binding/golden.flattened.jsonld +++ b/amf-cli/shared/src/test/resources/resolution/merge/operation-different-binding/golden.flattened.jsonld @@ -28,7 +28,7 @@ ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "target/operation-bindings/amqp091-operation" + "@id": "target/operation-bindings/amqp091-operation-010" }, { "@id": "target/operation-bindings/http-operation" @@ -36,9 +36,9 @@ ] }, { - "@id": "target/operation-bindings/amqp091-operation", + "@id": "target/operation-bindings/amqp091-operation-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding010", "http://a.ml/vocabularies/apiBinding#OperationBinding", "http://a.ml/vocabularies/document#DomainElement" ], diff --git a/amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.expanded.jsonld b/amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.expanded.jsonld index a9fe716957..6419487cb3 100644 --- a/amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.expanded.jsonld +++ b/amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.expanded.jsonld @@ -60,9 +60,9 @@ ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding010", "http://a.ml/vocabularies/apiBinding#OperationBinding", "http://a.ml/vocabularies/document#DomainElement" ], @@ -113,7 +113,7 @@ ], "http://a.ml/vocabularies/apiBinding#bindingVersion": [ { - "@value": "31.07.92" + "@value": "0.1.0" } ], "http://a.ml/vocabularies/apiBinding#type": [ @@ -123,13 +123,13 @@ ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_11", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_11", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#bindingVersion" @@ -142,7 +142,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_9", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_9", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#mandatory" @@ -155,7 +155,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_7", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_7", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#userId" @@ -168,7 +168,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_5", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_5", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#expiration" @@ -181,7 +181,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_3", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_3", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#deliveryMode" @@ -194,7 +194,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#timestamp" @@ -207,7 +207,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#type" @@ -220,7 +220,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#bcc" @@ -233,7 +233,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_4", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_4", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#cc" @@ -246,10 +246,10 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_6", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_6", "http://a.ml/vocabularies/document-source-maps#element": [ { - "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation" + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010" } ], "http://a.ml/vocabularies/document-source-maps#value": [ @@ -259,7 +259,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_8", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_8", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#priority" @@ -272,7 +272,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_10", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_10", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#replyTo" @@ -385,9 +385,9 @@ ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding010", "http://a.ml/vocabularies/apiBinding#OperationBinding", "http://a.ml/vocabularies/document#DomainElement" ], @@ -408,13 +408,13 @@ ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map/synthesized-field/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map/synthesized-field/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#bindingVersion" @@ -429,7 +429,7 @@ ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#ack" @@ -442,7 +442,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#type" @@ -455,10 +455,10 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": [ { - "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation" + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010" } ], "http://a.ml/vocabularies/document-source-maps#value": [ diff --git a/amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.flattened.jsonld b/amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.flattened.jsonld index 87d7cc535c..c780bd68fb 100644 --- a/amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.flattened.jsonld +++ b/amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.flattened.jsonld @@ -146,7 +146,7 @@ ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010" } ], "http://a.ml/vocabularies/document-source-maps#sources": [ @@ -177,7 +177,7 @@ ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010" } ], "http://a.ml/vocabularies/document-source-maps#sources": [ @@ -211,9 +211,9 @@ "http://a.ml/vocabularies/document-source-maps#value": "[(8,0)-(24,19)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding010", "http://a.ml/vocabularies/apiBinding#OperationBinding", "http://a.ml/vocabularies/document#DomainElement" ], @@ -230,11 +230,11 @@ ], "http://a.ml/vocabularies/apiBinding#replyTo": "some", "http://a.ml/vocabularies/apiBinding#timestamp": true, - "http://a.ml/vocabularies/apiBinding#bindingVersion": "31.07.92", + "http://a.ml/vocabularies/apiBinding#bindingVersion": "0.1.0", "http://a.ml/vocabularies/apiBinding#type": "amqp", "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map" } ] }, @@ -263,9 +263,9 @@ "http://a.ml/vocabularies/document-source-maps#value": "[(9,6)-(21,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding010", "http://a.ml/vocabularies/apiBinding#OperationBinding", "http://a.ml/vocabularies/document#DomainElement" ], @@ -274,7 +274,7 @@ "http://a.ml/vocabularies/apiBinding#type": "amqp", "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map" } ] }, @@ -303,46 +303,46 @@ "http://a.ml/vocabularies/document-source-maps#value": "[(22,6)-(24,19)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_11" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_11" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_9" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_9" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_7" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_7" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_5" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_5" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_3" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_3" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_1" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_1" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_0" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_2" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_2" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_4" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_4" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_6" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_6" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_8" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_8" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_10" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_10" } ] }, @@ -357,24 +357,24 @@ "http://a.ml/vocabularies/document-source-maps#value": "[(10,0)-(21,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map/synthesized-field/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map/synthesized-field/element_0" } ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_2" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_2" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_0" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_1" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_1" } ] }, @@ -389,83 +389,83 @@ "http://a.ml/vocabularies/document-source-maps#value": "[(23,0)-(24,19)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_11", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_11", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#bindingVersion", "http://a.ml/vocabularies/document-source-maps#value": "[(11,10)-(12,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_9", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_9", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#mandatory", "http://a.ml/vocabularies/document-source-maps#value": "[(17,10)-(18,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_7", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_7", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#userId", "http://a.ml/vocabularies/document-source-maps#value": "[(13,10)-(14,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_5", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_5", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#expiration", "http://a.ml/vocabularies/document-source-maps#value": "[(12,10)-(13,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_3", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_3", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#deliveryMode", "http://a.ml/vocabularies/document-source-maps#value": "[(16,10)-(17,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#timestamp", "http://a.ml/vocabularies/document-source-maps#value": "[(20,10)-(21,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#type", "http://a.ml/vocabularies/document-source-maps#value": "[(10,8)-(10,12)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#bcc", "http://a.ml/vocabularies/document-source-maps#value": "[(18,10)-(19,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_4", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_4", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#cc", "http://a.ml/vocabularies/document-source-maps#value": "[(14,10)-(15,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_6", - "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_6", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010", "http://a.ml/vocabularies/document-source-maps#value": "[(10,8)-(21,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_8", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_8", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#priority", "http://a.ml/vocabularies/document-source-maps#value": "[(15,10)-(16,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_10", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/publish/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_10", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#replyTo", "http://a.ml/vocabularies/document-source-maps#value": "[(19,10)-(20,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map/synthesized-field/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map/synthesized-field/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#bindingVersion", "http://a.ml/vocabularies/document-source-maps#value": "true" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#ack", "http://a.ml/vocabularies/document-source-maps#value": "[(24,10)-(24,19)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#type", "http://a.ml/vocabularies/document-source-maps#value": "[(23,8)-(23,12)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_1", - "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml#/async-api/endpoint/some-channel/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010", "http://a.ml/vocabularies/document-source-maps#value": "[(23,8)-(24,19)]" }, { diff --git a/amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml b/amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml index f87b6e063f..5ef51e585b 100644 --- a/amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml +++ b/amf-cli/shared/src/test/resources/validations/async20/amqp-operation-binding.yaml @@ -8,7 +8,7 @@ channels: publish: bindings: amqp: - bindingVersion: 31.07.92 + bindingVersion: 0.1.0 expiration: 32 userId: some cc: [some] diff --git a/amf-cli/shared/src/test/resources/validations/async20/rpc-server.expanded.jsonld b/amf-cli/shared/src/test/resources/validations/async20/rpc-server.expanded.jsonld index 4734d0d4d2..cfbb8c69a0 100644 --- a/amf-cli/shared/src/test/resources/validations/async20/rpc-server.expanded.jsonld +++ b/amf-cli/shared/src/test/resources/validations/async20/rpc-server.expanded.jsonld @@ -700,9 +700,9 @@ ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding010", "http://a.ml/vocabularies/apiBinding#OperationBinding", "http://a.ml/vocabularies/document#DomainElement" ], @@ -723,13 +723,13 @@ ], "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map/synthesized-field/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map/synthesized-field/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#bindingVersion" @@ -744,7 +744,7 @@ ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#ack" @@ -757,7 +757,7 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": [ { "@value": "http://a.ml/vocabularies/apiBinding#type" @@ -770,10 +770,10 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_1", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_1", "http://a.ml/vocabularies/document-source-maps#element": [ { - "@value": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation" + "@value": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010" } ], "http://a.ml/vocabularies/document-source-maps#value": [ diff --git a/amf-cli/shared/src/test/resources/validations/async20/rpc-server.flattened.jsonld b/amf-cli/shared/src/test/resources/validations/async20/rpc-server.flattened.jsonld index 549127d2e1..e0ec35af40 100644 --- a/amf-cli/shared/src/test/resources/validations/async20/rpc-server.flattened.jsonld +++ b/amf-cli/shared/src/test/resources/validations/async20/rpc-server.flattened.jsonld @@ -381,7 +381,7 @@ ], "http://a.ml/vocabularies/apiBinding#bindings": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010" } ], "http://a.ml/vocabularies/document-source-maps#sources": [ @@ -646,9 +646,9 @@ ] }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010", "@type": [ - "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding", + "http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding010", "http://a.ml/vocabularies/apiBinding#OperationBinding", "http://a.ml/vocabularies/document#DomainElement" ], @@ -657,7 +657,7 @@ "http://a.ml/vocabularies/apiBinding#type": "amqp", "http://a.ml/vocabularies/document-source-maps#sources": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map" } ] }, @@ -982,24 +982,24 @@ "http://a.ml/vocabularies/document-source-maps#value": "[(33,8)-(35,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map", "@type": [ "http://a.ml/vocabularies/document-source-maps#SourceMap" ], "http://a.ml/vocabularies/document-source-maps#synthesized-field": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map/synthesized-field/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map/synthesized-field/element_0" } ], "http://a.ml/vocabularies/document-source-maps#lexical": [ { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_2" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_2" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_0" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_0" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_1" + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_1" } ] }, @@ -1280,23 +1280,23 @@ "http://a.ml/vocabularies/document-source-maps#value": "[(34,10)-(35,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map/synthesized-field/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map/synthesized-field/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#bindingVersion", "http://a.ml/vocabularies/document-source-maps#value": "true" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_2", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_2", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#ack", "http://a.ml/vocabularies/document-source-maps#value": "[(31,10)-(32,0)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_0", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_0", "http://a.ml/vocabularies/document-source-maps#element": "http://a.ml/vocabularies/apiBinding#type", "http://a.ml/vocabularies/document-source-maps#value": "[(30,8)-(30,12)]" }, { - "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation/source-map/lexical/element_1", - "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation", + "@id": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010/source-map/lexical/element_1", + "http://a.ml/vocabularies/document-source-maps#element": "file://amf-cli/shared/src/test/resources/validations/async20/rpc-server.yaml#/async-api/endpoint/%7Bqueue%7D/supportedOperation/subscribe/sendSumResult/operation-bindings/bindings/amqp091-operation-010", "http://a.ml/vocabularies/document-source-maps#value": "[(30,8)-(32,0)]" }, { diff --git a/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-030.yaml b/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-030.yaml new file mode 100644 index 0000000000..bb26cbfe3b --- /dev/null +++ b/amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-030.yaml @@ -0,0 +1,28 @@ +asyncapi: '2.0.0' +info: + title: Amqp channel binding + version: '1.0.0' + +channels: + default-version-channel: + subscribe: + operationId: default-version-operation + bindings: + amqp: + replyTo: valid # since no version is specified, defaults to 0.1.0 where replyTo is valid + + wrong-version-channel: + subscribe: + operationId: wrong-version-operation + bindings: + amqp: + bindingVersion: 1.2.3 # invalid version, should throw warning + replyTo: valid # since an invalid version is specified, defaults to 0.1.0 where replyTo is valid + + specific-version-channel: + subscribe: + operationId: specific-version-operation + bindings: + amqp: + bindingVersion: 0.3.0 + replyTo: invalid # version 0.3.0 doesn't have replyTo, should throw violation \ No newline at end of file diff --git a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-wrong-binding-version.report b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-wrong-binding-version.report index e69de29bb2..4795a60442 100644 --- a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-wrong-binding-version.report +++ b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-binding-wrong-binding-version.report @@ -0,0 +1,32 @@ +ModelId: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-wrong-binding-version.yaml +Profile: +Conforms: false +Number of results: 3 + +Level: Violation + +- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape + Message: Property 'vhost' not supported in a ASYNC 2.0 amqpExchangeChannelBinding010 node + Severity: Violation + Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-wrong-binding-version.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-exchange-010 + Property: + Range: [(16,10)-(17,0)] + Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-wrong-binding-version.yaml + +- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape + Message: Property 'vhost' not supported in a ASYNC 2.0 amqpQueueChannelBinding010 node + Severity: Violation + Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-wrong-binding-version.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/amqp091-channel-010/amqp091-queue-010 + Property: + Range: [(22,10)-(23,0)] + Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-wrong-binding-version.yaml + +Level: Warning + +- Constraint: http://a.ml/vocabularies/amf/parser#unsupported-binding-version-warning + Message: Version 9.9.9 is not supported in an Amqp091ChannelBinding + Severity: Warning + Target: null + Property: bindingVersion + Range: [(9,11)-(23,0)] + Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-binding-wrong-binding-version.yaml diff --git a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-operation-binding-030.report b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-operation-binding-030.report new file mode 100644 index 0000000000..03032b2bdc --- /dev/null +++ b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-operation-binding-030.report @@ -0,0 +1,24 @@ +ModelId: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-030.yaml +Profile: +Conforms: false +Number of results: 2 + +Level: Violation + +- Constraint: http://a.ml/vocabularies/amf/parser#closed-shape + Message: Property 'replyTo' not supported in a ASYNC 2.0 amqpOperationBinding030 node + Severity: Violation + Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-030.yaml#/async-api/endpoint/specific-version-channel/supportedOperation/subscribe/specific-version-operation/operation-bindings/bindings/amqp091-operation-030 + Property: + Range: [(28,10)-(28,87)] + Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-030.yaml + +Level: Warning + +- Constraint: http://a.ml/vocabularies/amf/parser#unsupported-binding-version-warning + Message: Version 1.2.3 is not supported in an Amqp091ChannelBinding + Severity: Warning + Target: null + Property: bindingVersion + Range: [(18,13)-(22,0)] + Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-030.yaml diff --git a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-operation-binding-deliveryMode.report b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-operation-binding-deliveryMode.report index effda17831..bb9e7f4eb7 100644 --- a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-operation-binding-deliveryMode.report +++ b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-operation-binding-deliveryMode.report @@ -5,10 +5,10 @@ Number of results: 1 Level: Violation -- Constraint: http://a.ml/vocabularies/amf/parser#Amqp091OperationBinding-deliveryMode-pattern +- Constraint: http://a.ml/vocabularies/amf/parser#Amqp091OperationBinding010-deliveryMode-pattern Message: 'deliveryMode' for amqp 0.9.1 operation binding object must be one of 1 or 2 Severity: Violation - Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-deliveryMode.yaml#/async-api/endpoint/%2Finvalid/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation + Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-deliveryMode.yaml#/async-api/endpoint/%2Finvalid/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010 Property: http://a.ml/vocabularies/apiBinding#deliveryMode Range: [(20,24)-(20,25)] Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-deliveryMode.yaml diff --git a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-operation-binding-expiration.report b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-operation-binding-expiration.report index aae5ba9565..bf8f8ddfd6 100644 --- a/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-operation-binding-expiration.report +++ b/amf-cli/shared/src/test/resources/validations/reports/async20/amqp-operation-binding-expiration.report @@ -5,10 +5,10 @@ Number of results: 1 Level: Violation -- Constraint: http://a.ml/vocabularies/amf/parser#Amqp091OperationBinding-expiration-pattern +- Constraint: http://a.ml/vocabularies/amf/parser#Amqp091OperationBinding010-expiration-pattern Message: 'expiration' for amqp 0.9.1 operation binding object must greather than or equal to 0 Severity: Violation - Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-expiration.yaml#/async-api/endpoint/%2Femployees/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation + Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-expiration.yaml#/async-api/endpoint/%2Femployees/supportedOperation/subscribe/operation-bindings/bindings/amqp091-operation-010 Property: http://a.ml/vocabularies/apiBinding#expiration Range: [(10,22)-(10,25)] Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/amqp-operation-binding-expiration.yaml diff --git a/amf-cli/shared/src/test/scala/amf/validation/Async20UniquePlatformUnitValidationsTest.scala b/amf-cli/shared/src/test/scala/amf/validation/Async20UniquePlatformUnitValidationsTest.scala index 770e0758d0..a2fbb18308 100644 --- a/amf-cli/shared/src/test/scala/amf/validation/Async20UniquePlatformUnitValidationsTest.scala +++ b/amf-cli/shared/src/test/scala/amf/validation/Async20UniquePlatformUnitValidationsTest.scala @@ -431,4 +431,8 @@ class Async20UniquePlatformUnitValidationsTest extends UniquePlatformReportGenTe test("Async Amqp wrong binding version") { validate("amqp-binding-wrong-binding-version.yaml", Some("amqp-binding-wrong-binding-version.report")) } + + test("Async Amqp operation binding version 0.3.0") { + validate("amqp-operation-binding-030.yaml", Some("amqp-operation-binding-030.report")) + } } diff --git a/documentation/model.md b/documentation/model.md index 578057ab7b..cc334adc64 100644 --- a/documentation/model.md +++ b/documentation/model.md @@ -17,6 +17,8 @@ AMF Model Documentation * [Amqp091ChannelExchange020](#amqp091channelexchange020) * [Amqp091MessageBinding](#amqp091messagebinding) * [Amqp091OperationBinding](#amqp091operationbinding) +* [Amqp091OperationBinding010](#amqp091operationbinding010) +* [Amqp091OperationBinding030](#amqp091operationbinding030) * [Amqp091Queue](#amqp091queue) * [Amqp091Queue010](#amqp091queue010) * [Amqp091Queue020](#amqp091queue020) @@ -408,6 +410,28 @@ Types: Types: * `http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding` * `http://a.ml/vocabularies/apiBinding#OperationBinding` +* `http://a.ml/vocabularies/document#DomainElement` + + | Name | Value | Sorted | Documentation | Namespace | + | ------ | ------ | ------ | ------ | ------ | + | expiration | int | - | TTL (Time-To-Live) for the message | `http://a.ml/vocabularies/apiBinding#expiration` | + | userId | string | - | Identifies the user who has sent the message | `http://a.ml/vocabularies/apiBinding#userId` | + | cc | [string] | false | The routing keys the message should be routed to at the time of publishing | `http://a.ml/vocabularies/apiBinding#cc` | + | priority | int | - | A priority for the message | `http://a.ml/vocabularies/apiBinding#priority` | + | deliveryMode | int | - | Delivery mode of the message | `http://a.ml/vocabularies/apiBinding#deliveryMode` | + | mandatory | boolean | - | Whether the message is mandatory or not | `http://a.ml/vocabularies/apiBinding#mandatory` | + | bcc | [string] | false | Like cc but consumers will not receive this information | `http://a.ml/vocabularies/apiBinding#bcc` | + | timestamp | boolean | - | Whether the message should include a timestamp or not | `http://a.ml/vocabularies/apiBinding#timestamp` | + | ack | boolean | - | Whether the consumer should ack the message or not | `http://a.ml/vocabularies/apiBinding#ack` | + | bindingVersion | string | - | The version of this binding | `http://a.ml/vocabularies/apiBinding#bindingVersion` | + | type | string | - | Binding for a corresponding known type | `http://a.ml/vocabularies/apiBinding#type` | + | extends | [[DomainElement](#domainelement)] | false | Entity that is going to be extended overlaying or adding additional information The type of the relationship provide the semantics about thow the referenced and referencer elements must be combined when generating the domain model from the document model. | `http://a.ml/vocabularies/document#extends` | + +## Amqp091OperationBinding010 + +Types: +* `http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding010` +* `http://a.ml/vocabularies/apiBinding#OperationBinding` * `http://a.ml/vocabularies/document#DomainElement` | Name | Value | Sorted | Documentation | Namespace | @@ -426,6 +450,28 @@ Types: | type | string | - | Binding for a corresponding known type | `http://a.ml/vocabularies/apiBinding#type` | | extends | [[DomainElement](#domainelement)] | false | Entity that is going to be extended overlaying or adding additional information The type of the relationship provide the semantics about thow the referenced and referencer elements must be combined when generating the domain model from the document model. | `http://a.ml/vocabularies/document#extends` | +## Amqp091OperationBinding030 + +Types: +* `http://a.ml/vocabularies/apiBinding#Amqp091OperationBinding030` +* `http://a.ml/vocabularies/apiBinding#OperationBinding` +* `http://a.ml/vocabularies/document#DomainElement` + + | Name | Value | Sorted | Documentation | Namespace | + | ------ | ------ | ------ | ------ | ------ | + | expiration | int | - | TTL (Time-To-Live) for the message | `http://a.ml/vocabularies/apiBinding#expiration` | + | userId | string | - | Identifies the user who has sent the message | `http://a.ml/vocabularies/apiBinding#userId` | + | cc | [string] | false | The routing keys the message should be routed to at the time of publishing | `http://a.ml/vocabularies/apiBinding#cc` | + | priority | int | - | A priority for the message | `http://a.ml/vocabularies/apiBinding#priority` | + | deliveryMode | int | - | Delivery mode of the message | `http://a.ml/vocabularies/apiBinding#deliveryMode` | + | mandatory | boolean | - | Whether the message is mandatory or not | `http://a.ml/vocabularies/apiBinding#mandatory` | + | bcc | [string] | false | Like cc but consumers will not receive this information | `http://a.ml/vocabularies/apiBinding#bcc` | + | timestamp | boolean | - | Whether the message should include a timestamp or not | `http://a.ml/vocabularies/apiBinding#timestamp` | + | ack | boolean | - | Whether the consumer should ack the message or not | `http://a.ml/vocabularies/apiBinding#ack` | + | bindingVersion | string | - | The version of this binding | `http://a.ml/vocabularies/apiBinding#bindingVersion` | + | type | string | - | Binding for a corresponding known type | `http://a.ml/vocabularies/apiBinding#type` | + | extends | [[DomainElement](#domainelement)] | false | Entity that is going to be extended overlaying or adding additional information The type of the relationship provide the semantics about thow the referenced and referencer elements must be combined when generating the domain model from the document model. | `http://a.ml/vocabularies/document#extends` | + ## Amqp091Queue Types: From 42313db4ec0b5be4cccb3b127cf6939d47c4407d Mon Sep 17 00:00:00 2001 From: arielmirra Date: Wed, 17 Apr 2024 16:34:26 -0300 Subject: [PATCH 4/5] W-15425021: add typings for amqp binding version 1, 2, and 3 --- amf-cli/js/typings/amf-client-js.d.ts | 350 +++++++++++++++++++++++++- 1 file changed, 349 insertions(+), 1 deletion(-) diff --git a/amf-cli/js/typings/amf-client-js.d.ts b/amf-cli/js/typings/amf-client-js.d.ts index 66e3ffce89..ecbfac6509 100644 --- a/amf-cli/js/typings/amf-client-js.d.ts +++ b/amf-cli/js/typings/amf-client-js.d.ts @@ -647,6 +647,96 @@ declare module "amf-client-js" { withQueue(queue: Amqp091Queue): this; } + export class Amqp091ChannelBinding010 implements Amqp091ChannelBinding { + customDomainProperties: Array; + exchange: Amqp091ChannelExchange010; + extendsNode: Array; + id: string; + is: StrField; + isExternalLink: BoolField; + isLink: boolean; + linkLabel: StrField; + linkTarget: undefined | DomainElement; + position: Range; + queue: Amqp091Queue010; + + constructor(); + + annotations(): Annotations; + + graph(): Graph; + + link(label: string): T; + + link(): T; + + linkCopy(): Amqp091ChannelBinding010; + + withBindingVersion(bindingVersion: string): this; + + withCustomDomainProperties(extensions: Array): this; + + withExchange(exchange: Amqp091ChannelExchange): this; + + withExtendsNode(extension: Array): this; + + withId(id: string): this; + + withIs(is: string): this; + + withIsExternalLink(isExternalLink: boolean): DomainElement; + + withLinkLabel(label: string): this; + + withLinkTarget(target: undefined): this; + + withQueue(queue: Amqp091Queue): this; + } + export class Amqp091ChannelBinding020 implements Amqp091ChannelBinding { + customDomainProperties: Array; + exchange: Amqp091ChannelExchange020; + extendsNode: Array; + id: string; + is: StrField; + isExternalLink: BoolField; + isLink: boolean; + linkLabel: StrField; + linkTarget: undefined | DomainElement; + position: Range; + queue: Amqp091Queue020; + + constructor(); + + annotations(): Annotations; + + graph(): Graph; + + link(label: string): T; + + link(): T; + + linkCopy(): Amqp091ChannelBinding020; + + withBindingVersion(bindingVersion: string): this; + + withCustomDomainProperties(extensions: Array): this; + + withExchange(exchange: Amqp091ChannelExchange): this; + + withExtendsNode(extension: Array): this; + + withId(id: string): this; + + withIs(is: string): this; + + withIsExternalLink(isExternalLink: boolean): DomainElement; + + withLinkLabel(label: string): this; + + withLinkTarget(target: undefined): this; + + withQueue(queue: Amqp091Queue): this; + } export class Amqp091ChannelExchange implements DomainElement { autoDelete: BoolField; customDomainProperties: Array; @@ -657,6 +747,72 @@ declare module "amf-client-js" { name: StrField; position: Range; type: StrField; + + constructor(); + + annotations(): Annotations; + + graph(): Graph; + + withAutoDelete(autoDelete: boolean): this; + + withCustomDomainProperties(extensions: Array): this; + + withDurable(durable: boolean): this; + + withExtendsNode(extension: Array): this; + + withId(id: string): this; + + withIsExternalLink(isExternalLink: boolean): DomainElement; + + withName(name: string): this; + + withType(type: string): this; + } + export class Amqp091ChannelExchange010 implements Amqp091ChannelExchange { + autoDelete: BoolField; + customDomainProperties: Array; + durable: BoolField; + extendsNode: Array; + id: string; + isExternalLink: BoolField; + name: StrField; + position: Range; + type: StrField; + + constructor(); + + annotations(): Annotations; + + graph(): Graph; + + withAutoDelete(autoDelete: boolean): this; + + withCustomDomainProperties(extensions: Array): this; + + withDurable(durable: boolean): this; + + withExtendsNode(extension: Array): this; + + withId(id: string): this; + + withIsExternalLink(isExternalLink: boolean): DomainElement; + + withName(name: string): this; + + withType(type: string): this; + } + export class Amqp091ChannelExchange020 implements Amqp091ChannelExchange { + autoDelete: BoolField; + customDomainProperties: Array; + durable: BoolField; + extendsNode: Array; + id: string; + isExternalLink: BoolField; + name: StrField; + position: Range; + type: StrField; vHost: StrField; constructor(); @@ -741,7 +897,6 @@ declare module "amf-client-js" { mandatory: BoolField; position: Range; priority: IntField; - replyTo: StrField; timestamp: BoolField; userId: StrField; @@ -785,12 +940,139 @@ declare module "amf-client-js" { withPriority(priority: number): this; + withTimestamp(timestamp: boolean): this; + + withUserId(userId: string): this; + } + export class Amqp091OperationBinding010 implements Amqp091OperationBinding { + ack: BoolField; + bcc: Array; + cc: Array; + customDomainProperties: Array; + deliveryMode: IntField; + expiration: IntField; + extendsNode: Array; + id: string; + isExternalLink: BoolField; + isLink: boolean; + linkLabel: StrField; + linkTarget: undefined | DomainElement; + mandatory: BoolField; + position: Range; + priority: IntField; + replyTo: StrField; + timestamp: BoolField; + userId: StrField; + + constructor(); + + annotations(): Annotations; + + graph(): Graph; + + link(label: string): T; + + link(): T; + + linkCopy(): Amqp091OperationBinding010; + + withAck(ack: boolean): this; + + withBcc(bCC: Array): this; + + withBindingVersion(bindingVersion: string): this; + + withCc(cC: Array): this; + + withCustomDomainProperties(extensions: Array): this; + + withDeliveryMode(deliveryMode: number): this; + + withExpiration(expiration: number): this; + + withExtendsNode(extension: Array): this; + + withId(id: string): this; + + withIsExternalLink(isExternalLink: boolean): DomainElement; + + withLinkLabel(label: string): this; + + withLinkTarget(target: undefined): this; + + withMandatory(mandatory: boolean): this; + + withPriority(priority: number): this; + withReplyTo(replyTo: string): this; withTimestamp(timestamp: boolean): this; withUserId(userId: string): this; } + export class Amqp091OperationBinding030 implements Amqp091OperationBinding { + ack: BoolField; + bcc: Array; + cc: Array; + customDomainProperties: Array; + deliveryMode: IntField; + expiration: IntField; + extendsNode: Array; + id: string; + isExternalLink: BoolField; + isLink: boolean; + linkLabel: StrField; + linkTarget: undefined | DomainElement; + mandatory: BoolField; + position: Range; + priority: IntField; + timestamp: BoolField; + userId: StrField; + + constructor(); + + annotations(): Annotations; + + graph(): Graph; + + link(label: string): T; + + link(): T; + + linkCopy(): Amqp091OperationBinding030; + + withAck(ack: boolean): this; + + withBcc(bCC: Array): this; + + withBindingVersion(bindingVersion: string): this; + + withCc(cC: Array): this; + + withCustomDomainProperties(extensions: Array): this; + + withDeliveryMode(deliveryMode: number): this; + + withExpiration(expiration: number): this; + + withExtendsNode(extension: Array): this; + + withId(id: string): this; + + withIsExternalLink(isExternalLink: boolean): DomainElement; + + withLinkLabel(label: string): this; + + withLinkTarget(target: undefined): this; + + withMandatory(mandatory: boolean): this; + + withPriority(priority: number): this; + + withTimestamp(timestamp: boolean): this; + + withUserId(userId: string): this; + } export class Amqp091Queue implements DomainElement { autoDelete: BoolField; customDomainProperties: Array; @@ -801,6 +1083,72 @@ declare module "amf-client-js" { isExternalLink: BoolField; name: StrField; position: Range; + + constructor(); + + annotations(): Annotations; + + graph(): Graph; + + withAutoDelete(autoDelete: boolean): this; + + withCustomDomainProperties(extensions: Array): this; + + withDurable(durable: boolean): this; + + withExclusive(exclusive: boolean): this; + + withExtendsNode(extension: Array): this; + + withId(id: string): this; + + withIsExternalLink(isExternalLink: boolean): DomainElement; + + withName(name: string): this; + } + export class Amqp091Queue010 implements Amqp091Queue { + autoDelete: BoolField; + customDomainProperties: Array; + durable: BoolField; + exclusive: BoolField; + extendsNode: Array; + id: string; + isExternalLink: BoolField; + name: StrField; + position: Range; + + constructor(); + + annotations(): Annotations; + + graph(): Graph; + + withAutoDelete(autoDelete: boolean): this; + + withCustomDomainProperties(extensions: Array): this; + + withDurable(durable: boolean): this; + + withExclusive(exclusive: boolean): this; + + withExtendsNode(extension: Array): this; + + withId(id: string): this; + + withIsExternalLink(isExternalLink: boolean): DomainElement; + + withName(name: string): this; + } + export class Amqp091Queue020 implements Amqp091Queue { + autoDelete: BoolField; + customDomainProperties: Array; + durable: BoolField; + exclusive: BoolField; + extendsNode: Array; + id: string; + isExternalLink: BoolField; + name: StrField; + position: Range; vHost: StrField; constructor(); From 7961dc6e6ee93af81b34c15a6c9e8482d294a7df Mon Sep 17 00:00:00 2001 From: arielmirra Date: Wed, 17 Apr 2024 17:15:40 -0300 Subject: [PATCH 5/5] W-15425021: add binding version validation across all amqp bindings (as warning) --- .../async/parser/bindings/BindingParser.scala | 4 ++- .../channel/AmqpChannelBindingParser.scala | 6 ++-- .../message/Amqp091MessageBindingParser.scala | 20 +++++++++++-- .../Amqp091OperationBindingParser.scala | 2 +- .../client/model/domain/BindingsTest.scala | 28 +++++++++++++++++-- .../amqp-message-binding.expanded.jsonld | 2 +- .../amqp-message-binding.flattened.jsonld | 2 +- .../async20/amqp-message-binding.yaml | 2 +- 8 files changed, 54 insertions(+), 12 deletions(-) diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/BindingParser.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/BindingParser.scala index 880fa86a07..37a745979e 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/BindingParser.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/BindingParser.scala @@ -54,7 +54,9 @@ trait BindingParser[+Binding <: DomainElement] extends SpecParserOps { protected def getDefaultBindingVersion(binding: String, spec: Spec): String = { (binding, spec) match { - case ("Amqp091ChannelBinding", ASYNC20 | ASYNC21 | ASYNC22 | ASYNC23 | ASYNC24 | ASYNC25 | ASYNC26) => "0.1.0" + case ("Amqp091ChannelBinding", ASYNC20 | ASYNC21 | ASYNC22 | ASYNC23 | ASYNC24 | ASYNC25 | ASYNC26) => "0.1.0" + case ("Amqp091OperationBinding", ASYNC20 | ASYNC21 | ASYNC22 | ASYNC23 | ASYNC24 | ASYNC25 | ASYNC26) => "0.1.0" + case ("Amqp091MessageBinding", ASYNC20 | ASYNC21 | ASYNC22 | ASYNC23 | ASYNC24 | ASYNC25 | ASYNC26) => "0.1.0" } } diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/channel/AmqpChannelBindingParser.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/channel/AmqpChannelBindingParser.scala index a1d241b656..34f4089fda 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/channel/AmqpChannelBindingParser.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/channel/AmqpChannelBindingParser.scala @@ -34,8 +34,10 @@ object AmqpChannelBindingParser extends BindingParser[Amqp091ChannelBinding] { // bindingVersion is either well defined or defaults to 0.1.0 val binding: Amqp091ChannelBinding = bindingVersion match { - case "0.2.0" | "latest" => Amqp091ChannelBinding020(Annotations(entry)) - case "0.1.0" => Amqp091ChannelBinding010(Annotations(entry)) + case "0.3.0" | "latest" => // 0.3.0 only changes operation binding, channel binding is the same as 0.2.0 + Amqp091ChannelBinding020(Annotations(entry)) + case "0.2.0" => Amqp091ChannelBinding020(Annotations(entry)) + case "0.1.0" => Amqp091ChannelBinding010(Annotations(entry)) case invalidVersion => ctx.eh.warning( UnsupportedBindingVersionWarning, diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/message/Amqp091MessageBindingParser.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/message/Amqp091MessageBindingParser.scala index cea6e47ca2..dd71e1b998 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/message/Amqp091MessageBindingParser.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/message/Amqp091MessageBindingParser.scala @@ -4,14 +4,30 @@ import amf.apicontract.client.scala.model.domain.bindings.amqp.Amqp091MessageBin import amf.apicontract.internal.metamodel.domain.bindings.Amqp091MessageBindingModel import amf.apicontract.internal.spec.async.parser.bindings.BindingParser import amf.apicontract.internal.spec.async.parser.context.AsyncWebApiContext +import amf.apicontract.internal.validation.definitions.ParserSideValidations.UnsupportedBindingVersionWarning import amf.core.internal.parser.YMapOps import amf.core.internal.parser.domain.Annotations import org.yaml.model.{YMap, YMapEntry} object Amqp091MessageBindingParser extends BindingParser[Amqp091MessageBinding] { override def parse(entry: YMapEntry, parent: String)(implicit ctx: AsyncWebApiContext): Amqp091MessageBinding = { - val binding = Amqp091MessageBinding(Annotations(entry)) - val map = entry.value.as[YMap] + val bindingVersion = getBindingVersion(entry.value.as[YMap], "Amqp091MessageBinding", ctx.specSettings.spec) + + // bindingVersion is either well defined or defaults to 0.1.0 + val binding: Amqp091MessageBinding = bindingVersion match { + case "0.1.0" | "0.2.0" | "0.3.0" | "latest" => Amqp091MessageBinding(Annotations(entry)) + case invalidVersion => + ctx.eh.warning( + UnsupportedBindingVersionWarning, + Amqp091MessageBinding(Annotations(entry)), + Some("bindingVersion"), + s"Version $invalidVersion is not supported in an Amqp091ChannelBinding", + entry.value.location + ) + Amqp091MessageBinding(Annotations(entry)) + } + + val map = entry.value.as[YMap] map.key("contentEncoding", Amqp091MessageBindingModel.ContentEncoding in binding) map.key("messageType", Amqp091MessageBindingModel.MessageType in binding) diff --git a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/operation/Amqp091OperationBindingParser.scala b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/operation/Amqp091OperationBindingParser.scala index 3da0b715d1..399f643923 100644 --- a/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/operation/Amqp091OperationBindingParser.scala +++ b/amf-api-contract/shared/src/main/scala/amf/apicontract/internal/spec/async/parser/bindings/operation/Amqp091OperationBindingParser.scala @@ -19,7 +19,7 @@ import org.yaml.model.{YMap, YMapEntry} object Amqp091OperationBindingParser extends BindingParser[Amqp091OperationBinding] { override def parse(entry: YMapEntry, parent: String)(implicit ctx: AsyncWebApiContext): Amqp091OperationBinding = { - val bindingVersion = getBindingVersion(entry.value.as[YMap], "Amqp091ChannelBinding", ctx.specSettings.spec) + val bindingVersion = getBindingVersion(entry.value.as[YMap], "Amqp091OperationBinding", ctx.specSettings.spec) // bindingVersion is either well defined or defaults to 0.1.0 val binding: Amqp091OperationBinding = bindingVersion match { diff --git a/amf-api-contract/shared/src/test/scala/amf/client/model/domain/BindingsTest.scala b/amf-api-contract/shared/src/test/scala/amf/client/model/domain/BindingsTest.scala index 3b94d50f92..c21ba7e69a 100644 --- a/amf-api-contract/shared/src/test/scala/amf/client/model/domain/BindingsTest.scala +++ b/amf-api-contract/shared/src/test/scala/amf/client/model/domain/BindingsTest.scala @@ -111,8 +111,8 @@ class BindingsTest extends AnyFunSuite with Matchers with BeforeAndAfterAll { messageBinding.messageType.value() shouldBe s } - test("test Amqp091OperationBinding") { - val operationBinding = new Amqp091OperationBinding() + test("test Amqp091OperationBinding010") { + val operationBinding = new Amqp091OperationBinding010() .withExpiration(1) .withUserId(s) .withCc(stringSeq.asClient) @@ -135,9 +135,31 @@ class BindingsTest extends AnyFunSuite with Matchers with BeforeAndAfterAll { operationBinding.ack.value() shouldBe true } + test("test Amqp091OperationBinding030") { + val operationBinding = new Amqp091OperationBinding030() + .withExpiration(1) + .withUserId(s) + .withCc(stringSeq.asClient) + .withPriority(1) + .withDeliveryMode(1) + .withMandatory(true) + .withBcc(stringSeq.asClient) + .withTimestamp(true) + .withAck(true) + operationBinding.expiration.value() shouldBe 1 + operationBinding.userId.value() shouldBe s + operationBinding.cc.toString shouldBe clientStringList.toString + operationBinding.bcc.toString shouldBe clientStringList.toString + operationBinding.priority.value() shouldBe 1 + operationBinding.deliveryMode.value() shouldBe 1 + operationBinding.mandatory.value() shouldBe true + operationBinding.timestamp.value() shouldBe true + operationBinding.ack.value() shouldBe true + } + test("test ChannelBindings") { val internalChannelBindings: Seq[amf.apicontract.client.scala.model.domain.bindings.ChannelBinding] = - Seq(new Amqp091ChannelBinding010()._internal) + Seq(new Amqp091ChannelBinding010()._internal, new Amqp091ChannelBinding020()._internal) val clientChannelBindings = internalChannelBindings.asClient val channelBindings = new ChannelBindings() diff --git a/amf-cli/shared/src/test/resources/validations/async20/amqp-message-binding.expanded.jsonld b/amf-cli/shared/src/test/resources/validations/async20/amqp-message-binding.expanded.jsonld index d3278c0782..5241272d9b 100644 --- a/amf-cli/shared/src/test/resources/validations/async20/amqp-message-binding.expanded.jsonld +++ b/amf-cli/shared/src/test/resources/validations/async20/amqp-message-binding.expanded.jsonld @@ -87,7 +87,7 @@ ], "http://a.ml/vocabularies/apiBinding#bindingVersion": [ { - "@value": "31.07.92" + "@value": "0.1.0" } ], "http://a.ml/vocabularies/apiBinding#type": [ diff --git a/amf-cli/shared/src/test/resources/validations/async20/amqp-message-binding.flattened.jsonld b/amf-cli/shared/src/test/resources/validations/async20/amqp-message-binding.flattened.jsonld index 4bc50c51c3..d3bab0dff1 100644 --- a/amf-cli/shared/src/test/resources/validations/async20/amqp-message-binding.flattened.jsonld +++ b/amf-cli/shared/src/test/resources/validations/async20/amqp-message-binding.flattened.jsonld @@ -211,7 +211,7 @@ ], "http://a.ml/vocabularies/apiBinding#contentEncoding": "some/mime", "http://a.ml/vocabularies/apiBinding#messageType": "sometype", - "http://a.ml/vocabularies/apiBinding#bindingVersion": "31.07.92", + "http://a.ml/vocabularies/apiBinding#bindingVersion": "0.1.0", "http://a.ml/vocabularies/apiBinding#type": "amqp", "http://a.ml/vocabularies/document-source-maps#sources": [ { diff --git a/amf-cli/shared/src/test/resources/validations/async20/amqp-message-binding.yaml b/amf-cli/shared/src/test/resources/validations/async20/amqp-message-binding.yaml index abf3599cfb..825f6d4404 100644 --- a/amf-cli/shared/src/test/resources/validations/async20/amqp-message-binding.yaml +++ b/amf-cli/shared/src/test/resources/validations/async20/amqp-message-binding.yaml @@ -9,6 +9,6 @@ channels: message: bindings: amqp: - bindingVersion: 31.07.92 + bindingVersion: 0.1.0 messageType: sometype contentEncoding: some/mime \ No newline at end of file