diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/ChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/ChannelBinding.java new file mode 100644 index 00000000..76f28a1b --- /dev/null +++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/ChannelBinding.java @@ -0,0 +1,12 @@ +package com.asyncapi.v2._6_0.binding.channel; + +import lombok.EqualsAndHashCode; + +/** + * Describes AsyncAPI channel binding. + * + * @author Pavel Bodiachevskii + */ +@EqualsAndHashCode +public class ChannelBinding { +} diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/amqp/AMQPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/amqp/AMQPChannelBinding.java new file mode 100644 index 00000000..9f974c18 --- /dev/null +++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/amqp/AMQPChannelBinding.java @@ -0,0 +1,126 @@ +package com.asyncapi.v2._6_0.binding.channel.amqp; + +import com.asyncapi.v2._6_0.binding.channel.ChannelBinding; +import lombok.*; + +import javax.annotation.CheckForNull; + +/** + * Describes AMQP 0-9-1 channel binding. + *
+ * Contains information about the channel representation in AMQP. + * + * @version 0.2.0 + * @see AMQP channel binding + * @author Pavel Bodiachevskii + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class AMQPChannelBinding extends ChannelBinding { + + /** + * Defines what type of channel is it. Can be either queue or routingKey (default). + */ + @CheckForNull + private String is; + + /** + * When is=routingKey, this object defines the exchange properties. + */ + @CheckForNull + private ExchangeProperties exchange; + + /** + * When is=queue, this object defines the queue properties. + */ + @CheckForNull + private QueueProperties queue; + + @CheckForNull + @Builder.Default + private String bindingVersion = "0.2.0"; + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + @EqualsAndHashCode + public static class ExchangeProperties { + + /** + * The name of the exchange. It MUST NOT exceed 255 characters long. + */ + @CheckForNull + private String name; + + /** + * The type of the exchange. Can be either topic, direct, fanout, default or headers. + */ + @CheckForNull + private String type; + + /** + * Whether the exchange should survive broker restarts or not. + */ + @CheckForNull + private Boolean durable; + + /** + * Whether the exchange should be deleted when the last queue is unbound from it. + */ + @CheckForNull + private Boolean autoDelete; + + /** + * The virtual host of the exchange. Defaults to /. + */ + @CheckForNull + @Builder.Default + private String vhost = "/"; + + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor + @EqualsAndHashCode + public static class QueueProperties { + + /** + * The name of the queue. It MUST NOT exceed 255 characters long. + */ + @CheckForNull + private String name; + + /** + * Whether the queue should survive broker restarts or not. + */ + @CheckForNull + private Boolean durable; + + /** + * Whether the queue should be used only by one connection or not. + */ + @CheckForNull + private Boolean exclusive; + + /** + * Whether the queue should be deleted when the last consumer unsubscribes. + */ + @CheckForNull + private Boolean autoDelete; + + /** + * The virtual host of the queue. Defaults to /. + */ + @CheckForNull + @Builder.Default + private String vhost = "/"; + + } + +} diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/amqp1/AMQP1ChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/amqp1/AMQP1ChannelBinding.java new file mode 100644 index 00000000..cae3273a --- /dev/null +++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/amqp1/AMQP1ChannelBinding.java @@ -0,0 +1,21 @@ +package com.asyncapi.v2._6_0.binding.channel.amqp1; + +import com.asyncapi.v2.binding.ChannelBinding; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * This class MUST NOT contain any properties. Its name is reserved for future use. + *
+ * Describes AMQP 1.0 channel binding. + * + * @version 0.1.0 + * @see AMQP channel binding + * @author Pavel Bodiachevskii + */ +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class AMQP1ChannelBinding extends ChannelBinding { +} diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/anypointmq/AnypointMQChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/anypointmq/AnypointMQChannelBinding.java new file mode 100644 index 00000000..dd5aba8f --- /dev/null +++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/anypointmq/AnypointMQChannelBinding.java @@ -0,0 +1,48 @@ +package com.asyncapi.v2._6_0.binding.channel.anypointmq; + +import com.asyncapi.v2._6_0.binding.channel.ChannelBinding; +import lombok.*; + +import javax.annotation.CheckForNull; + +/** + * Describes Anypoint MQ channel binding. + * + * @version 0.0.1 + * @see Anypoint MQ channel binding + * @author Pavel Bodiachevskii + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class AnypointMQChannelBinding extends ChannelBinding { + + /** + * OPTIONAL, defaults to the channel name. + *
+ * The destination (queue or exchange) name for this channel. SHOULD only be specified if the channel name differs + * from the actual destination name, such as when the channel name is not a valid destination name in Anypoint MQ. + */ + @CheckForNull + private String destination; + + /** + * OPTIONAL, defaults to queue. + *
+ * The type of destination, which MUST be either exchange or queue or fifo-queue. + * SHOULD be specified to document the messaging model (publish/subscribe, point-to-point, strict message ordering) + * supported by this channel. + */ + @CheckForNull + private String destinationType; + + /** + * OPTIONAL, defaults to latest. The version of this binding. + */ + @CheckForNull + @Builder.Default + private String bindingVersion = "0.0.1"; + +} diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/googlepubsub/GooglePubSubChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/googlepubsub/GooglePubSubChannelBinding.java new file mode 100644 index 00000000..7a6fb154 --- /dev/null +++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/googlepubsub/GooglePubSubChannelBinding.java @@ -0,0 +1,116 @@ +package com.asyncapi.v2._6_0.binding.channel.googlepubsub; + +import com.asyncapi.v2._6_0.binding.message.MessageBinding; +import lombok.*; + +import javax.annotation.CheckForNull; +import java.util.List; +import java.util.Map; + +/** + * The Channel Bindings Object is used to describe the Google Cloud Pub/Sub specific Topic details with AsyncAPI. + *
+ * Describes Google Cloud Pub/Sub channel binding.
+ *
+ * @version 0.1.0
+ * @see Google Cloud Pub/Sub channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class GooglePubSubChannelBinding extends MessageBinding {
+
+ /**
+ * The Google Cloud Pub/Sub Topic name
+ */
+ private String topic;
+
+ /**
+ * An object of key-value pairs (These are used to categorize Cloud Resources like Cloud Pub/Sub Topics.)
+ */
+ @CheckForNull
+ private Map
+ * Describes HTTP channel binding.
+ *
+ * @version 0.1.0
+ * @see HTTP channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPChannelBinding extends ChannelBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/ibmmq/IBMMQChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/ibmmq/IBMMQChannelBinding.java
new file mode 100644
index 00000000..d6768ea2
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/ibmmq/IBMMQChannelBinding.java
@@ -0,0 +1,153 @@
+package com.asyncapi.v2._6_0.binding.channel.ibmmq;
+
+import com.asyncapi.v2._6_0.binding.channel.ChannelBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+import java.util.Map;
+
+/**
+ * Describes IBM MQ channel binding.
+ *
+ * This object contains information about the channel representation in IBM MQ. Each channel corresponds to a Queue or Topic within IBM MQ.
+ *
+ * @version 0.1.0
+ * @see Redis server binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class IBMMQChannelBinding extends ChannelBinding {
+
+ /**
+ * Defines the type of AsyncAPI channel.
+ *
+ * MUST be either topic or queue. For type topic, the AsyncAPI channel name MUST be assumed for the IBM MQ topic string unless overridden.
+ */
+ @CheckForNull
+ private String destinationType;
+
+ /**
+ * REQUIRED if destinationType = queue
+ *
+ * queue and topic fields MUST NOT coexist within a channel binding
+ */
+ @CheckForNull
+ private Queue queue;
+
+ /**
+ * Defines the properties of a topic.
+ *
+ * OPTIONAL if destinationType = topic
+ *
+ * queue and topic fields MUST NOT coexist within a channel binding.
+ */
+ @CheckForNull
+ private Topic topic;
+
+ /**
+ * The maximum length of the physical message (in bytes) accepted by the Topic or Queue. Messages produced that are
+ * greater in size than this value may fail to be delivered. More information on the maximum message length can be
+ * found on this page in the IBM MQ Knowledge Center.
+ *
+ * MUST be 0-104,857,600 bytes (100 MB).
+ */
+ @CheckForNull
+ private Integer maxMsgLength;
+
+ /**
+ * The version of this binding.
+ */
+ @Builder.Default
+ private String bindingVersion = "0.1.0";
+
+ /**
+ * Defines the properties of a queue.
+ */
+ @Data
+ @Builder
+ @NoArgsConstructor
+ @AllArgsConstructor
+ @EqualsAndHashCode
+ public static class Queue {
+
+ /**
+ * Defines the name of the IBM MQ queue associated with the channel.
+ *
+ * A value MUST be specified. MUST NOT exceed 48 characters in length. MUST be a valid IBM MQ queue name
+ */
+ @Nonnull
+ private String objectName;
+
+ /**
+ * Defines if the queue is a cluster queue and therefore partitioned. If true, a binding option MAY be specified
+ * when accessing the queue. More information on binding options can be found on this page in the IBM MQ Knowledge Center.
+ *
+ * If false, binding options SHOULD NOT be specified when accessing the queue.
+ */
+ @CheckForNull
+ @Builder.Default
+ private Boolean isPartitioned = false;
+
+ /**
+ * Specifies if it is recommended to open the queue exclusively.
+ */
+ @CheckForNull
+ @Builder.Default
+ private Boolean exclusive = false;
+
+ }
+
+ /**
+ * Defines the properties of a topic.
+ */
+ @Data
+ @Builder
+ @NoArgsConstructor
+ @AllArgsConstructor
+ @EqualsAndHashCode
+ public static class Topic {
+
+ /**
+ * The value of the IBM MQ topic string to be used.
+ *
+ * OPTIONAL
+ * Note: if specified, SHALL override AsyncAPI channel name.
+ *
+ * MUST NOT exceed 10240 characters in length. MAY coexist with topic.objectName
+ */
+ @CheckForNull
+ private String string;
+
+ /**
+ * The name of the IBM MQ topic object.
+ *
+ * OPTIONAL
+ * Note: if specified, SHALL override AsyncAPI channel name.
+ *
+ * MUST NOT exceed 48 characters in length. MAY coexist with topic.string
+ */
+ @CheckForNull
+ private String objectName;
+
+ /**
+ * Defines if the subscription may be durable.
+ */
+ @CheckForNull
+ @Builder.Default
+ private Boolean durablePermitted = true;
+
+ /**
+ * Defines if the last message published will be made available to new subscriptions.
+ */
+ @CheckForNull
+ @Builder.Default
+ private Boolean lastMsgRetained = false;
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/jms/JMSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/jms/JMSChannelBinding.java
new file mode 100644
index 00000000..84d902e4
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/jms/JMSChannelBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.channel.jms;
+
+import com.asyncapi.v2.binding.ChannelBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes JMS channel binding.
+ *
+ * @version 0.1.0
+ * @see JMS channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class JMSChannelBinding extends ChannelBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/kafka/KafkaChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/kafka/KafkaChannelBinding.java
new file mode 100644
index 00000000..759bb59a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/kafka/KafkaChannelBinding.java
@@ -0,0 +1,111 @@
+package com.asyncapi.v2._6_0.binding.channel.kafka;
+
+import com.asyncapi.v2._6_0.binding.channel.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+import java.util.List;
+
+/**
+ * Describes Kafka channel binding.
+ *
+ * @version 0.4.0
+ * @see Kafka channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class KafkaChannelBinding extends ChannelBinding {
+
+ /**
+ * Kafka topic name if different from channel name.
+ */
+ @CheckForNull
+ private String topic;
+
+ /**
+ * Number of partitions configured on this topic (useful to know how many parallel consumers you may run).
+ *
+ * MUST be positive.
+ */
+ @CheckForNull
+ private Integer partitions;
+
+ /**
+ * Number of replicas configured on this topic.
+ *
+ * MUST be positive.
+ */
+ @CheckForNull
+ private Integer replicas;
+
+ /**
+ * Topic configuration properties that are relevant for the API.
+ */
+ @CheckForNull
+ private TopicConfiguration topicConfiguration;
+
+ /**
+ * The version of this binding. If omitted, "latest" MUST be assumed.
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.4.0";
+
+ /**
+ * This objects contains information about the API relevant topic configuration in Kafka.
+ *
+ * @version 0.4.0
+ * @see Kafka channel binding
+ * @author Pavel Bodiachevskii
+ */
+ @Data
+ @Builder
+ @NoArgsConstructor
+ @AllArgsConstructor
+ public static class TopicConfiguration {
+
+ /**
+ * The cleanup.policy configuration option.
+ *
+ * array may only contain delete and/or compact
+ */
+ @CheckForNull
+ @JsonProperty("cleanup.policy")
+ private List
+ * Describes Mercure channel binding.
+ *
+ * @version 0.1.0
+ * @see Mercure channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MercureChannelBinding extends ChannelBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/mqtt/MQTTChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/mqtt/MQTTChannelBinding.java
new file mode 100644
index 00000000..fb2a8093
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/mqtt/MQTTChannelBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.channel.mqtt;
+
+import com.asyncapi.v2.binding.ChannelBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes MQTT channel binding.
+ *
+ * @version 0.1.0
+ * @see MQTT channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTTChannelBinding extends ChannelBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/mqtt5/MQTT5ChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/mqtt5/MQTT5ChannelBinding.java
new file mode 100644
index 00000000..6ff8f6ed
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/mqtt5/MQTT5ChannelBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.channel.mqtt5;
+
+import com.asyncapi.v2.binding.ChannelBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes MQTT 5 channel binding.
+ *
+ * @version 0.2.0
+ * @see MQTT 5 channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTT5ChannelBinding extends ChannelBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/nats/NATSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/nats/NATSChannelBinding.java
new file mode 100644
index 00000000..506f754e
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/nats/NATSChannelBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.channel.nats;
+
+import com.asyncapi.v2.binding.ChannelBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes NATS channel binding.
+ *
+ * @version 0.1.0
+ * @see NATS channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class NATSChannelBinding extends ChannelBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/pulsar/PulsarChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/pulsar/PulsarChannelBinding.java
new file mode 100644
index 00000000..e8125301
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/pulsar/PulsarChannelBinding.java
@@ -0,0 +1,103 @@
+package com.asyncapi.v2._6_0.binding.channel.pulsar;
+
+import com.asyncapi.v2._6_0.binding.operation.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+import java.util.List;
+
+/**
+ * Describes Pulsar channel binding.
+ *
+ * This object MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * @version 0.1.0
+ * @see Pulsar channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class PulsarChannelBinding extends OperationBinding {
+
+ /**
+ * The namespace the channel is associated with.
+ */
+ @Nonnull
+ private String namespace;
+
+ /**
+ * Persistence of the topic in Pulsar. It MUST be either persistent or non-persistent.
+ */
+ @Nonnull
+ private String persistence;
+
+ /**
+ * Topic compaction threshold given in Megabytes.
+ */
+ @CheckForNull
+ private Integer compaction;
+
+ /**
+ * A list of clusters the topic is replicated to.
+ */
+ @CheckForNull
+ @JsonProperty("geo-replication")
+ private List
+ * Describes Redis channel binding.
+ *
+ * @version 0.1.0
+ * @see Redis channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class RedisChannelBinding extends ChannelBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/sns/SNSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/sns/SNSChannelBinding.java
new file mode 100644
index 00000000..86d2a205
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/sns/SNSChannelBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.channel.sns;
+
+import com.asyncapi.v2.binding.ChannelBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes SNS channel binding.
+ *
+ * @version 0.1.0
+ * @see SNS channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SNSChannelBinding extends ChannelBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/solace/SolaceChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/solace/SolaceChannelBinding.java
new file mode 100644
index 00000000..55a6dfae
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/solace/SolaceChannelBinding.java
@@ -0,0 +1,20 @@
+package com.asyncapi.v2._6_0.binding.channel.solace;
+
+import com.asyncapi.v2._6_0.binding.channel.ChannelBinding;
+import lombok.*;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Solace channel binding.
+ *
+ * @version 0.3.0
+ * @see Solace channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceChannelBinding extends ChannelBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/sqs/SQSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/sqs/SQSChannelBinding.java
new file mode 100644
index 00000000..4f5f6356
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/sqs/SQSChannelBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.channel.sqs;
+
+import com.asyncapi.v2.binding.ChannelBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes SQS channel binding.
+ *
+ * @version 0.1.0
+ * @see SQS channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SQSChannelBinding extends ChannelBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/stomp/STOMPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/stomp/STOMPChannelBinding.java
new file mode 100644
index 00000000..13a28d2e
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/stomp/STOMPChannelBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.channel.stomp;
+
+import com.asyncapi.v2.binding.ChannelBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes STOMP channel binding.
+ *
+ * @version 0.1.0
+ * @see STOMP channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class STOMPChannelBinding extends ChannelBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/ws/WebSocketsChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/ws/WebSocketsChannelBinding.java
new file mode 100644
index 00000000..cbe403f2
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/channel/ws/WebSocketsChannelBinding.java
@@ -0,0 +1,61 @@
+package com.asyncapi.v2._6_0.binding.channel.ws;
+
+import com.asyncapi.v2._6_0.binding.channel.ChannelBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+
+/**
+ * Describes WebSockets channel binding.
+ *
+ * When using WebSockets, the channel represents the connection. Unlike other protocols that support multiple virtual
+ * channels (topics, routing keys, etc.) per connection, WebSockets doesn't support virtual channels or, put it another
+ * way, there's only one channel and its characteristics are strongly related to the protocol used for the handshake,
+ * i.e., HTTP.
+ *
+ * @version 0.1.0
+ * @see WebSockets channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class WebSocketsChannelBinding extends ChannelBinding {
+
+ /**
+ * The HTTP method to use when establishing the connection. Its value MUST be either GET or POST.
+ */
+ @CheckForNull
+ private String method;
+
+ /**
+ * TODO: Schema object
+ * A Schema object containing the definitions for each query parameter. This schema MUST be of type
+ * object and have a properties key.
+ *
+ * @see Schema object
+ */
+ @CheckForNull
+ private Object query;
+
+ /**
+ * TODO: Schema object
+ * A Schema object containing the definitions of the HTTP headers to use when establishing the connection.
+ * This schema MUST be of type object and have a properties key.
+ *
+ * @see Schema object
+ */
+ @CheckForNull
+ private Object headers;
+
+ /**
+ * The version of this binding. If omitted, "latest" MUST be assumed.
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.1.0";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/MessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/MessageBinding.java
new file mode 100644
index 00000000..74d91934
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/MessageBinding.java
@@ -0,0 +1,12 @@
+package com.asyncapi.v2._6_0.binding.message;
+
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes AsyncAPI message binding.
+ *
+ * @author Pavel Bodiachevskii
+ */
+@EqualsAndHashCode
+public class MessageBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/amqp/AMQPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/amqp/AMQPMessageBinding.java
new file mode 100644
index 00000000..ddaf07b2
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/amqp/AMQPMessageBinding.java
@@ -0,0 +1,43 @@
+package com.asyncapi.v2._6_0.binding.message.amqp;
+
+import com.asyncapi.v2._6_0.binding.message.MessageBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+
+/**
+ * Describes AMQP 0-9-1 message binding.
+ *
+ * Contains information about the message representation in AMQP.
+ *
+ * @version 0.2.0
+ * @see AMQP message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AMQPMessageBinding extends MessageBinding {
+
+ /**
+ * A MIME encoding for the message content.
+ */
+ @CheckForNull
+ private String contentEncoding;
+
+ /**
+ * Application-specific message type.
+ */
+ @CheckForNull
+ private String messageType;
+
+ /**
+ * The version of this binding. If omitted, "latest" MUST be assumed.
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.2.0";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/amqp1/AMQP1MessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/amqp1/AMQP1MessageBinding.java
new file mode 100644
index 00000000..085bb78f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/amqp1/AMQP1MessageBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.message.amqp1;
+
+import com.asyncapi.v2.binding.MessageBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes AMQP 1.0 message binding.
+ *
+ * @version 0.1.0
+ * @see AMQP message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AMQP1MessageBinding extends MessageBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/anypointmq/AnypointMQMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/anypointmq/AnypointMQMessageBinding.java
new file mode 100644
index 00000000..89aeb10c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/anypointmq/AnypointMQMessageBinding.java
@@ -0,0 +1,39 @@
+package com.asyncapi.v2._6_0.binding.message.anypointmq;
+
+import com.asyncapi.v2._6_0.binding.channel.ChannelBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+
+/**
+ * Describes Anypoint MQ message binding.
+ *
+ * @version 0.0.1
+ * @see Anypoint MQ channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AnypointMQMessageBinding extends ChannelBinding {
+
+ /**
+ * OPTIONAL.
+ *
+ * A Schema object containing the definitions for Anypoint MQ-specific headers (so-called protocol headers).
+ * This schema MUST be of type object and have a properties key. Examples of Anypoint MQ protocol headers are
+ * messageId and messageGroupId.
+ */
+ @CheckForNull
+ private Object headers;
+
+ /**
+ * OPTIONAL, defaults to latest. The version of this binding.
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.0.1";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/googlepubsub/GooglePubSubMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/googlepubsub/GooglePubSubMessageBinding.java
new file mode 100644
index 00000000..45dccf30
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/googlepubsub/GooglePubSubMessageBinding.java
@@ -0,0 +1,78 @@
+package com.asyncapi.v2._6_0.binding.message.googlepubsub;
+
+import com.asyncapi.v2._6_0.binding.message.MessageBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+
+/**
+ * The Message Binding Object is used to describe the Google Cloud Pub/Sub specific PubsubMessage details, alongside with
+ * pertintent parts of the Google Cloud Pub/Sub Schema Object, with AsyncAPI.
+ *
+ * Describes Google Cloud Pub/Sub message binding.
+ *
+ * @version 0.1.0
+ * @see Google Cloud Pub/Sub operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class GooglePubSubMessageBinding extends MessageBinding {
+
+ /**
+ * If non-empty, identifies related messages for which publish order should be respected (For more information, see ordering messages.)
+ */
+ @CheckForNull
+ private String orderingKey;
+
+ /**
+ * Attributes for this message (If this field is empty, the message must contain non-empty data. This can be used to
+ * filter messages on the subscription.)
+ */
+ @CheckForNull
+ private Object attributes;
+
+ /**
+ * Describes the schema used to validate the payload of this message
+ */
+ @CheckForNull
+ private SchemaDefinition schema;
+
+ /**
+ * OPTIONAL, defaults to latest. The version of this binding.
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.1.0";
+
+ /**
+ * The Schema Definition Object is used to describe the Google Cloud Pub/Sub Schema Object with AsyncAPI.
+ * While some of this information could be, or is, described using native AsyncAPI, for consistency it makes sense to
+ * provide this information here at all times, especially for cases where AsyncAPI does not natively support describing
+ * payloads using a supported Google Cloud Pub/Sub schema format like Protobuf.
+ */
+ @Data
+ @Builder
+ @NoArgsConstructor
+ @AllArgsConstructor
+ @EqualsAndHashCode
+ public static class SchemaDefinition {
+
+ /**
+ * The name of the schema
+ */
+ @CheckForNull
+ private String name;
+
+ /**
+ * The type of the schema
+ */
+ @CheckForNull
+ private String type;
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/http/HTTPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/http/HTTPMessageBinding.java
new file mode 100644
index 00000000..9b2822a0
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/http/HTTPMessageBinding.java
@@ -0,0 +1,40 @@
+package com.asyncapi.v2._6_0.binding.message.http;
+
+import com.asyncapi.v2.binding.MessageBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+
+/**
+ * Describes HTTP message binding.
+ *
+ * Contains information about the message representation in HTTP.
+ *
+ * @version 0.1.0
+ * @see HTTP message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPMessageBinding extends MessageBinding {
+
+ /**
+ * A Schema object containing the definitions for each query parameter. This schema MUST be of type object
+ * and have a properties key.
+ *
+ * @see Schema object
+ */
+ @CheckForNull
+ private Object headers;
+
+ /**
+ * The version of this binding. If omitted, "latest" MUST be assumed.
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.1.0";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/ibmmq/IBMMQMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/ibmmq/IBMMQMessageBinding.java
new file mode 100644
index 00000000..eb667134
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/ibmmq/IBMMQMessageBinding.java
@@ -0,0 +1,70 @@
+package com.asyncapi.v2._6_0.binding.message.ibmmq;
+
+import com.asyncapi.v2._6_0.binding.message.MessageBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+
+/**
+ * Describes IBM MQ message binding.
+ *
+ * This object contains information about the message representation in IBM MQ.
+ *
+ * @version 0.1.0
+ * @see IBM MQ server binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class IBMMQMessageBinding extends MessageBinding {
+
+ /**
+ * The type of the message.
+ *
+ * MUST be either string, jms or binary
+ */
+ @CheckForNull
+ private String type;
+
+ /**
+ * Defines the IBM MQ message headers to include with this message. More than one header can be specified as a comma
+ * separated list. Supporting information on IBM MQ message formats can be found on this page in the IBM MQ Knowledge Center.
+ *
+ * OPTIONAL if type = binary
+ *
+ * headers MUST NOT be specified if type = string or jms
+ */
+ @CheckForNull
+ private String headers;
+
+ /**
+ * Provides additional information for application developers: describes the message type or format.
+ *
+ * The description field of the IBM MQ message binding object MAY include CommonMark markdown formatting.
+ * A minimum markdown syntax as described by CommonMark 0.27 is assumed.
+ */
+ @CheckForNull
+ private String description;
+
+ /**
+ * The recommended setting the client should use for the TTL (Time-To-Live) of the message.
+ * This is a period of time expressed in milliseconds and set by the application that puts the message.
+ * expiry values are API dependant e.g., MQI and JMS use different units of time and default values for unlimited.
+ * General information on IBM MQ message expiry can be found on this page in the IBM MQ Knowledge Center.
+ *
+ * expiry value MUST be either zero (unlimited) or greater than zero.
+ */
+ @CheckForNull
+ private Integer expiry;
+
+ /**
+ * The version of this binding.
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.1.0";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/jms/JMSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/jms/JMSMessageBinding.java
new file mode 100644
index 00000000..cdd4a5ff
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/jms/JMSMessageBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.message.jms;
+
+import com.asyncapi.v2.binding.MessageBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes JMS message binding.
+ *
+ * @version 0.1.0
+ * @see JMS message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class JMSMessageBinding extends MessageBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/kafka/KafkaMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/kafka/KafkaMessageBinding.java
new file mode 100644
index 00000000..6d5c68ce
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/kafka/KafkaMessageBinding.java
@@ -0,0 +1,59 @@
+package com.asyncapi.v2._6_0.binding.message.kafka;
+
+import com.asyncapi.v2.binding.MessageBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+
+/**
+ * Describes Kafka message binding.
+ *
+ * Contains information about the message representation in Kafka.
+ *
+ * @version 0.1.0
+ * @see Kafka message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class KafkaMessageBinding extends MessageBinding {
+
+ /**
+ * TODO: Avro Schema
+ * The message key.
+ *
+ * @see Schema object
+ */
+ @CheckForNull
+ private Object key;
+
+ /**
+ * If a Schema Registry is used when performing this operation, tells where the id of schema is stored (e.g. header or payload).
+ */
+ @CheckForNull
+ private String schemaIdLocation;
+
+ /**
+ * Number of bytes or vendor specific values when schema id is encoded in payload (e.g confluent/ apicurio-legacy / apicurio-new).
+ */
+ @CheckForNull
+ private String schemaIdPayloadEncoding;
+
+ /**
+ * Freeform string for any naming strategy class to use. Clients should default to the vendor default if not supplied.
+ */
+ @CheckForNull
+ private String schemaLookupStrategy;
+
+ /**
+ * The version of this binding. If omitted, "latest" MUST be assumed.
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.4.0";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/mercure/MercureMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/mercure/MercureMessageBinding.java
new file mode 100644
index 00000000..479eced2
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/mercure/MercureMessageBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.message.mercure;
+
+import com.asyncapi.v2._6_0.binding.message.MessageBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Mercure message binding.
+ *
+ * @version 0.1.0
+ * @see Mercure message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MercureMessageBinding extends MessageBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/mqtt/MQTTMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/mqtt/MQTTMessageBinding.java
new file mode 100644
index 00000000..b12665e1
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/mqtt/MQTTMessageBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.v2._6_0.binding.message.mqtt;
+
+import com.asyncapi.v2.binding.MessageBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+
+/**
+ * Describes MQTT message binding.
+ *
+ * Contains information about the message representation in MQTT.
+ *
+ * @version 0.1.0
+ * @see MQTT message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTTMessageBinding extends MessageBinding {
+
+ /**
+ * The version of this binding. If omitted, "latest" MUST be assumed.
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.1.0";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/mqtt5/MQTT5MessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/mqtt5/MQTT5MessageBinding.java
new file mode 100644
index 00000000..ef9ba3c2
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/mqtt5/MQTT5MessageBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.message.mqtt5;
+
+import com.asyncapi.v2.binding.MessageBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes MQTT 5 message binding.
+ *
+ * @version 0.2.0
+ * @see MQTT 5 message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTT5MessageBinding extends MessageBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/nats/NATSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/nats/NATSMessageBinding.java
new file mode 100644
index 00000000..6c5c1555
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/nats/NATSMessageBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.message.nats;
+
+import com.asyncapi.v2.binding.MessageBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes NATS message binding.
+ *
+ * @version 0.1.0
+ * @see NATS message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class NATSMessageBinding extends MessageBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/pulsar/PulsarMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/pulsar/PulsarMessageBinding.java
new file mode 100644
index 00000000..144b866e
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/pulsar/PulsarMessageBinding.java
@@ -0,0 +1,20 @@
+package com.asyncapi.v2._6_0.binding.message.pulsar;
+
+import com.asyncapi.v2._6_0.binding.operation.OperationBinding;
+import lombok.*;
+
+/**
+ * Describes Pulsar message binding.
+ *
+ * This object MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * @version 0.1.0
+ * @see Pulsar message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class PulsarMessageBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/redis/RedisMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/redis/RedisMessageBinding.java
new file mode 100644
index 00000000..b11b3605
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/redis/RedisMessageBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.message.redis;
+
+import com.asyncapi.v2.binding.MessageBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Redis message binding.
+ *
+ * @version 0.1.0
+ * @see Redis message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class RedisMessageBinding extends MessageBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/sns/SNSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/sns/SNSMessageBinding.java
new file mode 100644
index 00000000..ec51c9d0
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/sns/SNSMessageBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.message.sns;
+
+import com.asyncapi.v2.binding.MessageBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes SNS message binding.
+ *
+ * @version 0.1.0
+ * @see SNS message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SNSMessageBinding extends MessageBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/solace/SolaceMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/solace/SolaceMessageBinding.java
new file mode 100644
index 00000000..01c9fb87
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/solace/SolaceMessageBinding.java
@@ -0,0 +1,20 @@
+package com.asyncapi.v2._6_0.binding.message.solace;
+
+import com.asyncapi.v2._6_0.binding.message.MessageBinding;
+import lombok.*;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Solace message binding.
+ *
+ * @version 0.3.0
+ * @see Solace message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceMessageBinding extends MessageBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/sqs/SQSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/sqs/SQSMessageBinding.java
new file mode 100644
index 00000000..3a08b503
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/sqs/SQSMessageBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.message.sqs;
+
+import com.asyncapi.v2.binding.MessageBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes SQS message binding.
+ *
+ * @version 0.1.0
+ * @see SQS message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SQSMessageBinding extends MessageBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/stomp/STOMPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/stomp/STOMPMessageBinding.java
new file mode 100644
index 00000000..55925820
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/stomp/STOMPMessageBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.message.stomp;
+
+import com.asyncapi.v2.binding.MessageBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes STOMP message binding.
+ *
+ * @version 0.1.0
+ * @see STOMP message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class STOMPMessageBinding extends MessageBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/ws/WebSocketsMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/ws/WebSocketsMessageBinding.java
new file mode 100644
index 00000000..1f5a1bda
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/message/ws/WebSocketsMessageBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.message.ws;
+
+import com.asyncapi.v2.binding.MessageBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes WebSockets message binding.
+ *
+ * @version 0.1.0
+ * @see WebSockets message binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class WebSocketsMessageBinding extends MessageBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/OperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/OperationBinding.java
new file mode 100644
index 00000000..b8f0fdb8
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/OperationBinding.java
@@ -0,0 +1,12 @@
+package com.asyncapi.v2._6_0.binding.operation;
+
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes AsyncAPI operation binding.
+ *
+ * @author Pavel Bodiachevskii
+ */
+@EqualsAndHashCode
+public class OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/amqp/AMQPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/amqp/AMQPOperationBinding.java
new file mode 100644
index 00000000..6131eef6
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/amqp/AMQPOperationBinding.java
@@ -0,0 +1,111 @@
+package com.asyncapi.v2._6_0.binding.operation.amqp;
+
+import com.asyncapi.v2.binding.OperationBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+import java.util.List;
+
+/**
+ * Describes AMQP 0-9-1 operation binding.
+ *
+ * Contains information about the operation representation in AMQP.
+ *
+ * @version 0.2.0
+ * @see AMQP operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AMQPOperationBinding extends OperationBinding {
+
+ /**
+ * TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.
+ */
+ @CheckForNull
+ private Integer expiration;
+
+ /**
+ * Identifies the user who has sent the message.
+ *
+ * Applies to: publish, subscribe
+ */
+ @CheckForNull
+ private String userId;
+
+ /**
+ * The routing keys the message should be routed to at the time of publishing.
+ *
+ * Applies to: publish, subscribe
+ */
+ @CheckForNull
+ private List
+ * Applies to: publish, subscribe
+ */
+ @CheckForNull
+ private Integer priority;
+
+ /**
+ * Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).
+ *
+ * Applies to: publish, subscribe
+ */
+ @CheckForNull
+ private Integer deliveryMode;
+
+ /**
+ * Whether the message is mandatory or not.
+ *
+ * Applies to: publish
+ */
+ @CheckForNull
+ private Boolean mandatory;
+
+ /**
+ * Like {@link #cc} but consumers will not receive this information.
+ *
+ * Applies to: publish
+ */
+ @CheckForNull
+ private List
+ * Applies to: publish, subscribe
+ */
+ @CheckForNull
+ private String replyTo;
+
+ /**
+ * Whether the message should include a timestamp or not.
+ *
+ * Applies to: publish, subscribe
+ */
+ @CheckForNull
+ private Boolean timestamp;
+
+ /**
+ * Whether the consumer should ack the message or not.
+ *
+ * Applies to: subscribe
+ */
+ @CheckForNull
+ private Boolean ack;
+
+ /**
+ * The version of this binding. If omitted, "latest" MUST be assumed.
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.2.0";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/amqp1/AMQP1OperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/amqp1/AMQP1OperationBinding.java
new file mode 100644
index 00000000..ced6ad5f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/amqp1/AMQP1OperationBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.operation.amqp1;
+
+import com.asyncapi.v2.binding.OperationBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes AMQP 1.0 operation binding.
+ *
+ * @version 0.1.0
+ * @see AMQP operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AMQP1OperationBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/anypointmq/AnypointMQOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/anypointmq/AnypointMQOperationBinding.java
new file mode 100644
index 00000000..96282a41
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/anypointmq/AnypointMQOperationBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.operation.anypointmq;
+
+import com.asyncapi.v2._6_0.binding.server.ServerBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Anypoint MQ operation binding.
+ *
+ * @version 0.0.1
+ * @see HTTP server binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AnypointMQOperationBinding extends ServerBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/googlepubsub/GooglePubSubOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/googlepubsub/GooglePubSubOperationBinding.java
new file mode 100644
index 00000000..93238e28
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/googlepubsub/GooglePubSubOperationBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.operation.googlepubsub;
+
+import com.asyncapi.v2._6_0.binding.operation.OperationBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Google Cloud Pub/Sub operation binding.
+ *
+ * @version 0.1.0
+ * @see Google Cloud Pub/Sub operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class GooglePubSubOperationBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/http/HTTPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/http/HTTPOperationBinding.java
new file mode 100644
index 00000000..a1df895f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/http/HTTPOperationBinding.java
@@ -0,0 +1,57 @@
+package com.asyncapi.v2._6_0.binding.operation.http;
+
+import com.asyncapi.v2.binding.OperationBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+/**
+ * Describes HTTP operation binding.
+ *
+ * Contains information about the operation representation in HTTP.
+ *
+ * @version 0.1.0
+ * @see HTTP operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPOperationBinding extends OperationBinding {
+
+ /**
+ * Required.
+ *
+ * Type of operation. Its value MUST be either request or response.
+ */
+ @Nonnull
+ private String type;
+
+ /**
+ * When type is request, this is the HTTP method, otherwise it MUST be ignored. Its value MUST be one of
+ * GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS, CONNECT, and TRACE.
+ */
+ @CheckForNull
+ private String method;
+
+ /**
+ * A Schema object containing the definitions for each query parameter. This schema MUST be of type object
+ * and have a properties key.
+ *
+ * @see Schema object
+ */
+ @CheckForNull
+ private Object query;
+
+ /**
+ * The version of this binding. If omitted, "latest" MUST be assumed.
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.1.0";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/ibmmq/IBMMQOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/ibmmq/IBMMQOperationBinding.java
new file mode 100644
index 00000000..38cb0278
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/ibmmq/IBMMQOperationBinding.java
@@ -0,0 +1,20 @@
+package com.asyncapi.v2._6_0.binding.operation.ibmmq;
+
+import com.asyncapi.v2._6_0.binding.operation.OperationBinding;
+import lombok.*;
+
+/**
+ * Describes IBM MQ operation binding.
+ *
+ * This object MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * @version 0.1.0
+ * @see Redis server binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class IBMMQOperationBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/jms/JMSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/jms/JMSOperationBinding.java
new file mode 100644
index 00000000..08b94e06
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/jms/JMSOperationBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.operation.jms;
+
+import com.asyncapi.v2.binding.OperationBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes JMS operation binding.
+ *
+ * @version 0.1.0
+ * @see JMS operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class JMSOperationBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/kafka/KafkaOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/kafka/KafkaOperationBinding.java
new file mode 100644
index 00000000..57ce0b69
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/kafka/KafkaOperationBinding.java
@@ -0,0 +1,50 @@
+package com.asyncapi.v2._6_0.binding.operation.kafka;
+
+import com.asyncapi.v2.binding.OperationBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+
+/**
+ * Describes Kafka operation binding.
+ *
+ * Contains information about the operation representation in Kafka.
+ *
+ * @version 0.1.0
+ * @see Kafka operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class KafkaOperationBinding extends OperationBinding {
+
+ /**
+ * TODO: Schema
+ * Id of the consumer group.
+ *
+ * @see Schema object
+ */
+ @CheckForNull
+ private Object groupId;
+
+ /**
+ * TODO: Schema
+ * Id of the consumer inside a consumer group.
+ *
+ * @see Schema object
+ */
+ @CheckForNull
+ private Object clientId;
+
+ /**
+ * The version of this binding. If omitted, "latest" MUST be assumed.
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.4.0";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/mercure/MercureOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/mercure/MercureOperationBinding.java
new file mode 100644
index 00000000..208a2b9b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/mercure/MercureOperationBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.operation.mercure;
+
+import com.asyncapi.v2._6_0.binding.operation.OperationBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Mercure operation binding.
+ *
+ * @version 0.1.0
+ * @see Mercure operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MercureOperationBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/mqtt/MQTTOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/mqtt/MQTTOperationBinding.java
new file mode 100644
index 00000000..9fe16c8d
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/mqtt/MQTTOperationBinding.java
@@ -0,0 +1,51 @@
+package com.asyncapi.v2._6_0.binding.operation.mqtt;
+
+import com.asyncapi.v2.binding.OperationBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+
+/**
+ * Describes MQTT operation binding.
+ *
+ * Contains information about the operation representation in MQTT.
+ *
+ * @version 0.1.0
+ * @see MQTT operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTTOperationBinding extends OperationBinding {
+
+ /**
+ * Defines how hard the broker/client will try to ensure that a message is received.
+ * Its value MUST be either 0, 1 or 2.
+ *
+ * Applies to: publish, subscribe
+ */
+ @CheckForNull
+ private Integer qos;
+
+ /**
+ * Whether the broker should retain the message or not.
+ *
+ * Applies to: publish, subscribe
+ */
+ @CheckForNull
+ private Boolean retain;
+
+ /**
+ * The version of this binding. If omitted, "latest" MUST be assumed.
+ *
+ * Applies to: publish, subscribe
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.1.0";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/mqtt5/MQTT5OperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/mqtt5/MQTT5OperationBinding.java
new file mode 100644
index 00000000..622dd69b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/mqtt5/MQTT5OperationBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.operation.mqtt5;
+
+import com.asyncapi.v2.binding.OperationBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes MQTT 5 operation binding.
+ *
+ * @version 0.2.0
+ * @see MQTT 5 operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTT5OperationBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/nats/NATSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/nats/NATSOperationBinding.java
new file mode 100644
index 00000000..f81d2646
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/nats/NATSOperationBinding.java
@@ -0,0 +1,37 @@
+package com.asyncapi.v2._6_0.binding.operation.nats;
+
+import com.asyncapi.v2.binding.OperationBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes NATS operation binding.
+ *
+ * @version 0.1.0
+ * @see NATS operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class NATSOperationBinding extends OperationBinding {
+
+ /**
+ * Defines the name of the queue to use. It MUST NOT exceed 255 characters.
+ */
+ @CheckForNull
+ private String queue;
+
+ /**
+ * The version of this binding. If omitted, "latest" MUST be assumed.
+ */
+ @CheckForNull
+ @Builder.Default
+ private String bindingVersion = "0.1.0";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/pulsar/PulsarOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/pulsar/PulsarOperationBinding.java
new file mode 100644
index 00000000..26c36917
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/pulsar/PulsarOperationBinding.java
@@ -0,0 +1,23 @@
+package com.asyncapi.v2._6_0.binding.operation.pulsar;
+
+import com.asyncapi.v2._6_0.binding.operation.OperationBinding;
+import com.asyncapi.v2._6_0.binding.server.ServerBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+
+/**
+ * Describes Pulsar server binding.
+ *
+ * This object MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * @version 0.1.0
+ * @see Redis server binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class PulsarOperationBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/redis/RedisOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/redis/RedisOperationBinding.java
new file mode 100644
index 00000000..3f701170
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/redis/RedisOperationBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.operation.redis;
+
+import com.asyncapi.v2.binding.OperationBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Redis operation binding.
+ *
+ * @version 0.1.0
+ * @see Redis operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class RedisOperationBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/sns/SNSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/sns/SNSOperationBinding.java
new file mode 100644
index 00000000..60544261
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/sns/SNSOperationBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.operation.sns;
+
+import com.asyncapi.v2.binding.OperationBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes SNS operation binding.
+ *
+ * @version 0.1.0
+ * @see SNS operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SNSOperationBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/solace/SolaceOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/solace/SolaceOperationBinding.java
new file mode 100644
index 00000000..5bcdb448
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/solace/SolaceOperationBinding.java
@@ -0,0 +1,122 @@
+package com.asyncapi.v2._6_0.binding.operation.solace;
+
+import com.asyncapi.v2._6_0.binding.operation.OperationBinding;
+import lombok.*;
+
+import javax.annotation.CheckForNull;
+import java.util.List;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Solace operation binding.
+ *
+ * @version 0.3.0
+ * @see Solace operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceOperationBinding extends OperationBinding {
+
+ @CheckForNull
+ private List
+ * Describes SQS operation binding.
+ *
+ * @version 0.1.0
+ * @see SQS operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SQSOperationBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/stomp/STOMPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/stomp/STOMPOperationBinding.java
new file mode 100644
index 00000000..af52d880
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/stomp/STOMPOperationBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.operation.stomp;
+
+import com.asyncapi.v2.binding.OperationBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes STOMP operation binding.
+ *
+ * @version 0.1.0
+ * @see STOMP operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class STOMPOperationBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/ws/WebSocketsOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/ws/WebSocketsOperationBinding.java
new file mode 100644
index 00000000..09c53b5a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/binding/operation/ws/WebSocketsOperationBinding.java
@@ -0,0 +1,21 @@
+package com.asyncapi.v2._6_0.binding.operation.ws;
+
+import com.asyncapi.v2.binding.OperationBinding;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes WebSockets operation binding.
+ *
+ * @version 0.1.0
+ * @see WebSockets operation binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class WebSocketsOperationBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/ChannelItem.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/ChannelItem.java
new file mode 100644
index 00000000..cdecdb0a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/ChannelItem.java
@@ -0,0 +1,91 @@
+package com.asyncapi.v2._6_0.model.channel;
+
+import com.asyncapi.v2.binding.ChannelBinding;
+import com.asyncapi.v2.binding.ChannelBindingsDeserializer;
+import com.asyncapi.v2.jackson.ChannelParametersDeserializer;
+import com.asyncapi.v2.model.channel.Parameter;
+import com.asyncapi.v2.model.channel.operation.Operation;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.annotation.CheckForNull;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Describes the operations available on a single channel.
+ *
+ * @version 2.6.0
+ * @see ChannelItem
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ChannelItem {
+
+ /**
+ * Allows for a referenced definition of this channel item. The referenced structure MUST be in the form of a {@link com.asyncapi.v2._6_0.model.channel.ChannelItem} Object.
+ * In case a Channel Item Object field appears both in the defined object and the referenced object, the behavior is undefined.
+ * Resolution is done as defined by the JSON Reference.
+ *
+ * Deprecated: Usage of the $ref property has been deprecated.
+ */
+ @CheckForNull
+ @JsonProperty("$ref")
+ private String ref;
+
+ /**
+ * An optional description of this channel item. CommonMark syntax can be used for rich text representation.
+ */
+ @CheckForNull
+ private String description;
+
+ /**
+ * The servers on which this channel is available, specified as an optional unordered list of names (string keys) of {@link com.asyncapi.v2._6_0.model.server.Server} Objects defined in the {@link com.asyncapi.v2._6_0.model.server.Server} Object (a map).
+ * If servers is absent or empty then this channel must be available on all servers defined in the Servers Object.
+ */
+ @CheckForNull
+ private List
+ * For example, an operation might describe a chat application use case where a user sends a text message to a group.
+ * A publish operation describes messages that are received by the chat application, whereas a subscribe operation describes messages that are sent by the chat application.
+ *
+ * @version 2.6.0
+ * @see Operation
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+public class Operation {
+
+ /**
+ * Unique string used to identify the operation.
+ *
+ * The id MUST be unique among all operations described in the API. The operationId value is case-sensitive.
+ * Tools and libraries MAY use the operationId to uniquely identify an operation, therefore, it is RECOMMENDED to
+ * follow common programming naming conventions.
+ */
+ @CheckForNull
+ private String operationId;
+
+ /**
+ * A short summary of what the operation is about.
+ */
+ @CheckForNull
+ private String summary;
+
+ /**
+ * A verbose explanation of the operation. CommonMark syntax can be used for rich text representation.
+ */
+ @CheckForNull
+ private String description;
+
+ /**
+ * A declaration of which security mechanisms are associated with this operation. Only one of the security
+ * requirement objects MUST be satisfied to authorize an operation. In cases where Server Security also applies,
+ * it MUST also be satisfied.
+ *
+ * Each name MUST correspond to a security scheme which is declared in the {@link com.asyncapi.v2._6_0.model.component.Components#getSecuritySchemes()} Security Schemes under the {@link com.asyncapi.v2._6_0.model.component.Components} Object.
+ * If the security scheme is of type "oauth2" or "openIdConnect", then the value is a list of scope names.
+ * Provide scopes that are required to establish successful connection with the server.
+ * If scopes are not needed, the list can be empty. For other security scheme types, the array MUST be empty.
+ */
+ @CheckForNull
+ private List
+ *
+ */
+ @CheckForNull
+ @JsonDeserialize(using = ChannelParametersDeserializer.class)
+ private Map