bindings = new HashMap<>();
+
+ node.fieldNames().forEachRemaining(
+ fieldName -> {
+ try {
+ bindings.put(fieldName, chooseKnownPojo(fieldName, node.get(fieldName), objectCodec));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ );
+
+ return bindings;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ChannelBinding.java
new file mode 100644
index 00000000..dbd6e2be
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ChannelBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes protocol-specific definition for a channel.
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @see Specification Extensions
+ * @see Channel Binding
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ChannelBinding extends ExtendableObject {
+
+ /**
+ * The version of this binding.
+ *
+ * If omitted, 'latest' MUST be assumed.
+ */
+ @Nullable
+ @JsonProperty("bindingVersion")
+ private String bindingVersion;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ChannelBindingsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ChannelBindingsDeserializer.java
new file mode 100644
index 00000000..72c06300
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ChannelBindingsDeserializer.java
@@ -0,0 +1,68 @@
+package com.asyncapi.bindings;
+
+import com.asyncapi.bindings.amqp.AMQPChannelBinding;
+import com.asyncapi.bindings.amqp1.AMQP1ChannelBinding;
+import com.asyncapi.bindings.anypointmq.AnypointMQChannelBinding;
+import com.asyncapi.bindings.googlepubsub.GooglePubSubChannelBinding;
+import com.asyncapi.bindings.http.HTTPChannelBinding;
+import com.asyncapi.bindings.ibmmq.IBMMQChannelBinding;
+import com.asyncapi.bindings.jms.JMSChannelBinding;
+import com.asyncapi.bindings.kafka.KafkaChannelBinding;
+import com.asyncapi.bindings.mercure.MercureChannelBinding;
+import com.asyncapi.bindings.mqtt.MQTTChannelBinding;
+import com.asyncapi.bindings.mqtt5.MQTT5ChannelBinding;
+import com.asyncapi.bindings.nats.NATSChannelBinding;
+import com.asyncapi.bindings.pulsar.PulsarChannelBinding;
+import com.asyncapi.bindings.redis.RedisChannelBinding;
+import com.asyncapi.bindings.sns.SNSChannelBinding;
+import com.asyncapi.bindings.solace.SolaceChannelBinding;
+import com.asyncapi.bindings.sqs.SQSChannelBinding;
+import com.asyncapi.bindings.stomp.STOMPChannelBinding;
+import com.asyncapi.bindings.websockets.WebSocketsChannelBinding;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.databind.JsonNode;
+
+import java.io.IOException;
+
+/**
+ * Serializes channel bindings map.
+ *
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+public class ChannelBindingsDeserializer extends BindingsMapDeserializer {
+
+ public Object chooseKnownPojo(String bindingKey, JsonNode binding, ObjectCodec objectCodec) throws IOException {
+ try (JsonParser jsonParser = binding.traverse(objectCodec)) {
+ if (binding.get("$ref" ) != null) {
+ return jsonParser.readValueAs(Reference.class);
+ }
+
+ switch (bindingKey) {
+ case "amqp": return jsonParser.readValueAs(AMQPChannelBinding.class);
+ case "amqp1": return jsonParser.readValueAs(AMQP1ChannelBinding.class);
+ case "anypointmq": return jsonParser.readValueAs(AnypointMQChannelBinding.class);
+ case "googlepubsub": return jsonParser.readValueAs(GooglePubSubChannelBinding.class);
+ case "http": return jsonParser.readValueAs(HTTPChannelBinding.class);
+ case "ibmmq": return jsonParser.readValueAs(IBMMQChannelBinding.class);
+ case "jms": return jsonParser.readValueAs(JMSChannelBinding.class);
+ case "kafka": return jsonParser.readValueAs(KafkaChannelBinding.class);
+ case "mercure": return jsonParser.readValueAs(MercureChannelBinding.class);
+ case "mqtt": return jsonParser.readValueAs(MQTTChannelBinding.class);
+ case "mqtt5": return jsonParser.readValueAs(MQTT5ChannelBinding.class);
+ case "nats": return jsonParser.readValueAs(NATSChannelBinding.class);
+ case "pulsar": return jsonParser.readValueAs(PulsarChannelBinding.class);
+ case "redis": return jsonParser.readValueAs(RedisChannelBinding.class);
+ case "sns": return jsonParser.readValueAs(SNSChannelBinding.class);
+ case "solace": return jsonParser.readValueAs(SolaceChannelBinding.class);
+ case "sqs": return jsonParser.readValueAs(SQSChannelBinding.class);
+ case "stomp": return jsonParser.readValueAs(STOMPChannelBinding.class);
+ case "ws": return jsonParser.readValueAs(WebSocketsChannelBinding.class);
+ default: return null;
+ }
+ }
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/MessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/MessageBinding.java
new file mode 100644
index 00000000..5cedaa93
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/MessageBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes AsyncAPI message binding.
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @see Specification Extensions
+ * @see Message Binding
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class MessageBinding extends ExtendableObject {
+
+ /**
+ * The version of this binding.
+ *
+ * If omitted, 'latest' MUST be assumed.
+ */
+ @Nullable
+ @JsonProperty("bindingVersion")
+ private String bindingVersion;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/MessageBindingsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/MessageBindingsDeserializer.java
new file mode 100644
index 00000000..c3b8af0a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/MessageBindingsDeserializer.java
@@ -0,0 +1,68 @@
+package com.asyncapi.bindings;
+
+import com.asyncapi.bindings.amqp.AMQPMessageBinding;
+import com.asyncapi.bindings.amqp1.AMQP1MessageBinding;
+import com.asyncapi.bindings.anypointmq.AnypointMQMessageBinding;
+import com.asyncapi.bindings.googlepubsub.GooglePubSubMessageBinding;
+import com.asyncapi.bindings.http.HTTPMessageBinding;
+import com.asyncapi.bindings.ibmmq.IBMMQMessageBinding;
+import com.asyncapi.bindings.jms.JMSMessageBinding;
+import com.asyncapi.bindings.kafka.KafkaMessageBinding;
+import com.asyncapi.bindings.mercure.MercureMessageBinding;
+import com.asyncapi.bindings.mqtt.MQTTMessageBinding;
+import com.asyncapi.bindings.mqtt5.MQTT5MessageBinding;
+import com.asyncapi.bindings.nats.NATSMessageBinding;
+import com.asyncapi.bindings.pulsar.PulsarMessageBinding;
+import com.asyncapi.bindings.redis.RedisMessageBinding;
+import com.asyncapi.bindings.sns.SNSMessageBinding;
+import com.asyncapi.bindings.solace.SolaceMessageBinding;
+import com.asyncapi.bindings.sqs.SQSMessageBinding;
+import com.asyncapi.bindings.stomp.STOMPMessageBinding;
+import com.asyncapi.bindings.websockets.WebSocketsMessageBinding;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.databind.JsonNode;
+
+import java.io.IOException;
+
+/**
+ * Serializes message bindings map.
+ *
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+public class MessageBindingsDeserializer extends BindingsMapDeserializer {
+
+ public Object chooseKnownPojo(String bindingKey, JsonNode binding, ObjectCodec objectCodec) throws IOException {
+ try (JsonParser jsonParser = binding.traverse(objectCodec)) {
+ if (binding.get("$ref" ) != null) {
+ return jsonParser.readValueAs(Reference.class);
+ }
+
+ switch (bindingKey) {
+ case "amqp": return jsonParser.readValueAs(AMQPMessageBinding.class);
+ case "amqp1": return jsonParser.readValueAs(AMQP1MessageBinding.class);
+ case "anypointmq": return jsonParser.readValueAs(AnypointMQMessageBinding.class);
+ case "googlepubsub": return jsonParser.readValueAs(GooglePubSubMessageBinding.class);
+ case "http": return jsonParser.readValueAs(HTTPMessageBinding.class);
+ case "ibmmq": return jsonParser.readValueAs(IBMMQMessageBinding.class);
+ case "jms": return jsonParser.readValueAs(JMSMessageBinding.class);
+ case "kafka": return jsonParser.readValueAs(KafkaMessageBinding.class);
+ case "mercure": return jsonParser.readValueAs(MercureMessageBinding.class);
+ case "mqtt": return jsonParser.readValueAs(MQTTMessageBinding.class);
+ case "mqtt5": return jsonParser.readValueAs(MQTT5MessageBinding.class);
+ case "nats": return jsonParser.readValueAs(NATSMessageBinding.class);
+ case "pulsar": return jsonParser.readValueAs(PulsarMessageBinding.class);
+ case "redis": return jsonParser.readValueAs(RedisMessageBinding.class);
+ case "sns": return jsonParser.readValueAs(SNSMessageBinding.class);
+ case "solace": return jsonParser.readValueAs(SolaceMessageBinding.class);
+ case "sqs": return jsonParser.readValueAs(SQSMessageBinding.class);
+ case "stomp": return jsonParser.readValueAs(STOMPMessageBinding.class);
+ case "ws": return jsonParser.readValueAs(WebSocketsMessageBinding.class);
+ default: return null;
+ }
+ }
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/OperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/OperationBinding.java
new file mode 100644
index 00000000..0b9ba524
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/OperationBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes protocol-specific definition for an operation.
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @see Specification Extensions
+ * @see Operation Binding
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class OperationBinding extends ExtendableObject {
+
+ /**
+ * The version of this binding.
+ *
+ * If omitted, 'latest' MUST be assumed.
+ */
+ @Nullable
+ @JsonProperty("bindingVersion")
+ private String bindingVersion;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/OperationBindingsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/OperationBindingsDeserializer.java
new file mode 100644
index 00000000..bffe1602
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/OperationBindingsDeserializer.java
@@ -0,0 +1,68 @@
+package com.asyncapi.bindings;
+
+import com.asyncapi.bindings.amqp.AMQPOperationBinding;
+import com.asyncapi.bindings.amqp1.AMQP1OperationBinding;
+import com.asyncapi.bindings.anypointmq.AnypointMQOperationBinding;
+import com.asyncapi.bindings.googlepubsub.GooglePubSubOperationBinding;
+import com.asyncapi.bindings.http.HTTPOperationBinding;
+import com.asyncapi.bindings.ibmmq.IBMMQOperationBinding;
+import com.asyncapi.bindings.jms.JMSOperationBinding;
+import com.asyncapi.bindings.kafka.KafkaOperationBinding;
+import com.asyncapi.bindings.mercure.MercureOperationBinding;
+import com.asyncapi.bindings.mqtt.MQTTOperationBinding;
+import com.asyncapi.bindings.mqtt5.MQTT5OperationBinding;
+import com.asyncapi.bindings.nats.NATSOperationBinding;
+import com.asyncapi.bindings.pulsar.PulsarOperationBinding;
+import com.asyncapi.bindings.redis.RedisOperationBinding;
+import com.asyncapi.bindings.sns.SNSOperationBinding;
+import com.asyncapi.bindings.solace.SolaceOperationBinding;
+import com.asyncapi.bindings.sqs.SQSOperationBinding;
+import com.asyncapi.bindings.stomp.STOMPOperationBinding;
+import com.asyncapi.bindings.websockets.WebSocketsOperationBinding;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.databind.JsonNode;
+
+import java.io.IOException;
+
+/**
+ * Serializes operation bindings map.
+ *
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+public class OperationBindingsDeserializer extends BindingsMapDeserializer {
+
+ public Object chooseKnownPojo(String bindingKey, JsonNode binding, ObjectCodec objectCodec) throws IOException {
+ try (JsonParser jsonParser = binding.traverse(objectCodec)) {
+ if (binding.get("$ref" ) != null) {
+ return jsonParser.readValueAs(Reference.class);
+ }
+
+ switch (bindingKey) {
+ case "amqp": return jsonParser.readValueAs(AMQPOperationBinding.class);
+ case "amqp1": return jsonParser.readValueAs(AMQP1OperationBinding.class);
+ case "anypointmq": return jsonParser.readValueAs(AnypointMQOperationBinding.class);
+ case "googlepubsub": return jsonParser.readValueAs(GooglePubSubOperationBinding.class);
+ case "http": return jsonParser.readValueAs(HTTPOperationBinding.class);
+ case "ibmmq": return jsonParser.readValueAs(IBMMQOperationBinding.class);
+ case "jms": return jsonParser.readValueAs(JMSOperationBinding.class);
+ case "kafka": return jsonParser.readValueAs(KafkaOperationBinding.class);
+ case "mercure": return jsonParser.readValueAs(MercureOperationBinding.class);
+ case "mqtt": return jsonParser.readValueAs(MQTTOperationBinding.class);
+ case "mqtt5": return jsonParser.readValueAs(MQTT5OperationBinding.class);
+ case "nats": return jsonParser.readValueAs(NATSOperationBinding.class);
+ case "pulsar": return jsonParser.readValueAs(PulsarOperationBinding.class);
+ case "redis": return jsonParser.readValueAs(RedisOperationBinding.class);
+ case "sns": return jsonParser.readValueAs(SNSOperationBinding.class);
+ case "solace": return jsonParser.readValueAs(SolaceOperationBinding.class);
+ case "sqs": return jsonParser.readValueAs(SQSOperationBinding.class);
+ case "stomp": return jsonParser.readValueAs(STOMPOperationBinding.class);
+ case "ws": return jsonParser.readValueAs(WebSocketsOperationBinding.class);
+ default: return null;
+ }
+ }
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ServerBinding.java
new file mode 100644
index 00000000..eb378ec2
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ServerBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes protocol-specific definition for a server.
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @see Specification Extensions
+ * @see Server Binding
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ServerBinding extends ExtendableObject {
+
+ /**
+ * The version of this binding.
+ *
+ * If omitted, 'latest' MUST be assumed.
+ */
+ @Nullable
+ @JsonProperty("bindingVersion")
+ private String bindingVersion;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ServerBindingsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ServerBindingsDeserializer.java
new file mode 100644
index 00000000..ae7157bd
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ServerBindingsDeserializer.java
@@ -0,0 +1,69 @@
+package com.asyncapi.bindings;
+
+import com.asyncapi.bindings.amqp.AMQPServerBinding;
+import com.asyncapi.bindings.amqp1.AMQP1ServerBinding;
+import com.asyncapi.bindings.anypointmq.AnypointMQServerBinding;
+import com.asyncapi.bindings.googlepubsub.GooglePubSubServerBinding;
+import com.asyncapi.bindings.http.HTTPServerBinding;
+import com.asyncapi.bindings.ibmmq.IBMMQServerBinding;
+import com.asyncapi.bindings.jms.JMSServerBinding;
+import com.asyncapi.bindings.kafka.KafkaServerBinding;
+import com.asyncapi.bindings.mercure.MercureServerBinding;
+import com.asyncapi.bindings.mqtt.MQTTServerBinding;
+import com.asyncapi.bindings.mqtt5.MQTT5ServerBinding;
+import com.asyncapi.bindings.nats.NATSServerBinding;
+import com.asyncapi.bindings.pulsar.PulsarServerBinding;
+import com.asyncapi.bindings.redis.RedisServerBinding;
+import com.asyncapi.bindings.sns.SNSServerBinding;
+import com.asyncapi.bindings.solace.SolaceServerBinding;
+import com.asyncapi.bindings.sqs.SQSServerBinding;
+import com.asyncapi.bindings.stomp.STOMPServerBinding;
+import com.asyncapi.bindings.websockets.WebSocketsServerBinding;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.databind.JsonNode;
+
+import java.io.IOException;
+
+/**
+ * Serializes server bindings map.
+ *
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+public class ServerBindingsDeserializer extends BindingsMapDeserializer {
+
+ @Override
+ public Object chooseKnownPojo(String bindingKey, JsonNode binding, ObjectCodec objectCodec) throws IOException {
+ try (JsonParser jsonParser = binding.traverse(objectCodec)) {
+ if (binding.get("$ref" ) != null) {
+ return jsonParser.readValueAs(Reference.class);
+ }
+
+ switch (bindingKey) {
+ case "amqp": return jsonParser.readValueAs(AMQPServerBinding.class);
+ case "amqp1": return jsonParser.readValueAs(AMQP1ServerBinding.class);
+ case "anypointmq": return jsonParser.readValueAs(AnypointMQServerBinding.class);
+ case "googlepubsub": return jsonParser.readValueAs(GooglePubSubServerBinding.class);
+ case "http": return jsonParser.readValueAs(HTTPServerBinding.class);
+ case "ibmmq": return jsonParser.readValueAs(IBMMQServerBinding.class);
+ case "jms": return jsonParser.readValueAs(JMSServerBinding.class);
+ case "kafka": return jsonParser.readValueAs(KafkaServerBinding.class);
+ case "mercure": return jsonParser.readValueAs(MercureServerBinding.class);
+ case "mqtt": return jsonParser.readValueAs(MQTTServerBinding.class);
+ case "mqtt5": return jsonParser.readValueAs(MQTT5ServerBinding.class);
+ case "nats": return jsonParser.readValueAs(NATSServerBinding.class);
+ case "pulsar": return jsonParser.readValueAs(PulsarServerBinding.class);
+ case "redis": return jsonParser.readValueAs(RedisServerBinding.class);
+ case "sns": return jsonParser.readValueAs(SNSServerBinding.class);
+ case "solace": return jsonParser.readValueAs(SolaceServerBinding.class);
+ case "sqs": return jsonParser.readValueAs(SQSServerBinding.class);
+ case "stomp": return jsonParser.readValueAs(STOMPServerBinding.class);
+ case "ws": return jsonParser.readValueAs(WebSocketsServerBinding.class);
+ default: return null;
+ }
+ }
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/AMQPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/AMQPChannelBinding.java
new file mode 100644
index 00000000..2f151e52
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/AMQPChannelBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.amqp;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes AMQP 0-9-1 channel binding.
+ *
+ * Contains information about the channel representation in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.amqp.v0._3_0.channel.AMQPChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp.v0._1_0.channel.AMQPChannelBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp.v0._2_0.channel.AMQPChannelBinding.class, name = "0.2.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp.v0._3_0.channel.AMQPChannelBinding.class, names = {
+ "0.3.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class AMQPChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/AMQPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/AMQPMessageBinding.java
new file mode 100644
index 00000000..66001f8d
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/AMQPMessageBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.amqp;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes AMQP 0-9-1 message binding.
+ *
+ * Contains information about the message representation in AMQP.
+ *
+ * @see AMQP message binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.amqp.v0._3_0.message.AMQPMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp.v0._1_0.message.AMQPMessageBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp.v0._2_0.message.AMQPMessageBinding.class, name = "0.2.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp.v0._3_0.message.AMQPMessageBinding.class, names = {
+ "0.3.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class AMQPMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/AMQPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/AMQPOperationBinding.java
new file mode 100644
index 00000000..5e306f90
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/AMQPOperationBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.amqp;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes AMQP 0-9-1 operation binding.
+ *
+ * Contains information about the operation representation in AMQP.
+ *
+ * @see AMQP operation binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.amqp.v0._3_0.operation.AMQPOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp.v0._1_0.operation.AMQPOperationBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp.v0._2_0.operation.AMQPOperationBinding.class, name = "0.2.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp.v0._3_0.operation.AMQPOperationBinding.class, names = {
+ "0.3.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class AMQPOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/AMQPServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/AMQPServerBinding.java
new file mode 100644
index 00000000..f605b79b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/AMQPServerBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.amqp;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes AMQP 0-9-1 server binding.
+ *
+ * Contains information about the server representation in AMQP.
+ *
+ * @see AMQP server binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.amqp.v0._3_0.server.AMQPServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp.v0._1_0.server.AMQPServerBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp.v0._2_0.server.AMQPServerBinding.class, name = "0.2.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp.v0._3_0.server.AMQPServerBinding.class, names = {
+ "0.3.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class AMQPServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/AMQPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/AMQPChannelBinding.java
new file mode 100644
index 00000000..826b5fd5
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/AMQPChannelBinding.java
@@ -0,0 +1,71 @@
+package com.asyncapi.bindings.amqp.v0._1_0.channel;
+
+import com.asyncapi.bindings.amqp.v0._1_0.channel.exchange.AMQPChannelExchangeProperties;
+import com.asyncapi.bindings.amqp.v0._1_0.channel.queue.AMQPChannelQueueProperties;
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes AMQP 0-9-1 channel binding.
+ *
+ * Contains information about the channel representation in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes AMQP 0-9-1 channel binding.")
+public class AMQPChannelBinding extends com.asyncapi.bindings.amqp.AMQPChannelBinding {
+
+ /**
+ * Defines what type of channel is it. Can be either queue or routingKey (default).
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "is", required = true, defaultValue = "routingKey")
+ @JsonPropertyDescription("Defines what type of channel is it. Can be either queue or routingKey (default).")
+ private AMQPChannelType is = AMQPChannelType.ROUTING_KEY;
+
+ /**
+ * When is=routingKey, this object defines the exchange properties.
+ */
+ @Nullable
+ @JsonProperty("exchange")
+ @JsonPropertyDescription("When is=routingKey, this object defines the exchange properties.")
+ private AMQPChannelExchangeProperties exchange;
+
+ /**
+ * When is=queue, this object defines the queue properties.
+ */
+ @Nullable
+ @JsonProperty("queue")
+ @JsonPropertyDescription("When is=queue, this object defines the queue properties.")
+ private AMQPChannelQueueProperties queue;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/AMQPChannelType.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/AMQPChannelType.java
new file mode 100644
index 00000000..e0214410
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/AMQPChannelType.java
@@ -0,0 +1,26 @@
+package com.asyncapi.bindings.amqp.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes AMQP 0-9-1 channel type.
+ *
+ * Contains information about the type of channel in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+public enum AMQPChannelType {
+
+ @JsonProperty("queue")
+ QUEUE,
+
+ @JsonProperty("routingKey")
+ @JsonAlias("routingKey")
+ ROUTING_KEY
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/exchange/AMQPChannelExchangeProperties.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/exchange/AMQPChannelExchangeProperties.java
new file mode 100644
index 00000000..86aabe36
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/exchange/AMQPChannelExchangeProperties.java
@@ -0,0 +1,68 @@
+package com.asyncapi.bindings.amqp.v0._1_0.channel.exchange;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes AMQP 0-9-1 channel exchange properties.
+ *
+ * Contains information about the channel exchange properties in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describes AMQP 0-9-1 channel exchange properties.")
+public class AMQPChannelExchangeProperties {
+
+ /**
+ * The name of the exchange. It MUST NOT exceed 255 characters long.
+ */
+ @Nullable
+ @javax.validation.constraints.Size(
+ max = 255,
+ message = "Exchange name must not exceed 255 characters long."
+ )
+ @JsonProperty("name")
+ @JsonPropertyDescription("The name of the exchange. It MUST NOT exceed 255 characters long.")
+ private String name;
+
+ /**
+ * The type of the exchange. Can be either topic, direct, fanout, default or headers.
+ */
+ @Nullable
+ @JsonProperty("type")
+ @JsonPropertyDescription("The type of the exchange. Can be either topic, direct, fanout, default or headers.")
+ private AMQPChannelExchangeType type;
+
+ /**
+ * Whether the exchange should survive broker restarts or not.
+ */
+ @Nullable
+ @JsonProperty("durable")
+ @JsonPropertyDescription("Whether the exchange should survive broker restarts or not.")
+ private Boolean durable;
+
+ /**
+ * Whether the exchange should be deleted when the last queue is unbound from it.
+ */
+ @Nullable
+ @JsonProperty("autoDelete")
+ @JsonPropertyDescription("Whether the exchange should be deleted when the last queue is unbound from it.")
+ private Boolean autoDelete;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/exchange/AMQPChannelExchangeType.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/exchange/AMQPChannelExchangeType.java
new file mode 100644
index 00000000..e3966497
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/exchange/AMQPChannelExchangeType.java
@@ -0,0 +1,35 @@
+package com.asyncapi.bindings.amqp.v0._1_0.channel.exchange;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes AMQP 0-9-1 channel exchange type.
+ *
+ * Contains information about the channel exchange type in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonClassDescription("Describes AMQP 0-9-1 channel exchange type.")
+public enum AMQPChannelExchangeType {
+
+ @JsonProperty("topic")
+ TOPIC,
+
+ @JsonProperty("direct")
+ DIRECT,
+
+ @JsonProperty("fanout")
+ FANOUT,
+
+ @JsonProperty("default")
+ DEFAULT,
+
+ @JsonProperty("headers")
+ HEADERS
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/queue/AMQPChannelQueueProperties.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/queue/AMQPChannelQueueProperties.java
new file mode 100644
index 00000000..28b56b26
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/channel/queue/AMQPChannelQueueProperties.java
@@ -0,0 +1,68 @@
+package com.asyncapi.bindings.amqp.v0._1_0.channel.queue;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes AMQP 0-9-1 channel queue properties.
+ *
+ * Contains information about the queue exchange properties in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describes AMQP 0-9-1 channel queue properties.")
+public class AMQPChannelQueueProperties {
+
+ /**
+ * The name of the queue. It MUST NOT exceed 255 characters long.
+ */
+ @Nullable
+ @javax.validation.constraints.Size(
+ max = 255,
+ message = "Queue name must not exceed 255 characters long."
+ )
+ @JsonProperty("name")
+ @JsonPropertyDescription("The name of the queue. It MUST NOT exceed 255 characters long.")
+ private String name;
+
+ /**
+ * Whether the queue should survive broker restarts or not.
+ */
+ @Nullable
+ @JsonProperty("durable")
+ @JsonPropertyDescription("Whether the queue should survive broker restarts or not.")
+ private Boolean durable;
+
+ /**
+ * Whether the queue should be used only by one connection or not.
+ */
+ @Nullable
+ @JsonProperty("exclusive")
+ @JsonPropertyDescription("Whether the queue should be used only by one connection or not.")
+ private Boolean exclusive;
+
+ /**
+ * Whether the queue should be deleted when the last consumer unsubscribes.
+ */
+ @Nullable
+ @JsonProperty("autoDelete")
+ @JsonPropertyDescription("Whether the queue should be deleted when the last consumer unsubscribes.")
+ private Boolean autoDelete;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/message/AMQPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/message/AMQPMessageBinding.java
new file mode 100644
index 00000000..249dd59f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/message/AMQPMessageBinding.java
@@ -0,0 +1,58 @@
+package com.asyncapi.bindings.amqp.v0._1_0.message;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes AMQP 0-9-1 message binding.
+ *
+ * Contains information about the message representation in AMQP.
+ *
+ * @see AMQP message binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes AMQP 0-9-1 message binding.")
+public class AMQPMessageBinding extends com.asyncapi.bindings.amqp.AMQPMessageBinding {
+
+ /**
+ * A MIME encoding for the message content.
+ */
+ @Nullable
+ @JsonProperty("contentEncoding")
+ @JsonPropertyDescription("A MIME encoding for the message content.")
+ private String contentEncoding;
+
+ /**
+ * Application-specific message type.
+ */
+ @Nullable
+ @JsonProperty("messageType")
+ @JsonPropertyDescription("Application-specific message type.")
+ private String messageType;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/operation/AMQPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/operation/AMQPOperationBinding.java
new file mode 100644
index 00000000..e4a15fe3
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/operation/AMQPOperationBinding.java
@@ -0,0 +1,156 @@
+package com.asyncapi.bindings.amqp.v0._1_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes AMQP 0-9-1 operation binding.
+ *
+ * Contains information about the operation representation in AMQP.
+ *
+ * @see AMQP operation binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes AMQP 0-9-1 operation binding.")
+public class AMQPOperationBinding extends com.asyncapi.bindings.amqp.AMQPOperationBinding {
+
+ /**
+ * TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "TTL (Time-To-Live) for the message must be greater than or equal to zero"
+ )
+ @JsonProperty("expiration")
+ @JsonPropertyDescription("TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.")
+ private Integer expiration;
+
+ /**
+ * Identifies the user who has sent the message.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("userId")
+ @JsonPropertyDescription("Identifies the user who has sent the message.")
+ private String userId;
+
+ /**
+ * The routing keys the message should be routed to at the time of publishing.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("cc")
+ @JsonPropertyDescription("The routing keys the message should be routed to at the time of publishing.")
+ private List cc;
+
+ /**
+ * A priority for the message.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("priority")
+ @JsonPropertyDescription("A priority for the message.")
+ private Integer priority;
+
+ /**
+ * Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 1,
+ message = "Delivery mode of the message must be either 1 (transient) or 2 (persistent)"
+ )
+ @javax.validation.constraints.Max(
+ value = 2,
+ message = "Delivery mode of the message must be either 1 (transient) or 2 (persistent)"
+ )
+ @JsonProperty("deliveryMode")
+ @JsonPropertyDescription("Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).")
+ private Integer deliveryMode;
+
+ /**
+ * Whether the message is mandatory or not.
+ *
+ * Applies to: publish
+ */
+ @Nullable
+ @JsonProperty("mandatory")
+ @JsonPropertyDescription("Whether the message is mandatory or not.")
+ private Boolean mandatory;
+
+ /**
+ * Like {@link #cc} but consumers will not receive this information.
+ *
+ * Applies to: publish
+ */
+ @Nullable
+ @JsonProperty("bcc")
+ @JsonPropertyDescription("Like cc but consumers will not receive this information.")
+ private List bcc;
+
+ /**
+ * Name of the queue where the consumer should send the response.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("replyTo")
+ @JsonPropertyDescription("Name of the queue where the consumer should send the response.")
+ private String replyTo;
+
+ /**
+ * Whether the message should include a timestamp or not.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("timestamp")
+ @JsonPropertyDescription("Whether the message should include a timestamp or not.")
+ private Boolean timestamp;
+
+ /**
+ * Whether the consumer should ack the message or not.
+ *
+ * Applies to: subscribe
+ */
+ @Nullable
+ @JsonProperty("ack")
+ @JsonPropertyDescription("Whether the consumer should ack the message or not.")
+ private Boolean ack;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/server/AMQPServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/server/AMQPServerBinding.java
new file mode 100644
index 00000000..1347bdc4
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_1_0/server/AMQPServerBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.amqp.v0._1_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * @see AMQP server binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AMQPServerBinding extends com.asyncapi.bindings.amqp.AMQPServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/AMQPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/AMQPChannelBinding.java
new file mode 100644
index 00000000..6ff30319
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/AMQPChannelBinding.java
@@ -0,0 +1,71 @@
+package com.asyncapi.bindings.amqp.v0._2_0.channel;
+
+import com.asyncapi.bindings.amqp.v0._2_0.channel.exchange.AMQPChannelExchangeProperties;
+import com.asyncapi.bindings.amqp.v0._2_0.channel.queue.AMQPChannelQueueProperties;
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes AMQP 0-9-1 channel binding.
+ *
+ * Contains information about the channel representation in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes AMQP 0-9-1 channel binding.")
+public class AMQPChannelBinding extends com.asyncapi.bindings.amqp.AMQPChannelBinding {
+
+ /**
+ * Defines what type of channel is it. Can be either queue or routingKey (default).
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "is", required = true, defaultValue = "routingKey")
+ @JsonPropertyDescription("Defines what type of channel is it. Can be either queue or routingKey (default).")
+ private AMQPChannelType is = AMQPChannelType.ROUTING_KEY;
+
+ /**
+ * When is=routingKey, this object defines the exchange properties.
+ */
+ @Nullable
+ @JsonProperty("exchange")
+ @JsonPropertyDescription("When is=routingKey, this object defines the exchange properties.")
+ private AMQPChannelExchangeProperties exchange;
+
+ /**
+ * When is=queue, this object defines the queue properties.
+ */
+ @Nullable
+ @JsonProperty("queue")
+ @JsonPropertyDescription("When is=queue, this object defines the queue properties.")
+ private AMQPChannelQueueProperties queue;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/AMQPChannelType.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/AMQPChannelType.java
new file mode 100644
index 00000000..6df297bb
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/AMQPChannelType.java
@@ -0,0 +1,26 @@
+package com.asyncapi.bindings.amqp.v0._2_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes AMQP 0-9-1 channel type.
+ *
+ * Contains information about the type of channel in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+public enum AMQPChannelType {
+
+ @JsonProperty("queue")
+ QUEUE,
+
+ @JsonProperty("routingKey")
+ @JsonAlias("routingKey")
+ ROUTING_KEY
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/exchange/AMQPChannelExchangeProperties.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/exchange/AMQPChannelExchangeProperties.java
new file mode 100644
index 00000000..18471275
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/exchange/AMQPChannelExchangeProperties.java
@@ -0,0 +1,77 @@
+package com.asyncapi.bindings.amqp.v0._2_0.channel.exchange;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes AMQP 0-9-1 channel exchange properties.
+ *
+ * Contains information about the channel exchange properties in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describes AMQP 0-9-1 channel exchange properties.")
+public class AMQPChannelExchangeProperties {
+
+ /**
+ * The name of the exchange. It MUST NOT exceed 255 characters long.
+ */
+ @Nullable
+ @javax.validation.constraints.Size(
+ max = 255,
+ message = "Exchange name must not exceed 255 characters long."
+ )
+ @JsonProperty("name")
+ @JsonPropertyDescription("The name of the exchange. It MUST NOT exceed 255 characters long.")
+ private String name;
+
+ /**
+ * The type of the exchange. Can be either topic, direct, fanout, default or headers.
+ */
+ @Nullable
+ @JsonProperty("type")
+ @JsonPropertyDescription("The type of the exchange. Can be either topic, direct, fanout, default or headers.")
+ private AMQPChannelExchangeType type;
+
+ /**
+ * Whether the exchange should survive broker restarts or not.
+ */
+ @Nullable
+ @JsonProperty("durable")
+ @JsonPropertyDescription("Whether the exchange should survive broker restarts or not.")
+ private Boolean durable;
+
+ /**
+ * Whether the exchange should be deleted when the last queue is unbound from it.
+ */
+ @Nullable
+ @JsonProperty("autoDelete")
+ @JsonPropertyDescription("Whether the exchange should be deleted when the last queue is unbound from it.")
+ private Boolean autoDelete;
+
+ /**
+ * The virtual host of the exchange. Defaults to /.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "vhost", defaultValue = "/")
+ @JsonPropertyDescription("The virtual host of the exchange. Defaults to /.")
+ private String vhost = "/";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/exchange/AMQPChannelExchangeType.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/exchange/AMQPChannelExchangeType.java
new file mode 100644
index 00000000..c6c1c4de
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/exchange/AMQPChannelExchangeType.java
@@ -0,0 +1,35 @@
+package com.asyncapi.bindings.amqp.v0._2_0.channel.exchange;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes AMQP 0-9-1 channel exchange type.
+ *
+ * Contains information about the channel exchange type in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@JsonClassDescription("Describes AMQP 0-9-1 channel exchange type.")
+public enum AMQPChannelExchangeType {
+
+ @JsonProperty("topic")
+ TOPIC,
+
+ @JsonProperty("direct")
+ DIRECT,
+
+ @JsonProperty("fanout")
+ FANOUT,
+
+ @JsonProperty("default")
+ DEFAULT,
+
+ @JsonProperty("headers")
+ HEADERS
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/queue/AMQPChannelQueueProperties.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/queue/AMQPChannelQueueProperties.java
new file mode 100644
index 00000000..8a55855c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/channel/queue/AMQPChannelQueueProperties.java
@@ -0,0 +1,77 @@
+package com.asyncapi.bindings.amqp.v0._2_0.channel.queue;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes AMQP 0-9-1 channel queue properties.
+ *
+ * Contains information about the queue exchange properties in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describes AMQP 0-9-1 channel queue properties.")
+public class AMQPChannelQueueProperties {
+
+ /**
+ * The name of the queue. It MUST NOT exceed 255 characters long.
+ */
+ @Nullable
+ @javax.validation.constraints.Size(
+ max = 255,
+ message = "Queue name must not exceed 255 characters long."
+ )
+ @JsonProperty("name")
+ @JsonPropertyDescription("The name of the queue. It MUST NOT exceed 255 characters long.")
+ private String name;
+
+ /**
+ * Whether the queue should survive broker restarts or not.
+ */
+ @Nullable
+ @JsonProperty("durable")
+ @JsonPropertyDescription("Whether the queue should survive broker restarts or not.")
+ private Boolean durable;
+
+ /**
+ * Whether the queue should be used only by one connection or not.
+ */
+ @Nullable
+ @JsonProperty("exclusive")
+ @JsonPropertyDescription("Whether the queue should be used only by one connection or not.")
+ private Boolean exclusive;
+
+ /**
+ * Whether the queue should be deleted when the last consumer unsubscribes.
+ */
+ @Nullable
+ @JsonProperty("autoDelete")
+ @JsonPropertyDescription("Whether the queue should be deleted when the last consumer unsubscribes.")
+ private Boolean autoDelete;
+
+ /**
+ * The virtual host of the queue. Defaults to /.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "vhost", defaultValue = "/")
+ @JsonPropertyDescription("The virtual host of the queue. Defaults to /.")
+ private String vhost = "/";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/message/AMQPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/message/AMQPMessageBinding.java
new file mode 100644
index 00000000..5a1b0b8b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/message/AMQPMessageBinding.java
@@ -0,0 +1,58 @@
+package com.asyncapi.bindings.amqp.v0._2_0.message;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes AMQP 0-9-1 message binding.
+ *
+ * Contains information about the message representation in AMQP.
+ *
+ * @see AMQP message binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes AMQP 0-9-1 message binding.")
+public class AMQPMessageBinding extends com.asyncapi.bindings.amqp.AMQPMessageBinding {
+
+ /**
+ * A MIME encoding for the message content.
+ */
+ @Nullable
+ @JsonProperty("contentEncoding")
+ @JsonPropertyDescription("A MIME encoding for the message content.")
+ private String contentEncoding;
+
+ /**
+ * Application-specific message type.
+ */
+ @Nullable
+ @JsonProperty("messageType")
+ @JsonPropertyDescription("Application-specific message type.")
+ private String messageType;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/operation/AMQPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/operation/AMQPOperationBinding.java
new file mode 100644
index 00000000..6c5f26ed
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/operation/AMQPOperationBinding.java
@@ -0,0 +1,156 @@
+package com.asyncapi.bindings.amqp.v0._2_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes AMQP 0-9-1 operation binding.
+ *
+ * Contains information about the operation representation in AMQP.
+ *
+ * @see AMQP operation binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes AMQP 0-9-1 operation binding.")
+public class AMQPOperationBinding extends com.asyncapi.bindings.amqp.AMQPOperationBinding {
+
+ /**
+ * TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "TTL (Time-To-Live) for the message must be greater than or equal to zero"
+ )
+ @JsonProperty("expiration")
+ @JsonPropertyDescription("TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.")
+ private Integer expiration;
+
+ /**
+ * Identifies the user who has sent the message.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("userId")
+ @JsonPropertyDescription("Identifies the user who has sent the message.")
+ private String userId;
+
+ /**
+ * The routing keys the message should be routed to at the time of publishing.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("cc")
+ @JsonPropertyDescription("The routing keys the message should be routed to at the time of publishing.")
+ private List cc;
+
+ /**
+ * A priority for the message.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("priority")
+ @JsonPropertyDescription("A priority for the message.")
+ private Integer priority;
+
+ /**
+ * Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 1,
+ message = "Delivery mode of the message must be either 1 (transient) or 2 (persistent)"
+ )
+ @javax.validation.constraints.Max(
+ value = 2,
+ message = "Delivery mode of the message must be either 1 (transient) or 2 (persistent)"
+ )
+ @JsonProperty("deliveryMode")
+ @JsonPropertyDescription("Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).")
+ private Integer deliveryMode;
+
+ /**
+ * Whether the message is mandatory or not.
+ *
+ * Applies to: publish
+ */
+ @Nullable
+ @JsonProperty("mandatory")
+ @JsonPropertyDescription("Whether the message is mandatory or not.")
+ private Boolean mandatory;
+
+ /**
+ * Like {@link #cc} but consumers will not receive this information.
+ *
+ * Applies to: publish
+ */
+ @Nullable
+ @JsonProperty("bcc")
+ @JsonPropertyDescription("Like cc but consumers will not receive this information.")
+ private List bcc;
+
+ /**
+ * Name of the queue where the consumer should send the response.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("replyTo")
+ @JsonPropertyDescription("Name of the queue where the consumer should send the response.")
+ private String replyTo;
+
+ /**
+ * Whether the message should include a timestamp or not.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("timestamp")
+ @JsonPropertyDescription("Whether the message should include a timestamp or not.")
+ private Boolean timestamp;
+
+ /**
+ * Whether the consumer should ack the message or not.
+ *
+ * Applies to: subscribe
+ */
+ @Nullable
+ @JsonProperty("ack")
+ @JsonPropertyDescription("Whether the consumer should ack the message or not.")
+ private Boolean ack;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/server/AMQPServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/server/AMQPServerBinding.java
new file mode 100644
index 00000000..305e7df9
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_2_0/server/AMQPServerBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.amqp.v0._2_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * @see AMQP server binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AMQPServerBinding extends com.asyncapi.bindings.amqp.AMQPServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/AMQPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/AMQPChannelBinding.java
new file mode 100644
index 00000000..2edb0f0b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/AMQPChannelBinding.java
@@ -0,0 +1,71 @@
+package com.asyncapi.bindings.amqp.v0._3_0.channel;
+
+import com.asyncapi.bindings.amqp.v0._3_0.channel.exchange.AMQPChannelExchangeProperties;
+import com.asyncapi.bindings.amqp.v0._3_0.channel.queue.AMQPChannelQueueProperties;
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes AMQP 0-9-1 channel binding.
+ *
+ * Contains information about the channel representation in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes AMQP 0-9-1 channel binding.")
+public class AMQPChannelBinding extends com.asyncapi.bindings.amqp.AMQPChannelBinding {
+
+ /**
+ * Defines what type of channel is it. Can be either queue or routingKey (default).
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "is", required = true, defaultValue = "routingKey")
+ @JsonPropertyDescription("Defines what type of channel is it. Can be either queue or routingKey (default).")
+ private AMQPChannelType is = AMQPChannelType.ROUTING_KEY;
+
+ /**
+ * When is=routingKey, this object defines the exchange properties.
+ */
+ @Nullable
+ @JsonProperty("exchange")
+ @JsonPropertyDescription("When is=routingKey, this object defines the exchange properties.")
+ private AMQPChannelExchangeProperties exchange;
+
+ /**
+ * When is=queue, this object defines the queue properties.
+ */
+ @Nullable
+ @JsonProperty("queue")
+ @JsonPropertyDescription("When is=queue, this object defines the queue properties.")
+ private AMQPChannelQueueProperties queue;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/AMQPChannelType.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/AMQPChannelType.java
new file mode 100644
index 00000000..9e5aeed9
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/AMQPChannelType.java
@@ -0,0 +1,26 @@
+package com.asyncapi.bindings.amqp.v0._3_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonAlias;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes AMQP 0-9-1 channel type.
+ *
+ * Contains information about the type of channel in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+public enum AMQPChannelType {
+
+ @JsonProperty("queue")
+ QUEUE,
+
+ @JsonProperty("routingKey")
+ @JsonAlias("routingKey")
+ ROUTING_KEY
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/exchange/AMQPChannelExchangeProperties.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/exchange/AMQPChannelExchangeProperties.java
new file mode 100644
index 00000000..5eb623df
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/exchange/AMQPChannelExchangeProperties.java
@@ -0,0 +1,77 @@
+package com.asyncapi.bindings.amqp.v0._3_0.channel.exchange;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes AMQP 0-9-1 channel exchange properties.
+ *
+ * Contains information about the channel exchange properties in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describes AMQP 0-9-1 channel exchange properties.")
+public class AMQPChannelExchangeProperties {
+
+ /**
+ * The name of the exchange. It MUST NOT exceed 255 characters long.
+ */
+ @Nullable
+ @javax.validation.constraints.Size(
+ max = 255,
+ message = "Exchange name must not exceed 255 characters long."
+ )
+ @JsonProperty("name")
+ @JsonPropertyDescription("The name of the exchange. It MUST NOT exceed 255 characters long.")
+ private String name;
+
+ /**
+ * The type of the exchange. Can be either topic, direct, fanout, default or headers.
+ */
+ @Nullable
+ @JsonProperty("type")
+ @JsonPropertyDescription("The type of the exchange. Can be either topic, direct, fanout, default or headers.")
+ private AMQPChannelExchangeType type;
+
+ /**
+ * Whether the exchange should survive broker restarts or not.
+ */
+ @Nullable
+ @JsonProperty("durable")
+ @JsonPropertyDescription("Whether the exchange should survive broker restarts or not.")
+ private Boolean durable;
+
+ /**
+ * Whether the exchange should be deleted when the last queue is unbound from it.
+ */
+ @Nullable
+ @JsonProperty("autoDelete")
+ @JsonPropertyDescription("Whether the exchange should be deleted when the last queue is unbound from it.")
+ private Boolean autoDelete;
+
+ /**
+ * The virtual host of the exchange. Defaults to /.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "vhost", defaultValue = "/")
+ @JsonPropertyDescription("The virtual host of the exchange. Defaults to /.")
+ private String vhost = "/";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/exchange/AMQPChannelExchangeType.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/exchange/AMQPChannelExchangeType.java
new file mode 100644
index 00000000..a314b112
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/exchange/AMQPChannelExchangeType.java
@@ -0,0 +1,35 @@
+package com.asyncapi.bindings.amqp.v0._3_0.channel.exchange;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes AMQP 0-9-1 channel exchange type.
+ *
+ * Contains information about the channel exchange type in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@JsonClassDescription("Describes AMQP 0-9-1 channel exchange type.")
+public enum AMQPChannelExchangeType {
+
+ @JsonProperty("topic")
+ TOPIC,
+
+ @JsonProperty("direct")
+ DIRECT,
+
+ @JsonProperty("fanout")
+ FANOUT,
+
+ @JsonProperty("default")
+ DEFAULT,
+
+ @JsonProperty("headers")
+ HEADERS
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/queue/AMQPChannelQueueProperties.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/queue/AMQPChannelQueueProperties.java
new file mode 100644
index 00000000..a84f0183
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/channel/queue/AMQPChannelQueueProperties.java
@@ -0,0 +1,77 @@
+package com.asyncapi.bindings.amqp.v0._3_0.channel.queue;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes AMQP 0-9-1 channel queue properties.
+ *
+ * Contains information about the queue exchange properties in AMQP.
+ *
+ * @see AMQP channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describes AMQP 0-9-1 channel queue properties.")
+public class AMQPChannelQueueProperties {
+
+ /**
+ * The name of the queue. It MUST NOT exceed 255 characters long.
+ */
+ @Nullable
+ @javax.validation.constraints.Size(
+ max = 255,
+ message = "Queue name must not exceed 255 characters long."
+ )
+ @JsonProperty("name")
+ @JsonPropertyDescription("The name of the queue. It MUST NOT exceed 255 characters long.")
+ private String name;
+
+ /**
+ * Whether the queue should survive broker restarts or not.
+ */
+ @Nullable
+ @JsonProperty("durable")
+ @JsonPropertyDescription("Whether the queue should survive broker restarts or not.")
+ private Boolean durable;
+
+ /**
+ * Whether the queue should be used only by one connection or not.
+ */
+ @Nullable
+ @JsonProperty("exclusive")
+ @JsonPropertyDescription("Whether the queue should be used only by one connection or not.")
+ private Boolean exclusive;
+
+ /**
+ * Whether the queue should be deleted when the last consumer unsubscribes.
+ */
+ @Nullable
+ @JsonProperty("autoDelete")
+ @JsonPropertyDescription("Whether the queue should be deleted when the last consumer unsubscribes.")
+ private Boolean autoDelete;
+
+ /**
+ * The virtual host of the queue. Defaults to /.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "vhost", defaultValue = "/")
+ @JsonPropertyDescription("The virtual host of the queue. Defaults to /.")
+ private String vhost = "/";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/message/AMQPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/message/AMQPMessageBinding.java
new file mode 100644
index 00000000..7cad35c5
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/message/AMQPMessageBinding.java
@@ -0,0 +1,58 @@
+package com.asyncapi.bindings.amqp.v0._3_0.message;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes AMQP 0-9-1 message binding.
+ *
+ * Contains information about the message representation in AMQP.
+ *
+ * @see AMQP message binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes AMQP 0-9-1 message binding.")
+public class AMQPMessageBinding extends com.asyncapi.bindings.amqp.AMQPMessageBinding {
+
+ /**
+ * A MIME encoding for the message content.
+ */
+ @Nullable
+ @JsonProperty("contentEncoding")
+ @JsonPropertyDescription("A MIME encoding for the message content.")
+ private String contentEncoding;
+
+ /**
+ * Application-specific message type.
+ */
+ @Nullable
+ @JsonProperty("messageType")
+ @JsonPropertyDescription("Application-specific message type.")
+ private String messageType;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/operation/AMQPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/operation/AMQPOperationBinding.java
new file mode 100644
index 00000000..d5d3a181
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/operation/AMQPOperationBinding.java
@@ -0,0 +1,146 @@
+package com.asyncapi.bindings.amqp.v0._3_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes AMQP 0-9-1 operation binding.
+ *
+ * Contains information about the operation representation in AMQP.
+ *
+ * @see AMQP operation binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes AMQP 0-9-1 operation binding.")
+public class AMQPOperationBinding extends com.asyncapi.bindings.amqp.AMQPOperationBinding {
+
+ /**
+ * TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "TTL (Time-To-Live) for the message must be greater than or equal to zero"
+ )
+ @JsonProperty("expiration")
+ @JsonPropertyDescription("TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.")
+ private Integer expiration;
+
+ /**
+ * Identifies the user who has sent the message.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("userId")
+ @JsonPropertyDescription("Identifies the user who has sent the message.")
+ private String userId;
+
+ /**
+ * The routing keys the message should be routed to at the time of publishing.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("cc")
+ @JsonPropertyDescription("The routing keys the message should be routed to at the time of publishing.")
+ private List cc;
+
+ /**
+ * A priority for the message.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("priority")
+ @JsonPropertyDescription("A priority for the message.")
+ private Integer priority;
+
+ /**
+ * Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 1,
+ message = "Delivery mode of the message must be either 1 (transient) or 2 (persistent)"
+ )
+ @javax.validation.constraints.Max(
+ value = 2,
+ message = "Delivery mode of the message must be either 1 (transient) or 2 (persistent)"
+ )
+ @JsonProperty("deliveryMode")
+ @JsonPropertyDescription("Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).")
+ private Integer deliveryMode;
+
+ /**
+ * Whether the message is mandatory or not.
+ *
+ * Applies to: publish
+ */
+ @Nullable
+ @JsonProperty("mandatory")
+ @JsonPropertyDescription("Whether the message is mandatory or not.")
+ private Boolean mandatory;
+
+ /**
+ * Like {@link #cc} but consumers will not receive this information.
+ *
+ * Applies to: publish
+ */
+ @Nullable
+ @JsonProperty("bcc")
+ @JsonPropertyDescription("Like cc but consumers will not receive this information.")
+ private List bcc;
+
+ /**
+ * Whether the message should include a timestamp or not.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("timestamp")
+ @JsonPropertyDescription("Whether the message should include a timestamp or not.")
+ private Boolean timestamp;
+
+ /**
+ * Whether the consumer should ack the message or not.
+ *
+ * Applies to: subscribe
+ */
+ @Nullable
+ @JsonProperty("ack")
+ @JsonPropertyDescription("Whether the consumer should ack the message or not.")
+ private Boolean ack;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/server/AMQPServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/server/AMQPServerBinding.java
new file mode 100644
index 00000000..3afea40f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp/v0/_3_0/server/AMQPServerBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.amqp.v0._3_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * @see AMQP server binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AMQPServerBinding extends com.asyncapi.bindings.amqp.AMQPServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/AMQP1ChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/AMQP1ChannelBinding.java
new file mode 100644
index 00000000..46f32db3
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/AMQP1ChannelBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.amqp1;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes AMQP 1.0 channel binding.
+ *
+ * @see AMQP 1.0 channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.amqp1.v0._1_0.channel.AMQP1ChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp1.v0._1_0.channel.AMQP1ChannelBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class AMQP1ChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/AMQP1MessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/AMQP1MessageBinding.java
new file mode 100644
index 00000000..cdd91e95
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/AMQP1MessageBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.amqp1;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes AMQP 1.0 message binding.
+ *
+ * @see AMQP message binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.amqp1.v0._1_0.message.AMQP1MessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp1.v0._1_0.message.AMQP1MessageBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class AMQP1MessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/AMQP1OperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/AMQP1OperationBinding.java
new file mode 100644
index 00000000..82d62a19
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/AMQP1OperationBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.amqp1;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes AMQP 1.0 operation binding.
+ *
+ * @see AMQP operation binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.amqp1.v0._1_0.operation.AMQP1OperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp1.v0._1_0.operation.AMQP1OperationBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class AMQP1OperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/AMQP1ServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/AMQP1ServerBinding.java
new file mode 100644
index 00000000..aa008765
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/AMQP1ServerBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.amqp1;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes AMQP 1.0 server binding.
+ *
+ * @see AMQP server binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.amqp1.v0._1_0.server.AMQP1ServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.amqp1.v0._1_0.server.AMQP1ServerBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class AMQP1ServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/v0/_1_0/channel/AMQP1ChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/v0/_1_0/channel/AMQP1ChannelBinding.java
new file mode 100644
index 00000000..91cbe858
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/v0/_1_0/channel/AMQP1ChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.amqp1.v0._1_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes AMQP 1.0 channel binding.
+ *
+ * @see AMQP 1.0 channel binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AMQP1ChannelBinding extends com.asyncapi.bindings.amqp1.AMQP1ChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/v0/_1_0/message/AMQP1MessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/v0/_1_0/message/AMQP1MessageBinding.java
new file mode 100644
index 00000000..204a9083
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/v0/_1_0/message/AMQP1MessageBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.amqp1.v0._1_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes AMQP 1.0 message binding.
+ *
+ * @see AMQP message binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AMQP1MessageBinding extends com.asyncapi.bindings.amqp1.AMQP1MessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/v0/_1_0/operation/AMQP1OperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/v0/_1_0/operation/AMQP1OperationBinding.java
new file mode 100644
index 00000000..93e622e2
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/v0/_1_0/operation/AMQP1OperationBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.amqp1.v0._1_0.operation;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes AMQP 1.0 operation binding.
+ *
+ * @see AMQP operation binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AMQP1OperationBinding extends com.asyncapi.bindings.amqp1.AMQP1OperationBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/v0/_1_0/server/AMQP1ServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/v0/_1_0/server/AMQP1ServerBinding.java
new file mode 100644
index 00000000..ff31fdc1
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/amqp1/v0/_1_0/server/AMQP1ServerBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.amqp1.v0._1_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes AMQP 1.0 server binding.
+ *
+ * @see AMQP server binding
+ * @see AMQP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AMQP1ServerBinding extends com.asyncapi.bindings.amqp1.AMQP1ServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/AnypointMQChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/AnypointMQChannelBinding.java
new file mode 100644
index 00000000..b8dc4baf
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/AnypointMQChannelBinding.java
@@ -0,0 +1,30 @@
+package com.asyncapi.bindings.anypointmq;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Anypoint MQ channel binding.
+ *
+ * @see Anypoint MQ channel binding
+ * @see Anypoint MQ
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.anypointmq.v0._0_1.channel.AnypointMQChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.anypointmq.v0._0_1.channel.AnypointMQChannelBinding.class, names = {
+ "0.0.1",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class AnypointMQChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/AnypointMQMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/AnypointMQMessageBinding.java
new file mode 100644
index 00000000..8ccfb13e
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/AnypointMQMessageBinding.java
@@ -0,0 +1,30 @@
+package com.asyncapi.bindings.anypointmq;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Anypoint MQ message binding.
+ *
+ * @see Anypoint MQ message binding
+ * @see Anypoint MQ
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.anypointmq.v0._0_1.message.AnypointMQMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.anypointmq.v0._0_1.message.AnypointMQMessageBinding.class, names = {
+ "0.0.1",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class AnypointMQMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/AnypointMQOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/AnypointMQOperationBinding.java
new file mode 100644
index 00000000..f3f3da75
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/AnypointMQOperationBinding.java
@@ -0,0 +1,30 @@
+package com.asyncapi.bindings.anypointmq;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Anypoint MQ operation binding.
+ *
+ * @see Anypoint MQ operation binding
+ * @see Anypoint MQ
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.anypointmq.v0._0_1.operation.AnypointMQOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.anypointmq.v0._0_1.operation.AnypointMQOperationBinding.class, names = {
+ "0.0.1",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class AnypointMQOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/AnypointMQServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/AnypointMQServerBinding.java
new file mode 100644
index 00000000..34568af7
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/AnypointMQServerBinding.java
@@ -0,0 +1,30 @@
+package com.asyncapi.bindings.anypointmq;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Anypoint MQ server binding.
+ *
+ * @see Anypoint MQ server binding
+ * @see Anypoint MQ
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.anypointmq.v0._0_1.server.AnypointMQServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.anypointmq.v0._0_1.server.AnypointMQServerBinding.class, names = {
+ "0.0.1",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class AnypointMQServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/channel/AnypointMQChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/channel/AnypointMQChannelBinding.java
new file mode 100644
index 00000000..1d8d38e1
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/channel/AnypointMQChannelBinding.java
@@ -0,0 +1,64 @@
+package com.asyncapi.bindings.anypointmq.v0._0_1.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Anypoint MQ channel binding.
+ *
+ * @see Anypoint MQ channel binding
+ * @see Anypoint MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Anypoint MQ channel binding.")
+public class AnypointMQChannelBinding extends com.asyncapi.bindings.anypointmq.AnypointMQChannelBinding {
+
+ /**
+ * 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.
+ */
+ @Nullable
+ @JsonProperty("destination")
+ @JsonPropertyDescription("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.")
+ 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.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "destinationType", defaultValue = "queue")
+ @JsonPropertyDescription("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.")
+ private AnypointMQChannelDestinationType destinationType = AnypointMQChannelDestinationType.QUEUE;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.0.1";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.0.1");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/channel/AnypointMQChannelDestinationType.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/channel/AnypointMQChannelDestinationType.java
new file mode 100644
index 00000000..c8e8b233
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/channel/AnypointMQChannelDestinationType.java
@@ -0,0 +1,27 @@
+package com.asyncapi.bindings.anypointmq.v0._0_1.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes Anypoint MQ channel destination type.
+ *
+ * @see Anypoint MQ channel binding
+ * @see Anypoint MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+@JsonClassDescription("Describes Anypoint MQ channel destination type.")
+public enum AnypointMQChannelDestinationType {
+
+ @JsonProperty("exchange")
+ EXCHANGE,
+
+ @JsonProperty("queue")
+ QUEUE,
+
+ @JsonProperty("fifo-queue")
+ FIFO_QUEUE
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/message/AnypointMQMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/message/AnypointMQMessageBinding.java
new file mode 100644
index 00000000..6b4ae45a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/message/AnypointMQMessageBinding.java
@@ -0,0 +1,51 @@
+package com.asyncapi.bindings.anypointmq.v0._0_1.message;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Anypoint MQ message binding.
+ *
+ * @see Anypoint MQ message binding
+ * @see Anypoint MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Anypoint MQ message binding.")
+public class AnypointMQMessageBinding extends com.asyncapi.bindings.anypointmq.AnypointMQMessageBinding {
+
+ /**
+ * 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.
+ */
+ @Nullable
+ @JsonProperty("headers")
+ @JsonPropertyDescription("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.")
+ private AsyncAPISchema headers;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.0.1";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.0.1");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/operation/AnypointMQOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/operation/AnypointMQOperationBinding.java
new file mode 100644
index 00000000..c5a29ce0
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/operation/AnypointMQOperationBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.anypointmq.v0._0_1.operation;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Anypoint MQ operation binding.
+ *
+ * @see Anypoint MQ operation binding
+ * @see Anypoint MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AnypointMQOperationBinding extends com.asyncapi.bindings.anypointmq.AnypointMQOperationBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.0.1";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.0.1");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/server/AnypointMQServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/server/AnypointMQServerBinding.java
new file mode 100644
index 00000000..78292eff
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/anypointmq/v0/_0_1/server/AnypointMQServerBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.anypointmq.v0._0_1.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Anypoint MQ server binding.
+ *
+ * @see Anypoint MQ server binding
+ * @see Anypoint MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AnypointMQServerBinding extends com.asyncapi.bindings.anypointmq.AnypointMQServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.0.1";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.0.1");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/GooglePubSubChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/GooglePubSubChannelBinding.java
new file mode 100644
index 00000000..803cca7d
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/GooglePubSubChannelBinding.java
@@ -0,0 +1,33 @@
+package com.asyncapi.bindings.googlepubsub;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Google Cloud Pub/Sub channel binding.
+ *
+ * The Channel Bindings Object is used to describe the Google Cloud Pub/Sub specific Topic details with AsyncAPI.
+ *
+ * @see Google Cloud Pub/Sub channel binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.googlepubsub.v0._2_0.channel.GooglePubSubChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.googlepubsub.v0._1_0.channel.GooglePubSubChannelBinding.class, names = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.googlepubsub.v0._2_0.channel.GooglePubSubChannelBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class GooglePubSubChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/GooglePubSubMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/GooglePubSubMessageBinding.java
new file mode 100644
index 00000000..c3ae3246
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/GooglePubSubMessageBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.googlepubsub;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Google Cloud Pub/Sub message binding.
+ *
+ * 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.
+ *
+ * @see Google Cloud Pub/Sub message binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.googlepubsub.v0._2_0.message.GooglePubSubMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.googlepubsub.v0._1_0.message.GooglePubSubMessageBinding.class, names = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.googlepubsub.v0._2_0.message.GooglePubSubMessageBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class GooglePubSubMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/GooglePubSubOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/GooglePubSubOperationBinding.java
new file mode 100644
index 00000000..d7bd0a93
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/GooglePubSubOperationBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.googlepubsub;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Google Cloud Pub/Sub operation binding.
+ *
+ * @see Google Cloud Pub/Sub operation binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.googlepubsub.v0._2_0.operation.GooglePubSubOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.googlepubsub.v0._1_0.operation.GooglePubSubOperationBinding.class, names = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.googlepubsub.v0._2_0.operation.GooglePubSubOperationBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class GooglePubSubOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/GooglePubSubServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/GooglePubSubServerBinding.java
new file mode 100644
index 00000000..bd771f4c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/GooglePubSubServerBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.googlepubsub;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Google Cloud Pub/Sub server binding.
+ *
+ * @see Google Cloud Pub/Sub server binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.googlepubsub.v0._2_0.server.GooglePubSubServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.googlepubsub.v0._1_0.server.GooglePubSubServerBinding.class, names = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.googlepubsub.v0._2_0.server.GooglePubSubServerBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class GooglePubSubServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/channel/GooglePubSubChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/channel/GooglePubSubChannelBinding.java
new file mode 100644
index 00000000..e5cdfecc
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/channel/GooglePubSubChannelBinding.java
@@ -0,0 +1,89 @@
+package com.asyncapi.bindings.googlepubsub.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * Describes Google Cloud Pub/Sub channel binding.
+ *
+ * The Channel Bindings Object is used to describe the Google Cloud Pub/Sub specific Topic details with AsyncAPI.
+ *
+ * @see Google Cloud Pub/Sub channel binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Google Cloud Pub/Sub channel binding.")
+public class GooglePubSubChannelBinding extends com.asyncapi.bindings.googlepubsub.GooglePubSubChannelBinding {
+
+ /**
+ * The Google Cloud Pub/Sub Topic name.
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "topic", required = true)
+ @JsonPropertyDescription("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.)
+ */
+ @Nullable
+ @JsonProperty("labels")
+ @JsonPropertyDescription("An object of key-value pairs (These are used to categorize Cloud Resources like Cloud Pub/Sub Topics.)")
+ private Map labels;
+
+ /**
+ * Indicates the minimum duration to retain a message after it is published to the topic (Must be a valid Duration .)
+ */
+ @Nullable
+ @JsonProperty("messageRetentionDuration")
+ @JsonPropertyDescription("Indicates the minimum duration to retain a message after it is published to the topic (Must be a valid https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration.)")
+ private String messageRetentionDuration;
+
+ /**
+ * Policy constraining the set of Google Cloud Platform regions where messages published to the topic may be stored
+ */
+ @Nullable
+ @JsonProperty("messageStoragePolicy")
+ @JsonPropertyDescription("Policy constraining the set of Google Cloud Platform regions where messages published to the topic may be stored")
+ private GooglePubSubChannelMessageStoragePolicy messageStoragePolicy;
+
+ /**
+ * Settings for validating messages published against a schema
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "schemaSettings", required = true)
+ @JsonPropertyDescription("Settings for validating messages published against a schema")
+ private GooglePubSubChannelSchemaSettings schemaSettings = new GooglePubSubChannelSchemaSettings();
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/channel/GooglePubSubChannelMessageStoragePolicy.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/channel/GooglePubSubChannelMessageStoragePolicy.java
new file mode 100644
index 00000000..1077649b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/channel/GooglePubSubChannelMessageStoragePolicy.java
@@ -0,0 +1,42 @@
+package com.asyncapi.bindings.googlepubsub.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes Google Cloud Pub/Sub MessageStoragePolicy.
+ *
+ * The Message Storage Policy Object is used to describe the Google Cloud Pub/Sub MessageStoragePolicy Object with AsyncAPI.
+ *
+ * @see Google Cloud Pub/Sub channel binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describe the Google Cloud Pub/Sub MessageStoragePolicy")
+public class GooglePubSubChannelMessageStoragePolicy {
+
+ /**
+ * A list of IDs of GCP regions where messages that are published to the topic may be persisted in storage
+ */
+ @Nullable
+ @JsonProperty("allowedPersistenceRegions")
+ @JsonPropertyDescription("A list of IDs of GCP regions where messages that are published to the topic may be persisted in storage")
+ private List allowedPersistenceRegions;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/channel/GooglePubSubChannelSchemaSettings.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/channel/GooglePubSubChannelSchemaSettings.java
new file mode 100644
index 00000000..96d6f646
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/channel/GooglePubSubChannelSchemaSettings.java
@@ -0,0 +1,68 @@
+package com.asyncapi.bindings.googlepubsub.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Google Cloud Pub/Sub SchemaSettings.
+ *
+ * The Schema Settings Object is used to describe the Google Cloud Pub/Sub SchemaSettings Object with AsyncAPI.
+ *
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describe the Google Cloud Pub/Sub SchemaSettings")
+public class GooglePubSubChannelSchemaSettings {
+
+ /**
+ * The encoding of the message (Must be one of the possible Encoding values.)
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "encoding", required = true)
+ @JsonPropertyDescription("The encoding of the message (Must be one of the possible https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#encoding values.)")
+ private String encoding = "";
+
+ /**
+ * The minimum (inclusive) revision allowed for validating messages
+ */
+ @Nullable
+ @JsonProperty("firstRevisionId")
+ @JsonPropertyDescription("The minimum (inclusive) revision allowed for validating messages")
+ private String firstRevisionId;
+
+ /**
+ * The maximum (inclusive) revision allowed for validating messages
+ */
+ @Nullable
+ @JsonProperty("lastRevisionId")
+ @JsonPropertyDescription("The maximum (inclusive) revision allowed for validating messages")
+ private String lastRevisionId;
+
+ /**
+ * The name of the schema that messages published should be validated against (The format is projects/{project}/schemas/{schema}.)
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "name", required = true)
+ @JsonPropertyDescription("The name of the schema that messages published should be validated against (The format is projects/{project}/schemas/{schema}.)")
+ private String name = "";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/message/GooglePubSubMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/message/GooglePubSubMessageBinding.java
new file mode 100644
index 00000000..80795b1b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/message/GooglePubSubMessageBinding.java
@@ -0,0 +1,68 @@
+package com.asyncapi.bindings.googlepubsub.v0._1_0.message;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Google Cloud Pub/Sub message binding.
+ *
+ * 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.
+ *
+ * @see Google Cloud Pub/Sub message binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Google Cloud Pub/Sub message binding.")
+public class GooglePubSubMessageBinding extends com.asyncapi.bindings.googlepubsub.GooglePubSubMessageBinding {
+
+ /**
+ * If non-empty, identifies related messages for which publish order should be respected (For more information, see ordering messages .)
+ */
+ @Nullable
+ @JsonProperty("orderingKey")
+ @JsonPropertyDescription("If non-empty, identifies related messages for which publish order should be respected (For more information, see https://cloud.google.com/pubsub/docs/ordering messages")
+ 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.)
+ */
+ @Nullable
+ @JsonProperty("attributes")
+ @JsonPropertyDescription("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.)")
+ private Object attributes;
+
+ /**
+ * Describes the schema used to validate the payload of this message
+ */
+ @Nullable
+ @JsonProperty("schema")
+ @JsonPropertyDescription("Describes the schema used to validate the payload of this message")
+ private GooglePubSubMessageSchemaDefinition schema;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/message/GooglePubSubMessageSchemaDefinition.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/message/GooglePubSubMessageSchemaDefinition.java
new file mode 100644
index 00000000..db017077
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/message/GooglePubSubMessageSchemaDefinition.java
@@ -0,0 +1,55 @@
+package com.asyncapi.bindings.googlepubsub.v0._1_0.message;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Describes Google Cloud Pub/Sub message schema definition.
+ *
+ * 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.
+ *
+ * @see Google Cloud Pub/Sub message binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describes Google Cloud Pub/Sub message schema definition.")
+public class GooglePubSubMessageSchemaDefinition {
+
+ /**
+ * The name of the schema
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "name", required = true)
+ @JsonPropertyDescription("The name of the schema")
+ private String name = "";
+
+ /**
+ * The type of the schema
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "type", required = true)
+ @JsonPropertyDescription("The type of the schema")
+ private GooglePubSubMessageSchemaDefinitionType type = GooglePubSubMessageSchemaDefinitionType.PROTOBUF;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/message/GooglePubSubMessageSchemaDefinitionType.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/message/GooglePubSubMessageSchemaDefinitionType.java
new file mode 100644
index 00000000..0e053924
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/message/GooglePubSubMessageSchemaDefinitionType.java
@@ -0,0 +1,25 @@
+package com.asyncapi.bindings.googlepubsub.v0._1_0.message;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes Google Cloud Pub/Sub message schema definition type.
+ *
+ * @see Google Cloud Pub/Sub message binding
+ * @see Types of schemas
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonClassDescription("Describes Google Cloud Pub/Sub message schema definition type.")
+public enum GooglePubSubMessageSchemaDefinitionType {
+
+ @JsonProperty("avro")
+ AVRO,
+
+ @JsonProperty("protobuf")
+ PROTOBUF
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/operation/GooglePubSubOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/operation/GooglePubSubOperationBinding.java
new file mode 100644
index 00000000..7d3f844c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/operation/GooglePubSubOperationBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.googlepubsub.v0._1_0.operation;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Google Cloud Pub/Sub operation binding.
+ *
+ * @see Google Cloud Pub/Sub operation binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class GooglePubSubOperationBinding extends com.asyncapi.bindings.googlepubsub.GooglePubSubOperationBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/server/GooglePubSubServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/server/GooglePubSubServerBinding.java
new file mode 100644
index 00000000..a6817995
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_1_0/server/GooglePubSubServerBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.googlepubsub.v0._1_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Google Cloud Pub/Sub server binding.
+ *
+ * @see Google Cloud Pub/Sub server binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class GooglePubSubServerBinding extends com.asyncapi.bindings.googlepubsub.GooglePubSubServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/channel/GooglePubSubChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/channel/GooglePubSubChannelBinding.java
new file mode 100644
index 00000000..94761ffe
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/channel/GooglePubSubChannelBinding.java
@@ -0,0 +1,79 @@
+package com.asyncapi.bindings.googlepubsub.v0._2_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * Describes Google Cloud Pub/Sub channel binding.
+ *
+ * The Channel Bindings Object is used to describe the Google Cloud Pub/Sub specific Topic details with AsyncAPI.
+ *
+ * @see Google Cloud Pub/Sub channel binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Google Cloud Pub/Sub channel binding.")
+public class GooglePubSubChannelBinding extends com.asyncapi.bindings.googlepubsub.GooglePubSubChannelBinding {
+
+ /**
+ * An object of key-value pairs (These are used to categorize Cloud Resources like Cloud Pub/Sub Topics.)
+ */
+ @Nullable
+ @JsonProperty("labels")
+ @JsonPropertyDescription("An object of key-value pairs (These are used to categorize Cloud Resources like Cloud Pub/Sub Topics.)")
+ private Map labels;
+
+ /**
+ * Indicates the minimum duration to retain a message after it is published to the topic (Must be a valid Duration .)
+ */
+ @Nullable
+ @JsonProperty("messageRetentionDuration")
+ @JsonPropertyDescription("Indicates the minimum duration to retain a message after it is published to the topic (Must be a valid https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration.)")
+ private String messageRetentionDuration;
+
+ /**
+ * Policy constraining the set of Google Cloud Platform regions where messages published to the topic may be stored
+ */
+ @Nullable
+ @JsonProperty("messageStoragePolicy")
+ @JsonPropertyDescription("Policy constraining the set of Google Cloud Platform regions where messages published to the topic may be stored")
+ private GooglePubSubChannelMessageStoragePolicy messageStoragePolicy;
+
+ /**
+ * Settings for validating messages published against a schema
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "schemaSettings", required = true)
+ @JsonPropertyDescription("Settings for validating messages published against a schema")
+ private GooglePubSubChannelSchemaSettings schemaSettings = new GooglePubSubChannelSchemaSettings();
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/channel/GooglePubSubChannelMessageStoragePolicy.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/channel/GooglePubSubChannelMessageStoragePolicy.java
new file mode 100644
index 00000000..173538d7
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/channel/GooglePubSubChannelMessageStoragePolicy.java
@@ -0,0 +1,42 @@
+package com.asyncapi.bindings.googlepubsub.v0._2_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes Google Cloud Pub/Sub MessageStoragePolicy.
+ *
+ * The Message Storage Policy Object is used to describe the Google Cloud Pub/Sub MessageStoragePolicy Object with AsyncAPI.
+ *
+ * @see Google Cloud Pub/Sub channel binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describe the Google Cloud Pub/Sub MessageStoragePolicy")
+public class GooglePubSubChannelMessageStoragePolicy {
+
+ /**
+ * A list of IDs of GCP regions where messages that are published to the topic may be persisted in storage
+ */
+ @Nullable
+ @JsonProperty("allowedPersistenceRegions")
+ @JsonPropertyDescription("A list of IDs of GCP regions where messages that are published to the topic may be persisted in storage")
+ private List allowedPersistenceRegions;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/channel/GooglePubSubChannelSchemaSettings.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/channel/GooglePubSubChannelSchemaSettings.java
new file mode 100644
index 00000000..a62aa1e4
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/channel/GooglePubSubChannelSchemaSettings.java
@@ -0,0 +1,68 @@
+package com.asyncapi.bindings.googlepubsub.v0._2_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Google Cloud Pub/Sub SchemaSettings.
+ *
+ * The Schema Settings Object is used to describe the Google Cloud Pub/Sub SchemaSettings Object with AsyncAPI.
+ *
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describe the Google Cloud Pub/Sub SchemaSettings")
+public class GooglePubSubChannelSchemaSettings {
+
+ /**
+ * The encoding of the message (Must be one of the possible Encoding values.)
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "encoding", required = true)
+ @JsonPropertyDescription("The encoding of the message (Must be one of the possible https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#encoding values.)")
+ private String encoding = "";
+
+ /**
+ * The minimum (inclusive) revision allowed for validating messages
+ */
+ @Nullable
+ @JsonProperty("firstRevisionId")
+ @JsonPropertyDescription("The minimum (inclusive) revision allowed for validating messages")
+ private String firstRevisionId;
+
+ /**
+ * The maximum (inclusive) revision allowed for validating messages
+ */
+ @Nullable
+ @JsonProperty("lastRevisionId")
+ @JsonPropertyDescription("The maximum (inclusive) revision allowed for validating messages")
+ private String lastRevisionId;
+
+ /**
+ * The name of the schema that messages published should be validated against (The format is projects/{project}/schemas/{schema}.)
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "name", required = true)
+ @JsonPropertyDescription("The name of the schema that messages published should be validated against (The format is projects/{project}/schemas/{schema}.)")
+ private String name = "";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/message/GooglePubSubMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/message/GooglePubSubMessageBinding.java
new file mode 100644
index 00000000..a563310b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/message/GooglePubSubMessageBinding.java
@@ -0,0 +1,68 @@
+package com.asyncapi.bindings.googlepubsub.v0._2_0.message;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Google Cloud Pub/Sub message binding.
+ *
+ * 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.
+ *
+ * @see Google Cloud Pub/Sub message binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Google Cloud Pub/Sub message binding.")
+public class GooglePubSubMessageBinding extends com.asyncapi.bindings.googlepubsub.GooglePubSubMessageBinding {
+
+ /**
+ * If non-empty, identifies related messages for which publish order should be respected (For more information, see ordering messages .)
+ */
+ @Nullable
+ @JsonProperty("orderingKey")
+ @JsonPropertyDescription("If non-empty, identifies related messages for which publish order should be respected (For more information, see https://cloud.google.com/pubsub/docs/ordering messages")
+ 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.)
+ */
+ @Nullable
+ @JsonProperty("attributes")
+ @JsonPropertyDescription("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.)")
+ private Object attributes;
+
+ /**
+ * Describes the schema used to validate the payload of this message
+ */
+ @Nullable
+ @JsonProperty("schema")
+ @JsonPropertyDescription("Describes the schema used to validate the payload of this message")
+ private GooglePubSubMessageSchemaDefinition schema;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/message/GooglePubSubMessageSchemaDefinition.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/message/GooglePubSubMessageSchemaDefinition.java
new file mode 100644
index 00000000..84d10108
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/message/GooglePubSubMessageSchemaDefinition.java
@@ -0,0 +1,45 @@
+package com.asyncapi.bindings.googlepubsub.v0._2_0.message;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Describes Google Cloud Pub/Sub message schema definition.
+ *
+ * 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.
+ *
+ * @see Google Cloud Pub/Sub message binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describes Google Cloud Pub/Sub message schema definition.")
+public class GooglePubSubMessageSchemaDefinition {
+
+ /**
+ * The name of the schema
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "name", required = true)
+ @JsonPropertyDescription("The name of the schema")
+ private String name = "";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/operation/GooglePubSubOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/operation/GooglePubSubOperationBinding.java
new file mode 100644
index 00000000..6135702d
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/operation/GooglePubSubOperationBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.googlepubsub.v0._2_0.operation;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Google Cloud Pub/Sub operation binding.
+ *
+ * @see Google Cloud Pub/Sub operation binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class GooglePubSubOperationBinding extends com.asyncapi.bindings.googlepubsub.GooglePubSubOperationBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/server/GooglePubSubServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/server/GooglePubSubServerBinding.java
new file mode 100644
index 00000000..b85703f4
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/googlepubsub/v0/_2_0/server/GooglePubSubServerBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.googlepubsub.v0._2_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Google Cloud Pub/Sub server binding.
+ *
+ * @see Google Cloud Pub/Sub server binding
+ * @see Google Cloud Pub/Sub
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class GooglePubSubServerBinding extends com.asyncapi.bindings.googlepubsub.GooglePubSubServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/HTTPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/HTTPChannelBinding.java
new file mode 100644
index 00000000..866e1db8
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/HTTPChannelBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.http;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes HTTP channel binding.
+ *
+ * @see HTTP channel binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.http.v0._3_0.channel.HTTPChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.http.v0._1_0.channel.HTTPChannelBinding.class, names = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.http.v0._2_0.channel.HTTPChannelBinding.class, names = "0.2.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.http.v0._3_0.channel.HTTPChannelBinding.class, names = {
+ "0.3.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class HTTPChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/HTTPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/HTTPMessageBinding.java
new file mode 100644
index 00000000..95f588bc
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/HTTPMessageBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.http;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Contains information about the message representation in HTTP.
+ *
+ * @see HTTP message binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.http.v0._3_0.message.HTTPMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.http.v0._1_0.message.HTTPMessageBinding.class, names = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.http.v0._2_0.message.HTTPMessageBinding.class, names = "0.2.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.http.v0._3_0.message.HTTPMessageBinding.class, names = {
+ "0.3.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class HTTPMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/HTTPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/HTTPOperationBinding.java
new file mode 100644
index 00000000..f624c5b6
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/HTTPOperationBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.http;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Contains information about the operation representation in HTTP.
+ *
+ * @see HTTP operation binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.http.v0._3_0.operation.HTTPOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.http.v0._1_0.operation.HTTPOperationBinding.class, names = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.http.v0._2_0.operation.HTTPOperationBinding.class, names = "0.2.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.http.v0._3_0.operation.HTTPOperationBinding.class, names = {
+ "0.3.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class HTTPOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/HTTPServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/HTTPServerBinding.java
new file mode 100644
index 00000000..2f97bc67
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/HTTPServerBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.http;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes HTTP server binding.
+ *
+ * @see HTTP server binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.http.v0._3_0.server.HTTPServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.http.v0._1_0.server.HTTPServerBinding.class, names = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.http.v0._2_0.server.HTTPServerBinding.class, names = "0.2.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.http.v0._3_0.server.HTTPServerBinding.class, names = {
+ "0.3.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class HTTPServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/channel/HTTPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/channel/HTTPChannelBinding.java
new file mode 100644
index 00000000..72cf50dc
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/channel/HTTPChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.http.v0._1_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes HTTP channel binding.
+ *
+ * @see HTTP channel binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPChannelBinding extends com.asyncapi.bindings.http.HTTPChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/message/HTTPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/message/HTTPMessageBinding.java
new file mode 100644
index 00000000..8cf67315
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/message/HTTPMessageBinding.java
@@ -0,0 +1,50 @@
+package com.asyncapi.bindings.http.v0._1_0.message;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes HTTP message binding.
+ *
+ * Contains information about the message representation in HTTP.
+ *
+ * @see HTTP message binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPMessageBinding extends com.asyncapi.bindings.http.HTTPMessageBinding {
+
+ /**
+ * A Schema object containing the definitions for each query parameter. This schema MUST be of type object
+ * and have a properties key.*
+ */
+ @Nullable
+ @JsonProperty("headers")
+ @JsonPropertyDescription("A Schema object containing the definitions for each query parameter. This schema MUST be of type object and have a properties key.")
+ private AsyncAPISchema headers;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/operation/HTTPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/operation/HTTPOperationBinding.java
new file mode 100644
index 00000000..171e750f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/operation/HTTPOperationBinding.java
@@ -0,0 +1,72 @@
+package com.asyncapi.bindings.http.v0._1_0.operation;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes HTTP operation binding.
+ *
+ * Contains information about the operation representation in HTTP.
+ *
+ * @see HTTP operation binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPOperationBinding extends com.asyncapi.bindings.http.HTTPOperationBinding {
+
+ /**
+ * Required.
+ *
+ * Type of operation. Its value MUST be either request or response.
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "type", required = true)
+ @JsonPropertyDescription("Type of operation. Its value MUST be either request or response.")
+ private HTTPOperationType type = HTTPOperationType.REQUEST;
+
+ /**
+ * 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.
+ */
+ @Nullable
+ @JsonProperty("method")
+ @JsonPropertyDescription("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.")
+ private HTTPOperationMethod method;
+
+ /**
+ * A Schema object containing the definitions for each query parameter. This schema MUST be of type object
+ * and have a properties key.
+ */
+ @Nullable
+ @JsonProperty("query")
+ @JsonPropertyDescription("A Schema object containing the definitions for each query parameter. This schema MUST be of type object and have a properties key.")
+ private AsyncAPISchema query;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/operation/HTTPOperationMethod.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/operation/HTTPOperationMethod.java
new file mode 100644
index 00000000..40082e68
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/operation/HTTPOperationMethod.java
@@ -0,0 +1,24 @@
+package com.asyncapi.bindings.http.v0._1_0.operation;
+
+/**
+ * Describes HTTP operation method type.
+ *
+ * Contains information about the operation method.
+ *
+ * @see HTTP operation binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+public enum HTTPOperationMethod {
+ GET,
+ PUT,
+ POST,
+ PATCH,
+ DELETE,
+ HEAD,
+ OPTIONS,
+ CONNECT,
+ TRACE
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/operation/HTTPOperationType.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/operation/HTTPOperationType.java
new file mode 100644
index 00000000..a3808c52
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/operation/HTTPOperationType.java
@@ -0,0 +1,24 @@
+package com.asyncapi.bindings.http.v0._1_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes HTTP operation type.
+ *
+ * Contains information about the operation type.
+ *
+ * @see HTTP operation binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+public enum HTTPOperationType {
+
+ @JsonProperty("request")
+ REQUEST,
+
+ @JsonProperty("response")
+ RESPONSE
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/server/HTTPServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/server/HTTPServerBinding.java
new file mode 100644
index 00000000..62e22ffa
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_1_0/server/HTTPServerBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.http.v0._1_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes HTTP server binding.
+ *
+ * @see HTTP server binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPServerBinding extends com.asyncapi.bindings.http.HTTPServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/channel/HTTPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/channel/HTTPChannelBinding.java
new file mode 100644
index 00000000..31294116
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/channel/HTTPChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.http.v0._2_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes HTTP channel binding.
+ *
+ * @see HTTP channel binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPChannelBinding extends com.asyncapi.bindings.http.HTTPChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/message/HTTPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/message/HTTPMessageBinding.java
new file mode 100644
index 00000000..757b0e73
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/message/HTTPMessageBinding.java
@@ -0,0 +1,50 @@
+package com.asyncapi.bindings.http.v0._2_0.message;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes HTTP message binding.
+ *
+ * Contains information about the message representation in HTTP.
+ *
+ * @see HTTP message binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPMessageBinding extends com.asyncapi.bindings.http.HTTPMessageBinding {
+
+ /**
+ * A Schema object containing the definitions for each query parameter. This schema MUST be of type object
+ * and have a properties key.*
+ */
+ @Nullable
+ @JsonProperty("headers")
+ @JsonPropertyDescription("A Schema object containing the definitions for each query parameter. This schema MUST be of type object and have a properties key.")
+ private AsyncAPISchema headers;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/operation/HTTPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/operation/HTTPOperationBinding.java
new file mode 100644
index 00000000..a913b63b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/operation/HTTPOperationBinding.java
@@ -0,0 +1,59 @@
+package com.asyncapi.bindings.http.v0._2_0.operation;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes HTTP operation binding.
+ *
+ * Contains information about the operation representation in HTTP.
+ *
+ * @see HTTP operation binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPOperationBinding extends com.asyncapi.bindings.http.HTTPOperationBinding {
+
+ /**
+ * 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.
+ */
+ @Nullable
+ @JsonProperty("method")
+ @JsonPropertyDescription("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.")
+ private HTTPOperationMethod method;
+
+ /**
+ * A Schema object containing the definitions for each query parameter. This schema MUST be of type object
+ * and have a properties key.
+ */
+ @Nullable
+ @JsonProperty("query")
+ @JsonPropertyDescription("A Schema object containing the definitions for each query parameter. This schema MUST be of type object and have a properties key.")
+ private AsyncAPISchema query;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/operation/HTTPOperationMethod.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/operation/HTTPOperationMethod.java
new file mode 100644
index 00000000..682d2846
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/operation/HTTPOperationMethod.java
@@ -0,0 +1,24 @@
+package com.asyncapi.bindings.http.v0._2_0.operation;
+
+/**
+ * Describes HTTP operation method.
+ *
+ * Contains information about the operation method.
+ *
+ * @see HTTP operation binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+public enum HTTPOperationMethod {
+ GET,
+ PUT,
+ POST,
+ PATCH,
+ DELETE,
+ HEAD,
+ OPTIONS,
+ CONNECT,
+ TRACE
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/server/HTTPServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/server/HTTPServerBinding.java
new file mode 100644
index 00000000..05d26b0f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_2_0/server/HTTPServerBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.http.v0._2_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes HTTP server binding.
+ *
+ * @see HTTP server binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPServerBinding extends com.asyncapi.bindings.http.HTTPServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/channel/HTTPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/channel/HTTPChannelBinding.java
new file mode 100644
index 00000000..3fc20cc7
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/channel/HTTPChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.http.v0._3_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes HTTP channel binding.
+ *
+ * @see HTTP channel binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPChannelBinding extends com.asyncapi.bindings.http.HTTPChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/message/HTTPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/message/HTTPMessageBinding.java
new file mode 100644
index 00000000..1eb13ed9
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/message/HTTPMessageBinding.java
@@ -0,0 +1,62 @@
+package com.asyncapi.bindings.http.v0._3_0.message;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes HTTP message binding.
+ *
+ * Contains information about the message representation in HTTP.
+ *
+ * @see HTTP message binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPMessageBinding extends com.asyncapi.bindings.http.HTTPMessageBinding {
+
+ /**
+ * A Schema object containing the definitions for each query parameter. This schema MUST be of type object
+ * and have a properties key.*
+ */
+ @Nullable
+ @JsonProperty("headers")
+ @JsonPropertyDescription("A Schema object containing the definitions for each query parameter. This schema MUST be of type object and have a properties key.")
+ private AsyncAPISchema headers;
+
+ /**
+ * The HTTP response status code according to RFC 9110 .
+ *
+ * `statusCode` is only relevant for messages referenced by the Operation Reply Object ,
+ * as it defines the status code for the response.
+ *
+ * In all other cases, this value can be safely ignored.
+ */
+ @Nullable
+ @JsonProperty("statusCode")
+ private Integer statusCode;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/operation/HTTPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/operation/HTTPOperationBinding.java
new file mode 100644
index 00000000..a6244877
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/operation/HTTPOperationBinding.java
@@ -0,0 +1,59 @@
+package com.asyncapi.bindings.http.v0._3_0.operation;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes HTTP operation binding.
+ *
+ * Contains information about the operation representation in HTTP.
+ *
+ * @see HTTP operation binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPOperationBinding extends com.asyncapi.bindings.http.HTTPOperationBinding {
+
+ /**
+ * 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.
+ */
+ @Nullable
+ @JsonProperty("method")
+ @JsonPropertyDescription("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.")
+ private HTTPOperationMethod method;
+
+ /**
+ * A Schema object containing the definitions for each query parameter. This schema MUST be of type object
+ * and have a properties key.
+ */
+ @Nullable
+ @JsonProperty("query")
+ @JsonPropertyDescription("A Schema object containing the definitions for each query parameter. This schema MUST be of type object and have a properties key.")
+ private AsyncAPISchema query;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/operation/HTTPOperationMethod.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/operation/HTTPOperationMethod.java
new file mode 100644
index 00000000..d0d167a5
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/operation/HTTPOperationMethod.java
@@ -0,0 +1,24 @@
+package com.asyncapi.bindings.http.v0._3_0.operation;
+
+/**
+ * Describes HTTP operation type.
+ *
+ * Contains information about the operation type.
+ *
+ * @see HTTP operation binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+public enum HTTPOperationMethod {
+ GET,
+ PUT,
+ POST,
+ PATCH,
+ DELETE,
+ HEAD,
+ OPTIONS,
+ CONNECT,
+ TRACE
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/server/HTTPServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/server/HTTPServerBinding.java
new file mode 100644
index 00000000..a1fbe94b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/http/v0/_3_0/server/HTTPServerBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.http.v0._3_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes HTTP server binding.
+ *
+ * @see HTTP server binding
+ * @see MDN HTTP overview
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HTTPServerBinding extends com.asyncapi.bindings.http.HTTPServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/IBMMQChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/IBMMQChannelBinding.java
new file mode 100644
index 00000000..620fa9ee
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/IBMMQChannelBinding.java
@@ -0,0 +1,30 @@
+package com.asyncapi.bindings.ibmmq;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes IBM MQ channel binding.
+ *
+ * @see IBM MQ channel binding
+ * @see IBM MQ
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.ibmmq.v0._1_0.channel.IBMMQChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.ibmmq.v0._1_0.channel.IBMMQChannelBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class IBMMQChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/IBMMQMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/IBMMQMessageBinding.java
new file mode 100644
index 00000000..12120a58
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/IBMMQMessageBinding.java
@@ -0,0 +1,30 @@
+package com.asyncapi.bindings.ibmmq;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes IBM MQ message binding.
+ *
+ * @see IBM MQ message binding
+ * @see IBM MQ
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.ibmmq.v0._1_0.message.IBMMQMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.ibmmq.v0._1_0.message.IBMMQMessageBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class IBMMQMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/IBMMQOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/IBMMQOperationBinding.java
new file mode 100644
index 00000000..d2745adc
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/IBMMQOperationBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.ibmmq;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes IBM MQ operation binding.
+ *
+ * @see IBM MQ operation binding
+ * @see IBM MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.ibmmq.v0._1_0.operation.IBMMQOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.ibmmq.v0._1_0.operation.IBMMQOperationBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class IBMMQOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/IBMMQServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/IBMMQServerBinding.java
new file mode 100644
index 00000000..45cab57e
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/IBMMQServerBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.ibmmq;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes IBM MQ server binding.
+ *
+ * This object contains server connection information about the IBM MQ server, referred to as an IBM MQ queue manager.
+ *
+ * This object contains additional connectivity information not possible to represent within the core AsyncAPI specification.
+ *
+ * @see IBM MQ server binding
+ * @see IBM MQ
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.ibmmq.v0._1_0.server.IBMMQServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.ibmmq.v0._1_0.server.IBMMQServerBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class IBMMQServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/channel/IBMMQChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/channel/IBMMQChannelBinding.java
new file mode 100644
index 00000000..382ca084
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/channel/IBMMQChannelBinding.java
@@ -0,0 +1,95 @@
+package com.asyncapi.bindings.ibmmq.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * 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.
+ *
+ * @see IBM MQ channel binding
+ * @see IBM MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes IBM MQ channel binding.")
+public class IBMMQChannelBinding extends com.asyncapi.bindings.ibmmq.IBMMQChannelBinding {
+
+ /**
+ * 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.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "destinationType", defaultValue = "topic")
+ @JsonPropertyDescription("Defines the type of AsyncAPI channel.")
+ private IBMMQChannelDestinationType destinationType = IBMMQChannelDestinationType.TOPIC;
+
+ /**
+ * REQUIRED if destinationType = queue
+ *
+ * queue and topic fields MUST NOT coexist within a channel binding
+ */
+ @Nullable
+ @JsonProperty("queue")
+ @JsonPropertyDescription("Defines the properties of a queue.")
+ private IBMMQChannelQueueProperties queue;
+
+ /**
+ * Defines the properties of a topic.
+ *
+ * OPTIONAL if destinationType = topic
+ *
+ * queue and topic fields MUST NOT coexist within a channel binding.
+ */
+ @Nullable
+ @JsonProperty("topic")
+ @JsonPropertyDescription("Defines the properties of a topic.")
+ private IBMMQChannelTopicProperties 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).
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "Maximum length of the physical message (in bytes) must be greater or equals to 0"
+ )
+ @javax.validation.constraints.Max(
+ value = 104857600,
+ message = "Maximum length of the physical message (in bytes) must be lower or equals to 104857600"
+ )
+ @JsonProperty("maxMsgLength")
+ @JsonPropertyDescription("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](https://www.ibm.com/support/knowledgecenter/SSFKSJ_latest/com.ibm.mq.ref.dev.doc/q097520_.html) in the IBM MQ Knowledge Center.")
+ private Integer maxMsgLength;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/channel/IBMMQChannelDestinationType.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/channel/IBMMQChannelDestinationType.java
new file mode 100644
index 00000000..157d0117
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/channel/IBMMQChannelDestinationType.java
@@ -0,0 +1,22 @@
+package com.asyncapi.bindings.ibmmq.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes IBM MQ channel destination type.
+ *
+ * @see IBM MQ channel binding
+ * @see IBM MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+public enum IBMMQChannelDestinationType {
+
+ @JsonProperty("topic")
+ TOPIC,
+
+ @JsonProperty("queue")
+ QUEUE
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/channel/IBMMQChannelQueueProperties.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/channel/IBMMQChannelQueueProperties.java
new file mode 100644
index 00000000..0298cfae
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/channel/IBMMQChannelQueueProperties.java
@@ -0,0 +1,68 @@
+package com.asyncapi.bindings.ibmmq.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes IBM MQ channel queue properties.
+ *
+ * @see IBM MQ channel binding
+ * @see IBM MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describes IBM MQ channel queue properties.")
+public class IBMMQChannelQueueProperties {
+
+ /**
+ * 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
+ */
+ @NotNull
+ @javax.validation.constraints.NotNull
+ @javax.validation.constraints.Size(
+ max = 48,
+ message = "Name of the IBM MQ queue must be less or equals to 48"
+ )
+ @Builder.Default
+ @JsonProperty("objectName")
+ @JsonPropertyDescription("Defines the name of the IBM MQ queue associated with the channel.")
+ 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.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "isPartitioned", defaultValue = "false")
+ @JsonPropertyDescription("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.")
+ private Boolean isPartitioned = false;
+
+ /**
+ * Specifies if it is recommended to open the queue exclusively.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "exclusive", defaultValue = "false")
+ @JsonPropertyDescription("Specifies if it is recommended to open the queue exclusively.")
+ private Boolean exclusive = false;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/channel/IBMMQChannelTopicProperties.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/channel/IBMMQChannelTopicProperties.java
new file mode 100644
index 00000000..cf2a35aa
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/channel/IBMMQChannelTopicProperties.java
@@ -0,0 +1,80 @@
+package com.asyncapi.bindings.ibmmq.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes IBM MQ channel topic properties.
+ *
+ * @see IBM MQ channel binding
+ * @see IBM MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+public class IBMMQChannelTopicProperties {
+
+ /**
+ * 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
+ */
+ @Nullable
+ @javax.validation.constraints.Max(
+ value = 10240,
+ message = "Maximum length of topic string must be lower or equals to 10240"
+ )
+ @JsonProperty("string")
+ @JsonPropertyDescription("The value of the IBM MQ topic string to be used.")
+ 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
+ */
+ @Nullable
+ @javax.validation.constraints.Max(
+ value = 48,
+ message = "Maximum length of topic name must be lower or equals to 48"
+ )
+ @JsonProperty("objectName")
+ @JsonPropertyDescription("The name of the IBM MQ topic object.")
+ private String objectName;
+
+ /**
+ * Defines if the subscription may be durable.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "durablePermitted", defaultValue = "true")
+ @JsonPropertyDescription("Defines if the subscription may be durable.")
+ private Boolean durablePermitted = true;
+
+ /**
+ * Defines if the last message published will be made available to new subscriptions.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "lastMsgRetained", defaultValue = "false")
+ @JsonPropertyDescription("Defines if the last message published will be made available to new subscriptions.")
+ private Boolean lastMsgRetained = false;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/message/IBMMQMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/message/IBMMQMessageBinding.java
new file mode 100644
index 00000000..b82ba5f9
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/message/IBMMQMessageBinding.java
@@ -0,0 +1,95 @@
+package com.asyncapi.bindings.ibmmq.v0._1_0.message;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes IBM MQ message binding.
+ *
+ * This object contains information about the message representation in IBM MQ.
+ *
+ * @see IBM MQ message binding
+ * @see IBM MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes IBM MQ message binding.")
+public class IBMMQMessageBinding extends com.asyncapi.bindings.ibmmq.IBMMQMessageBinding {
+
+ /**
+ * The type of the message.
+ *
+ * MUST be either string, jms or binary
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "type", defaultValue = "string")
+ @JsonPropertyDescription("The type of the message.")
+ private IBMMQMessageType type = IBMMQMessageType.STRING;
+
+ /**
+ * 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
+ */
+ @Nullable
+ @JsonProperty("headers")
+ @JsonPropertyDescription("Defines the IBM MQ message headers to include with this message. More than one header can be specified as a comma separated list.")
+ 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.
+ */
+ @Nullable
+ @JsonProperty("description")
+ @JsonPropertyDescription("Provides additional information for application developers: describes the message type or format.")
+ 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.
+ */
+ @Nullable
+ @Builder.Default
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "Expiry must be greater or equals to 0"
+ )
+ @JsonProperty(value = "expiry", defaultValue = "0")
+ @JsonPropertyDescription("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](https://www.ibm.com/docs/en/ibm-mq/9.2?topic=mqmd-expiry-mqlong) in the IBM MQ Knowledge Center.")
+ private Integer expiry = 0;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/message/IBMMQMessageType.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/message/IBMMQMessageType.java
new file mode 100644
index 00000000..808b5aa3
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/message/IBMMQMessageType.java
@@ -0,0 +1,27 @@
+package com.asyncapi.bindings.ibmmq.v0._1_0.message;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes IBM MQ message type.
+ *
+ * This object contains information about the message type in IBM MQ.
+ *
+ * @see IBM MQ message binding
+ * @see IBM MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+public enum IBMMQMessageType {
+
+ @JsonProperty("string")
+ STRING,
+
+ @JsonProperty("jms")
+ JMS,
+
+ @JsonProperty("binary")
+ BINARY
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/operation/IBMMQOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/operation/IBMMQOperationBinding.java
new file mode 100644
index 00000000..4d869547
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/operation/IBMMQOperationBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.ibmmq.v0._1_0.operation;
+
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes IBM MQ operation binding.
+ *
+ * This object MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * @see IBM MQ operation binding
+ * @see IBM MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class IBMMQOperationBinding extends com.asyncapi.bindings.ibmmq.IBMMQOperationBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/server/IBMMQServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/server/IBMMQServerBinding.java
new file mode 100644
index 00000000..865ee718
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/ibmmq/v0/_1_0/server/IBMMQServerBinding.java
@@ -0,0 +1,109 @@
+package com.asyncapi.bindings.ibmmq.v0._1_0.server;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes IBM MQ server binding.
+ *
+ * This object contains server connection information about the IBM MQ server, referred to as an IBM MQ queue manager.
+ * This object contains additional connectivity information not possible to represent within the core AsyncAPI specification.
+ *
+ * @see IBM MQ server binding
+ * @see IBM MQ
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes IBM MQ server binding.")
+public class IBMMQServerBinding extends com.asyncapi.bindings.ibmmq.IBMMQServerBinding {
+
+ /**
+ * Defines a logical group of IBM MQ server objects. This is necessary to specify multi-endpoint configurations used
+ * in high availability deployments. If omitted, the server object is not part of a group.
+ *
+ * MUST NOT be specified for URI Scheme http:// or file://
+ */
+ @Nullable
+ @JsonProperty("groupId")
+ @JsonPropertyDescription("Defines a logical group of IBM MQ server objects. This is necessary to specify multi-endpoint configurations used in high availability deployments. If omitted, the server object is not part of a group.")
+ private String groupId;
+
+ /**
+ * The name of the IBM MQ queue manager to bind to in the CCDT file.
+ *
+ * MUST NOT be specified for URI Scheme ibmmq://
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "ccdtQueueManagerName", defaultValue = "*")
+ @JsonPropertyDescription("The name of the IBM MQ queue manager to bind to in the CCDT file.")
+ private String ccdtQueueManagerName = "*";
+
+ /**
+ * The recommended cipher specification used to establish a TLS connection between the client and the IBM MQ queue manager.
+ * More information on SSL/TLS cipher specifications supported by IBM MQ can be found on this page in the IBM MQ Knowledge Center.
+ *
+ * MUST NOT be specified for protocol ibmmq or URI Scheme file:// or http://
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "cipherSpec", defaultValue = "ANY")
+ @JsonPropertyDescription("The recommended cipher specification used to establish a TLS connection between the client and the IBM MQ queue manager. More information on SSL/TLS cipher specifications supported by IBM MQ can be found on this page in the IBM MQ Knowledge Center.")
+ private String cipherSpec = "ANY";
+
+ /**
+ * If multiEndpointServer is true then multiple connections can be workload balanced and applications should not make
+ * assumptions as to where messages are processed. Where message ordering, or affinity to specific message resources
+ * is necessary, a single endpoint (multiEndpointServer = false) may be required.
+ *
+ * MUST NOT be specified for URI Scheme file:// or http://
+ */
+ @Builder.Default
+ @JsonProperty(value = "multiEndpointServer", defaultValue = "false")
+ @JsonPropertyDescription("If multiEndpointServer is true then multiple connections can be workload balanced and applications should not make assumptions as to where messages are processed. Where message ordering, or affinity to specific message resources is necessary, a single endpoint (multiEndpointServer = false) may be required. MUST NOT be specified for URI Scheme file:// or http://")
+ private Boolean multiEndpointServer = false;
+
+ /**
+ * The recommended value (in seconds) for the heartbeat sent to the queue manager during periods of inactivity.
+ * A value of zero means that no heart beats are sent. A value of 1 means that the client will use the value defined by the queue manager.
+ * More information on heart beat interval can be found on this page in the IBM MQ Knowledge Center.
+ *
+ * MUST be 0-999999
+ */
+ @Builder.Default
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "Heart beat interval must be greater or equals to 0"
+ )
+ @javax.validation.constraints.Max(
+ value = 999999,
+ message = "Heart beat interval must be less or equals to 999999"
+ )
+ @JsonProperty(value = "heartBeatInterval", defaultValue = "300")
+ @JsonPropertyDescription("The recommended value (in seconds) for the heartbeat sent to the queue manager during periods of inactivity. A value of zero means that no heart beats are sent. A value of 1 means that the client will use the value defined by the queue manager.")
+ private int heartBeatInterval = 300;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/JMSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/JMSChannelBinding.java
new file mode 100644
index 00000000..fbf91796
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/JMSChannelBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.jms;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes JMS channel binding.
+ *
+ * @see JMS channel binding
+ * @see Java Message Service
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.jms.v0._0_1.channel.JMSChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.jms.v0._0_1.channel.JMSChannelBinding.class, names = {
+ "0.0.1",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class JMSChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/JMSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/JMSMessageBinding.java
new file mode 100644
index 00000000..614a6795
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/JMSMessageBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.jms;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes JMS message binding.
+ *
+ * @see JMS message binding
+ * @see Java Message Service
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.jms.v0._0_1.message.JMSMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.jms.v0._0_1.message.JMSMessageBinding.class, names = {
+ "0.0.1",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class JMSMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/JMSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/JMSOperationBinding.java
new file mode 100644
index 00000000..defd14de
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/JMSOperationBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.jms;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes JMS operation binding.
+ *
+ * @see JMS operation binding
+ * @see Java Message Service
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.jms.v0._0_1.operation.JMSOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.jms.v0._0_1.operation.JMSOperationBinding.class, names = {
+ "0.0.1",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class JMSOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/JMSServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/JMSServerBinding.java
new file mode 100644
index 00000000..01c97710
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/JMSServerBinding.java
@@ -0,0 +1,30 @@
+package com.asyncapi.bindings.jms;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes JMS server binding.
+ *
+ * @see JMS server binding
+ * @see Java Message Service
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.jms.v0._0_1.server.JMSServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.jms.v0._0_1.server.JMSServerBinding.class, names = {
+ "0.0.1",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class JMSServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/channel/JMSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/channel/JMSChannelBinding.java
new file mode 100644
index 00000000..e6333ed4
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/channel/JMSChannelBinding.java
@@ -0,0 +1,53 @@
+package com.asyncapi.bindings.jms.v0._0_1.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes JMS channel binding.
+ *
+ * @see JMS channel binding
+ * @see Java Message Service
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class JMSChannelBinding extends com.asyncapi.bindings.jms.JMSChannelBinding {
+
+ /**
+ * The destination (queue) 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 according to the JMS Provider.
+ *
+ * Defaults to the channel name.
+ */
+ @Nullable
+ @JsonProperty("destination")
+ private String destination;
+
+ @Nullable
+ @JsonProperty("destinationType")
+ private JMSChannelDestinationType destinationType;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.0.1";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.0.1");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/channel/JMSChannelDestinationType.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/channel/JMSChannelDestinationType.java
new file mode 100644
index 00000000..f9ed4411
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/channel/JMSChannelDestinationType.java
@@ -0,0 +1,22 @@
+package com.asyncapi.bindings.jms.v0._0_1.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes JMS channel destination type.
+ *
+ * @see JMS channel binding
+ * @see Java Message Service
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+public enum JMSChannelDestinationType {
+
+ @JsonProperty("queue")
+ QUEUE,
+
+ @JsonProperty("fifo-queue")
+ FIFO_QUEUE
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/message/JMSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/message/JMSMessageBinding.java
new file mode 100644
index 00000000..9c4dfeac
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/message/JMSMessageBinding.java
@@ -0,0 +1,48 @@
+package com.asyncapi.bindings.jms.v0._0_1.message;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes JMS message binding.
+ *
+ * @see Java Message Service
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class JMSMessageBinding extends com.asyncapi.bindings.jms.JMSMessageBinding {
+
+ /**
+ * A Schema object containing the definitions for JMS headers (protocol headers).
+ *
+ * This schema MUST be of type 'object' and have a 'properties' key.
+ *
+ * Examples of JMS protocol headers are 'JMSMessageID', 'JMSTimestamp', and 'JMSCorrelationID'.
+ */
+ @Nullable
+ @JsonProperty("headers")
+ public AsyncAPISchema headers;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.0.1";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.0.1");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/operation/JMSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/operation/JMSOperationBinding.java
new file mode 100644
index 00000000..d63f0d00
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/operation/JMSOperationBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.jms.v0._0_1.operation;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes JMS operation binding.
+ *
+ * @see JMS operation binding
+ * @see Java Message Service
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class JMSOperationBinding extends com.asyncapi.bindings.jms.JMSOperationBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.0.1";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.0.1");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/server/JMSServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/server/JMSServerBinding.java
new file mode 100644
index 00000000..ea3232a4
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/server/JMSServerBinding.java
@@ -0,0 +1,65 @@
+package com.asyncapi.bindings.jms.v0._0_1.server;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes JMS server binding.
+ *
+ * @see JMS server binding
+ * @see Java Message Service
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class JMSServerBinding extends com.asyncapi.bindings.jms.JMSServerBinding {
+
+ /**
+ * The classname of the ConnectionFactory implementation for the JMS Provider.
+ */
+ @NotNull
+ @JsonProperty("jmsConnectionFactory")
+ private String jmsConnectionFactory = "";
+
+ /**
+ * Additional properties to set on the JMS ConnectionFactory implementation for the JMS Provider.
+ */
+ @Nullable
+ @JsonProperty("properties")
+ private List<@NotNull JMSServerProperty> properties;
+
+ /**
+ * A client identifier for applications that use this JMS connection factory.
+ *
+ * If the Client ID Policy is set to 'Restricted' (the default),
+ * then configuring a Client ID on the ConnectionFactory prevents more than one JMS client from
+ * using a connection from this factory.
+ */
+ @Nullable
+ @JsonProperty("clientID")
+ private String clientID;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.0.1";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.0.1");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/server/JMSServerProperty.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/server/JMSServerProperty.java
new file mode 100644
index 00000000..7a7d310a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/jms/v0/_0_1/server/JMSServerProperty.java
@@ -0,0 +1,42 @@
+package com.asyncapi.bindings.jms.v0._0_1.server;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Describes JMS server property.
+ *
+ * @see JMS server binding
+ * @see Java Message Service
+ * @author Pavel Bodiachevskii
+ * @version 0.0.1
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class JMSServerProperty {
+
+ /**
+ * The name of a property
+ */
+ @NotNull
+ private String name;
+
+ /**
+ * The value of a property
+ *
+ * MUST BE:
+ *
+ * string
+ * boolean
+ * number
+ * null
+ *
+ */
+ @NotNull
+ private Object value;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/KafkaChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/KafkaChannelBinding.java
new file mode 100644
index 00000000..b7740ef8
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/KafkaChannelBinding.java
@@ -0,0 +1,33 @@
+package com.asyncapi.bindings.kafka;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Kafka channel binding.
+ *
+ * @see Kafka channel binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.kafka.v0._5_0.channel.KafkaChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._1_0.channel.KafkaChannelBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._3_0.channel.KafkaChannelBinding.class, name = "0.3.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._4_0.channel.KafkaChannelBinding.class, name = "0.4.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._5_0.channel.KafkaChannelBinding.class, names = {
+ "0.5.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class KafkaChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/KafkaMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/KafkaMessageBinding.java
new file mode 100644
index 00000000..8b63f12b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/KafkaMessageBinding.java
@@ -0,0 +1,33 @@
+package com.asyncapi.bindings.kafka;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Kafka message binding.
+ *
+ * @see Kafka message binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.kafka.v0._5_0.message.KafkaMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._1_0.message.KafkaMessageBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._3_0.message.KafkaMessageBinding.class, name = "0.3.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._4_0.message.KafkaMessageBinding.class, name = "0.4.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._5_0.message.KafkaMessageBinding.class, names = {
+ "0.5.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class KafkaMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/KafkaOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/KafkaOperationBinding.java
new file mode 100644
index 00000000..647a65d7
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/KafkaOperationBinding.java
@@ -0,0 +1,33 @@
+package com.asyncapi.bindings.kafka;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Kafka operation binding.
+ *
+ * @see Kafka operation binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.kafka.v0._5_0.operation.KafkaOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._1_0.operation.KafkaOperationBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._3_0.operation.KafkaOperationBinding.class, name = "0.3.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._4_0.operation.KafkaOperationBinding.class, name = "0.4.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._5_0.operation.KafkaOperationBinding.class, names = {
+ "0.5.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class KafkaOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/KafkaServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/KafkaServerBinding.java
new file mode 100644
index 00000000..e5bdac4b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/KafkaServerBinding.java
@@ -0,0 +1,33 @@
+package com.asyncapi.bindings.kafka;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Kafka server binding.
+ *
+ * @see Kafka server binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.kafka.v0._5_0.server.KafkaServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._1_0.server.KafkaServerBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._3_0.server.KafkaServerBinding.class, name = "0.3.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._4_0.server.KafkaServerBinding.class, name = "0.4.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.kafka.v0._5_0.server.KafkaServerBinding.class, names = {
+ "0.5.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class KafkaServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_1_0/channel/KafkaChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_1_0/channel/KafkaChannelBinding.java
new file mode 100644
index 00000000..03ee470c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_1_0/channel/KafkaChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.kafka.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka channel binding.
+ *
+ * @see Kafka channel binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Kafka channel binding.")
+public class KafkaChannelBinding extends com.asyncapi.bindings.kafka.KafkaChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_1_0/message/KafkaMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_1_0/message/KafkaMessageBinding.java
new file mode 100644
index 00000000..be54ca33
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_1_0/message/KafkaMessageBinding.java
@@ -0,0 +1,47 @@
+package com.asyncapi.bindings.kafka.v0._1_0.message;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka message binding.
+ *
+ * @see Kafka message binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class KafkaMessageBinding extends com.asyncapi.bindings.kafka.KafkaMessageBinding {
+
+ /**
+ * The message key.
+ */
+ @Nullable
+ @JsonProperty("key")
+ @JsonPropertyDescription("The message key.")
+ private AsyncAPISchema key;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_1_0/operation/KafkaOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_1_0/operation/KafkaOperationBinding.java
new file mode 100644
index 00000000..2ec8d6df
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_1_0/operation/KafkaOperationBinding.java
@@ -0,0 +1,55 @@
+package com.asyncapi.bindings.kafka.v0._1_0.operation;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka operation binding.
+ *
+ * @see Kafka operation binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class KafkaOperationBinding extends com.asyncapi.bindings.kafka.KafkaOperationBinding {
+
+ /**
+ * Id of the consumer group.
+ */
+ @Nullable
+ @JsonProperty("groupId")
+ @JsonPropertyDescription("Id of the consumer group.")
+ private AsyncAPISchema groupId;
+
+ /**
+ * Id of the consumer inside a consumer group.
+ */
+ @Nullable
+ @JsonProperty("clientId")
+ @JsonPropertyDescription("Id of the consumer inside a consumer group.")
+ private AsyncAPISchema clientId;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_1_0/server/KafkaServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_1_0/server/KafkaServerBinding.java
new file mode 100644
index 00000000..58849664
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_1_0/server/KafkaServerBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.kafka.v0._1_0.server;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka server binding.
+ *
+ * @see Kafka server binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Kafka server binding.")
+public class KafkaServerBinding extends com.asyncapi.bindings.kafka.KafkaServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/channel/KafkaChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/channel/KafkaChannelBinding.java
new file mode 100644
index 00000000..238f777c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/channel/KafkaChannelBinding.java
@@ -0,0 +1,76 @@
+package com.asyncapi.bindings.kafka.v0._3_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka channel binding.
+ *
+ * @see Kafka channel binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Kafka channel binding.")
+public class KafkaChannelBinding extends com.asyncapi.bindings.kafka.KafkaChannelBinding {
+
+ /**
+ * Kafka topic name if different from channel name.
+ */
+ @Nullable
+ @JsonProperty("topic")
+ @JsonPropertyDescription("Kafka topic name if different from channel name.")
+ private String topic;
+
+ /**
+ * Number of partitions configured on this topic (useful to know how many parallel consumers you may run).
+ *
+ * MUST be positive.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 1,
+ message = "Number of partitions must be greater or equals to 1"
+ )
+ @JsonProperty("partitions")
+ @JsonPropertyDescription("Number of partitions configured on this topic (useful to know how many parallel consumers you may run).")
+ private Integer partitions;
+
+ /**
+ * Number of replicas configured on this topic.
+ *
+ * MUST be positive.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 1,
+ message = "Number of replicas must be greater or equals to 1"
+ )
+ @JsonProperty("replicas")
+ @JsonPropertyDescription("Number of replicas configured on this topic.")
+ private Integer replicas;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/message/KafkaMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/message/KafkaMessageBinding.java
new file mode 100644
index 00000000..2c38844d
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/message/KafkaMessageBinding.java
@@ -0,0 +1,71 @@
+package com.asyncapi.bindings.kafka.v0._3_0.message;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka message binding.
+ *
+ * @see Kafka message binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class KafkaMessageBinding extends com.asyncapi.bindings.kafka.KafkaMessageBinding {
+
+ /**
+ * The message key.
+ */
+ @Nullable
+ @JsonProperty("key")
+ @JsonPropertyDescription("The message key.")
+ private AsyncAPISchema key;
+
+ /**
+ * If a Schema Registry is used when performing this operation, tells where the id of schema is stored (e.g. header or payload).
+ */
+ @Nullable
+ @JsonProperty("schemaIdLocation")
+ @JsonPropertyDescription("If a Schema Registry is used when performing this operation, tells where the id of schema is stored (e.g. header or payload).")
+ private KafkaMessageSchemaIdLocation schemaIdLocation;
+
+ /**
+ * Number of bytes or vendor specific values when schema id is encoded in payload (e.g confluent/ apicurio-legacy / apicurio-new).
+ */
+ @Nullable
+ @JsonProperty("schemaIdPayloadEncoding")
+ @JsonPropertyDescription("Number of bytes or vendor specific values when schema id is encoded in payload (e.g confluent/ apicurio-legacy / apicurio-new).")
+ private String schemaIdPayloadEncoding;
+
+ /**
+ * Freeform string for any naming strategy class to use. Clients should default to the vendor default if not supplied.
+ */
+ @Nullable
+ @JsonProperty("schemaLookupStrategy")
+ @JsonPropertyDescription("Freeform string for any naming strategy class to use. Clients should default to the vendor default if not supplied.")
+ private String schemaLookupStrategy;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/message/KafkaMessageSchemaIdLocation.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/message/KafkaMessageSchemaIdLocation.java
new file mode 100644
index 00000000..5be49c3c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/message/KafkaMessageSchemaIdLocation.java
@@ -0,0 +1,22 @@
+package com.asyncapi.bindings.kafka.v0._3_0.message;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes Kafka message schema id location.
+ *
+ * @see Kafka message binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+public enum KafkaMessageSchemaIdLocation {
+
+ @JsonProperty("header")
+ HEADER,
+
+ @JsonProperty("payload")
+ PAYLOAD
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/operation/KafkaOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/operation/KafkaOperationBinding.java
new file mode 100644
index 00000000..f001d703
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/operation/KafkaOperationBinding.java
@@ -0,0 +1,55 @@
+package com.asyncapi.bindings.kafka.v0._3_0.operation;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka operation binding.
+ *
+ * @see Kafka operation binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class KafkaOperationBinding extends com.asyncapi.bindings.kafka.KafkaOperationBinding {
+
+ /**
+ * Id of the consumer group.
+ */
+ @Nullable
+ @JsonProperty("groupId")
+ @JsonPropertyDescription("Id of the consumer group.")
+ private AsyncAPISchema groupId;
+
+ /**
+ * Id of the consumer inside a consumer group.
+ */
+ @Nullable
+ @JsonProperty("clientId")
+ @JsonPropertyDescription("Id of the consumer inside a consumer group.")
+ private AsyncAPISchema clientId;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/server/KafkaServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/server/KafkaServerBinding.java
new file mode 100644
index 00000000..c6ef13fb
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_3_0/server/KafkaServerBinding.java
@@ -0,0 +1,58 @@
+package com.asyncapi.bindings.kafka.v0._3_0.server;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka server binding.
+ *
+ * @see Kafka server binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Kafka server binding.")
+public class KafkaServerBinding extends com.asyncapi.bindings.kafka.KafkaServerBinding {
+
+ /**
+ * API URL for the Schema Registry used when producing Kafka messages (if a Schema Registry was used)
+ */
+ @Nullable
+ @JsonProperty("schemaRegistryUrl")
+ @JsonPropertyDescription("API URL for the Schema Registry used when producing Kafka messages (if a Schema Registry was used)")
+ private String schemaRegistryUrl;
+
+ /**
+ * MUST NOT be specified if schemaRegistryUrl is not specified
+ *
+ * The vendor of Schema Registry and Kafka serdes library that should be used (e.g. apicurio, confluent, ibm, or karapace)
+ */
+ @Nullable
+ @JsonProperty("schemaRegistryVendor")
+ @JsonPropertyDescription("The vendor of Schema Registry and Kafka serdes library that should be used (e.g. apicurio, confluent, ibm, or karapace)")
+ private String schemaRegistryVendor;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/channel/KafkaChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/channel/KafkaChannelBinding.java
new file mode 100644
index 00000000..99185e84
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/channel/KafkaChannelBinding.java
@@ -0,0 +1,82 @@
+package com.asyncapi.bindings.kafka.v0._4_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka channel binding.
+ *
+ * @version 0.4.0
+ * @see Kafka channel binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Kafka channel binding.")
+public class KafkaChannelBinding extends com.asyncapi.bindings.kafka.KafkaChannelBinding {
+
+ /**
+ * Kafka topic name if different from channel name.
+ */
+ @Nullable
+ @JsonProperty("topic")
+ @JsonPropertyDescription("Kafka topic name if different from channel name.")
+ private String topic;
+
+ /**
+ * Number of partitions configured on this topic (useful to know how many parallel consumers you may run).
+ *
+ * MUST be positive.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 1,
+ message = "Number of partitions must be greater or equals to 1"
+ )
+ @JsonProperty("partitions")
+ @JsonPropertyDescription("Number of partitions configured on this topic (useful to know how many parallel consumers you may run).")
+ private Integer partitions;
+
+ /**
+ * Number of replicas configured on this topic.
+ *
+ * MUST be positive.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 1,
+ message = "Number of replicas must be greater or equals to 1"
+ )
+ @JsonProperty("replicas")
+ @JsonPropertyDescription("Number of replicas configured on this topic.")
+ private Integer replicas;
+
+ /**
+ * Topic configuration properties that are relevant for the API.
+ */
+ @Nullable
+ @JsonProperty("topicConfiguration")
+ @JsonPropertyDescription("Topic configuration properties that are relevant for the API.")
+ private KafkaChannelTopicConfiguration topicConfiguration;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.4.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.4.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/channel/KafkaChannelTopicCleanupPolicy.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/channel/KafkaChannelTopicCleanupPolicy.java
new file mode 100644
index 00000000..814aca64
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/channel/KafkaChannelTopicCleanupPolicy.java
@@ -0,0 +1,13 @@
+package com.asyncapi.bindings.kafka.v0._4_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+public enum KafkaChannelTopicCleanupPolicy {
+
+ @JsonProperty("compact")
+ COMPACT,
+
+ @JsonProperty("delete")
+ DELETE
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/channel/KafkaChannelTopicConfiguration.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/channel/KafkaChannelTopicConfiguration.java
new file mode 100644
index 00000000..44fb919f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/channel/KafkaChannelTopicConfiguration.java
@@ -0,0 +1,83 @@
+package com.asyncapi.bindings.kafka.v0._4_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * 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 class KafkaChannelTopicConfiguration {
+
+ /**
+ * The cleanup.policy configuration option.
+ *
+ * array may only contain delete and/or compact
+ */
+ @Nullable
+ @JsonProperty("cleanup.policy")
+ private List cleanupPolicy;
+
+ /**
+ * The retention.ms configuration option.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = -1,
+ message = "retention.ms must be greater or equals to -1"
+ )
+ @JsonProperty("retention.ms")
+ @JsonPropertyDescription("The [`retention.ms`](https://kafka.apache.org/documentation/#topicconfigs_retention.ms) configuration option.")
+ private Integer retentionMs;
+
+ /**
+ * The retention.bytes configuration option.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = -1,
+ message = "retention.bytes must be greater or equals to -1"
+ )
+ @JsonProperty("retention.bytes")
+ @JsonPropertyDescription("The [`retention.bytes`](https://kafka.apache.org/documentation/#topicconfigs_retention.bytes) configuration option.")
+ private Integer retentionBytes;
+
+ /**
+ * The delete.retention.ms configuration option.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "delete.retention.ms must be greater or equals to 0"
+ )
+ @JsonProperty("delete.retention.ms")
+ @JsonPropertyDescription("The [`delete.retention.ms`](https://kafka.apache.org/documentation/#topicconfigs_delete.retention.ms) configuration option.")
+ private Integer deleteRetentionMs;
+
+ /**
+ * The max.message.bytes configuration option.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "max.message.bytes must be greater or equals to 0"
+ )
+ @JsonProperty("max.message.bytes")
+ @JsonPropertyDescription("The [`max.message.bytes`](https://kafka.apache.org/documentation/#topicconfigs_max.message.bytes) configuration option.")
+ private Integer maxMessageBytes;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/message/KafkaMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/message/KafkaMessageBinding.java
new file mode 100644
index 00000000..04b4cfb0
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/message/KafkaMessageBinding.java
@@ -0,0 +1,72 @@
+package com.asyncapi.bindings.kafka.v0._4_0.message;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.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 com.asyncapi.bindings.kafka.KafkaMessageBinding {
+
+ /**
+ * The message key.
+ */
+ // TODO: Reference, AsyncAPISchema, AvroSchema
+ @Nullable
+ @JsonProperty("key")
+ @JsonPropertyDescription("The message key.")
+ private AsyncAPISchema key;
+
+ /**
+ * If a Schema Registry is used when performing this operation, tells where the id of schema is stored (e.g. header or payload).
+ */
+ @Nullable
+ @JsonProperty("schemaIdLocation")
+ @JsonPropertyDescription("If a Schema Registry is used when performing this operation, tells where the id of schema is stored (e.g. header or payload).")
+ private KafkaMessageSchemaIdLocation schemaIdLocation;
+
+ /**
+ * Number of bytes or vendor specific values when schema id is encoded in payload (e.g confluent/ apicurio-legacy / apicurio-new).
+ */
+ @Nullable
+ @JsonProperty("schemaIdPayloadEncoding")
+ @JsonPropertyDescription("Number of bytes or vendor specific values when schema id is encoded in payload (e.g confluent/ apicurio-legacy / apicurio-new).")
+ private String schemaIdPayloadEncoding;
+
+ /**
+ * Freeform string for any naming strategy class to use. Clients should default to the vendor default if not supplied.
+ */
+ @Nullable
+ @JsonProperty("schemaLookupStrategy")
+ @JsonPropertyDescription("Freeform string for any naming strategy class to use. Clients should default to the vendor default if not supplied.")
+ private String schemaLookupStrategy;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.4.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.4.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/message/KafkaMessageSchemaIdLocation.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/message/KafkaMessageSchemaIdLocation.java
new file mode 100644
index 00000000..d4b59df9
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/message/KafkaMessageSchemaIdLocation.java
@@ -0,0 +1,20 @@
+package com.asyncapi.bindings.kafka.v0._4_0.message;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes Kafka message schema id location.
+ *
+ * @version 0.1.0
+ * @see Kafka message binding
+ * @author Pavel Bodiachevskii
+ */
+public enum KafkaMessageSchemaIdLocation {
+
+ @JsonProperty("header")
+ HEADER,
+
+ @JsonProperty("payload")
+ PAYLOAD
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/operation/KafkaOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/operation/KafkaOperationBinding.java
new file mode 100644
index 00000000..e635670a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/operation/KafkaOperationBinding.java
@@ -0,0 +1,55 @@
+package com.asyncapi.bindings.kafka.v0._4_0.operation;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.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 com.asyncapi.bindings.kafka.KafkaOperationBinding {
+
+ /**
+ * Id of the consumer group.
+ */
+ @Nullable
+ @JsonProperty("groupId")
+ @JsonPropertyDescription("Id of the consumer group.")
+ private AsyncAPISchema groupId;
+
+ /**
+ * Id of the consumer inside a consumer group.
+ */
+ @Nullable
+ @JsonProperty("clientId")
+ @JsonPropertyDescription("Id of the consumer inside a consumer group.")
+ private AsyncAPISchema clientId;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.4.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.4.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/server/KafkaServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/server/KafkaServerBinding.java
new file mode 100644
index 00000000..ab2b2678
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_4_0/server/KafkaServerBinding.java
@@ -0,0 +1,56 @@
+package com.asyncapi.bindings.kafka.v0._4_0.server;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka server binding.
+ *
+ * @version 0.4.0
+ * @see Kafka server binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Kafka server binding.")
+public class KafkaServerBinding extends com.asyncapi.bindings.kafka.KafkaServerBinding {
+
+ /**
+ * API URL for the Schema Registry used when producing Kafka messages (if a Schema Registry was used)
+ */
+ @Nullable
+ @JsonProperty("schemaRegistryUrl")
+ @JsonPropertyDescription("API URL for the Schema Registry used when producing Kafka messages (if a Schema Registry was used)")
+ private String schemaRegistryUrl;
+
+ /**
+ * MUST NOT be specified if schemaRegistryUrl is not specified
+ *
+ * The vendor of Schema Registry and Kafka serdes library that should be used (e.g. apicurio, confluent, ibm, or karapace)
+ */
+ @Nullable
+ @JsonProperty("schemaRegistryVendor")
+ @JsonPropertyDescription("The vendor of Schema Registry and Kafka serdes library that should be used (e.g. apicurio, confluent, ibm, or karapace)")
+ private String schemaRegistryVendor;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.4.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.4.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/channel/KafkaChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/channel/KafkaChannelBinding.java
new file mode 100644
index 00000000..e7c8f475
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/channel/KafkaChannelBinding.java
@@ -0,0 +1,84 @@
+package com.asyncapi.bindings.kafka.v0._5_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka channel binding.
+ *
+ * @see Kafka channel binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.5.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Kafka channel binding.")
+public class KafkaChannelBinding extends com.asyncapi.bindings.kafka.KafkaChannelBinding {
+
+ /**
+ * Kafka topic name if different from channel name.
+ */
+ @Nullable
+ @JsonProperty("topic")
+ @JsonPropertyDescription("Kafka topic name if different from channel name.")
+ private String topic;
+
+ /**
+ * Number of partitions configured on this topic (useful to know how many parallel consumers you may run).
+ *
+ * MUST be positive.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 1,
+ message = "Number of partitions must be greater or equals to 1"
+ )
+ @JsonProperty("partitions")
+ @JsonPropertyDescription("Number of partitions configured on this topic (useful to know how many parallel consumers you may run).")
+ private Integer partitions;
+
+ /**
+ * Number of replicas configured on this topic.
+ *
+ * MUST be positive.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 1,
+ message = "Number of replicas must be greater or equals to 1"
+ )
+ @JsonProperty("replicas")
+ @JsonPropertyDescription("Number of replicas configured on this topic.")
+ private Integer replicas;
+
+ /**
+ * Topic configuration properties that are relevant for the API.
+ */
+ @Nullable
+ @JsonProperty("topicConfiguration")
+ @JsonPropertyDescription("Topic configuration properties that are relevant for the API.")
+ private KafkaChannelTopicConfiguration topicConfiguration;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.5.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.5.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/channel/KafkaChannelTopicCleanupPolicy.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/channel/KafkaChannelTopicCleanupPolicy.java
new file mode 100644
index 00000000..80aab245
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/channel/KafkaChannelTopicCleanupPolicy.java
@@ -0,0 +1,21 @@
+package com.asyncapi.bindings.kafka.v0._5_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Kafka channel cleanup policy.
+ *
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.5.0
+ * @since 1.0.0-RC2
+ */
+public enum KafkaChannelTopicCleanupPolicy {
+
+ @JsonProperty("compact")
+ COMPACT,
+
+ @JsonProperty("delete")
+ DELETE
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/channel/KafkaChannelTopicConfiguration.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/channel/KafkaChannelTopicConfiguration.java
new file mode 100644
index 00000000..8159dfcb
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/channel/KafkaChannelTopicConfiguration.java
@@ -0,0 +1,125 @@
+package com.asyncapi.bindings.kafka.v0._5_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * This objects contains information about the API relevant topic configuration in Kafka.
+ *
+ * @see Kafka channel binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.5.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class KafkaChannelTopicConfiguration {
+
+ /**
+ * The cleanup.policy configuration option.
+ *
+ * array may only contain delete and/or compact
+ */
+ @Nullable
+ @JsonProperty("cleanup.policy")
+ private List cleanupPolicy;
+
+ /**
+ * The retention.ms configuration option.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = -1,
+ message = "retention.ms must be greater or equals to -1"
+ )
+ @JsonProperty("retention.ms")
+ @JsonPropertyDescription("The [`retention.ms`](https://kafka.apache.org/documentation/#topicconfigs_retention.ms) configuration option.")
+ private Integer retentionMs;
+
+ /**
+ * The retention.bytes configuration option.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = -1,
+ message = "retention.bytes must be greater or equals to -1"
+ )
+ @JsonProperty("retention.bytes")
+ @JsonPropertyDescription("The [`retention.bytes`](https://kafka.apache.org/documentation/#topicconfigs_retention.bytes) configuration option.")
+ private Integer retentionBytes;
+
+ /**
+ * The delete.retention.ms configuration option.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "delete.retention.ms must be greater or equals to 0"
+ )
+ @JsonProperty("delete.retention.ms")
+ @JsonPropertyDescription("The [`delete.retention.ms`](https://kafka.apache.org/documentation/#topicconfigs_delete.retention.ms) configuration option.")
+ private Integer deleteRetentionMs;
+
+ /**
+ * The max.message.bytes configuration option.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "max.message.bytes must be greater or equals to 0"
+ )
+ @JsonProperty("max.message.bytes")
+ @JsonPropertyDescription("The [`max.message.bytes`](https://kafka.apache.org/documentation/#topicconfigs_max.message.bytes) configuration option.")
+ private Integer maxMessageBytes;
+
+ /**
+ * It shows whether the schema validation for the message key is enabled.
+ *
+ * Vendor specific config.
+ * For more details: confluent.key.schema.validation
+ */
+ @Nullable
+ @JsonProperty("confluent.key.schema.validation")
+ private Boolean confluentKeySchemaValidation;
+
+ /**
+ * The name of the schema lookup strategy for the message key.
+ *
+ * Vendor specific config.
+ * For more details: confluent.key.subject.name.strategy
+ */
+ @Nullable
+ @JsonProperty("confluent.key.subject.name.strategy")
+ private String confluentKeySubjectNameStrategy;
+
+ /**
+ * It shows whether the schema validation for the message value is enabled.
+ *
+ * Vendor specific config.
+ * For more details: confluent.value.schema.validation
+ */
+ @Nullable
+ @JsonProperty("confluent.value.schema.validation")
+ private Boolean confluentValueSchemaValidation;
+
+ /**
+ * The name of the schema lookup strategy for the message value.
+ *
+ * Vendor specific config.
+ * For more details: confluent.value.subject.name.strategy
+ */
+ @Nullable
+ @JsonProperty("confluent.value.subject.name.strategy")
+ private String confluentValueSubjectNameStrategy;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/message/KafkaMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/message/KafkaMessageBinding.java
new file mode 100644
index 00000000..5fbc6220
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/message/KafkaMessageBinding.java
@@ -0,0 +1,72 @@
+package com.asyncapi.bindings.kafka.v0._5_0.message;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka message binding.
+ *
+ * @see Kafka message binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.5.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class KafkaMessageBinding extends com.asyncapi.bindings.kafka.KafkaMessageBinding {
+
+ /**
+ * The message key.
+ */
+ // TODO: Reference, AsyncAPISchema
+ @Nullable
+ @JsonProperty("key")
+ @JsonPropertyDescription("The message key.")
+ private AsyncAPISchema key;
+
+ /**
+ * If a Schema Registry is used when performing this operation, tells where the id of schema is stored (e.g. header or payload).
+ */
+ @Nullable
+ @JsonProperty("schemaIdLocation")
+ @JsonPropertyDescription("If a Schema Registry is used when performing this operation, tells where the id of schema is stored (e.g. header or payload).")
+ private KafkaMessageSchemaIdLocation schemaIdLocation;
+
+ /**
+ * Number of bytes or vendor specific values when schema id is encoded in payload (e.g confluent/ apicurio-legacy / apicurio-new).
+ */
+ @Nullable
+ @JsonProperty("schemaIdPayloadEncoding")
+ @JsonPropertyDescription("Number of bytes or vendor specific values when schema id is encoded in payload (e.g confluent/ apicurio-legacy / apicurio-new).")
+ private String schemaIdPayloadEncoding;
+
+ /**
+ * Freeform string for any naming strategy class to use. Clients should default to the vendor default if not supplied.
+ */
+ @Nullable
+ @JsonProperty("schemaLookupStrategy")
+ @JsonPropertyDescription("Freeform string for any naming strategy class to use. Clients should default to the vendor default if not supplied.")
+ private String schemaLookupStrategy;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.5.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.5.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/message/KafkaMessageSchemaIdLocation.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/message/KafkaMessageSchemaIdLocation.java
new file mode 100644
index 00000000..034511f2
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/message/KafkaMessageSchemaIdLocation.java
@@ -0,0 +1,22 @@
+package com.asyncapi.bindings.kafka.v0._5_0.message;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes Kafka message schema id location.
+ *
+ * @see Kafka message binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.5.0
+ * @since 1.0.0-RC2
+ */
+public enum KafkaMessageSchemaIdLocation {
+
+ @JsonProperty("header")
+ HEADER,
+
+ @JsonProperty("payload")
+ PAYLOAD
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/operation/KafkaOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/operation/KafkaOperationBinding.java
new file mode 100644
index 00000000..46b68882
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/operation/KafkaOperationBinding.java
@@ -0,0 +1,55 @@
+package com.asyncapi.bindings.kafka.v0._5_0.operation;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka operation binding.
+ *
+ * @see Kafka operation binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.5.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class KafkaOperationBinding extends com.asyncapi.bindings.kafka.KafkaOperationBinding {
+
+ /**
+ * Id of the consumer group.
+ */
+ @Nullable
+ @JsonProperty("groupId")
+ @JsonPropertyDescription("Id of the consumer group.")
+ private AsyncAPISchema groupId;
+
+ /**
+ * Id of the consumer inside a consumer group.
+ */
+ @Nullable
+ @JsonProperty("clientId")
+ @JsonPropertyDescription("Id of the consumer inside a consumer group.")
+ private AsyncAPISchema clientId;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.5.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.5.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/server/KafkaServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/server/KafkaServerBinding.java
new file mode 100644
index 00000000..7aafff0e
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/kafka/v0/_5_0/server/KafkaServerBinding.java
@@ -0,0 +1,58 @@
+package com.asyncapi.bindings.kafka.v0._5_0.server;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Kafka server binding.
+ *
+ * @see Kafka server binding
+ * @see Kafka
+ * @author Pavel Bodiachevskii
+ * @version 0.5.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Kafka server binding.")
+public class KafkaServerBinding extends com.asyncapi.bindings.kafka.KafkaServerBinding {
+
+ /**
+ * API URL for the Schema Registry used when producing Kafka messages (if a Schema Registry was used)
+ */
+ @Nullable
+ @JsonProperty("schemaRegistryUrl")
+ @JsonPropertyDescription("API URL for the Schema Registry used when producing Kafka messages (if a Schema Registry was used)")
+ private String schemaRegistryUrl;
+
+ /**
+ * MUST NOT be specified if schemaRegistryUrl is not specified
+ *
+ * The vendor of Schema Registry and Kafka serdes library that should be used (e.g. apicurio, confluent, ibm, or karapace)
+ */
+ @Nullable
+ @JsonProperty("schemaRegistryVendor")
+ @JsonPropertyDescription("The vendor of Schema Registry and Kafka serdes library that should be used (e.g. apicurio, confluent, ibm, or karapace)")
+ private String schemaRegistryVendor;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.5.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.5.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/MercureChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/MercureChannelBinding.java
new file mode 100644
index 00000000..e4a5ea6b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/MercureChannelBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.mercure;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Mercure channel binding.
+ *
+ * @see Mercure channel binding
+ * @see Mercure
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.mercure.v0._1_0.channel.MercureChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mercure.v0._1_0.channel.MercureChannelBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class MercureChannelBinding extends ChannelBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/MercureMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/MercureMessageBinding.java
new file mode 100644
index 00000000..8cf46ab1
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/MercureMessageBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.mercure;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Mercure message binding.
+ *
+ * @see Mercure message binding
+ * @see Mercure
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.mercure.v0._1_0.message.MercureMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mercure.v0._1_0.message.MercureMessageBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class MercureMessageBinding extends MessageBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/MercureOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/MercureOperationBinding.java
new file mode 100644
index 00000000..541bbd95
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/MercureOperationBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.mercure;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Mercure operation binding.
+ *
+ * @see Mercure operation binding
+ * @see Mercure
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.mercure.v0._1_0.operation.MercureOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mercure.v0._1_0.operation.MercureOperationBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class MercureOperationBinding extends OperationBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/MercureServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/MercureServerBinding.java
new file mode 100644
index 00000000..7af11624
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/MercureServerBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.mercure;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Mercure server binding.
+ *
+ * @see Mercure server binding
+ * @see Mercure
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.mercure.v0._1_0.server.MercureServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mercure.v0._1_0.server.MercureServerBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class MercureServerBinding extends ServerBinding {
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/v0/_1_0/channel/MercureChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/v0/_1_0/channel/MercureChannelBinding.java
new file mode 100644
index 00000000..616b9edb
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/v0/_1_0/channel/MercureChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.mercure.v0._1_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Mercure channel binding.
+ *
+ * @see Mercure channel binding
+ * @see Mercure
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MercureChannelBinding extends com.asyncapi.bindings.mercure.MercureChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/v0/_1_0/message/MercureMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/v0/_1_0/message/MercureMessageBinding.java
new file mode 100644
index 00000000..7881a70d
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/v0/_1_0/message/MercureMessageBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.mercure.v0._1_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Mercure message binding.
+ *
+ * @see Mercure message binding
+ * @see Mercure
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MercureMessageBinding extends com.asyncapi.bindings.mercure.MercureMessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/v0/_1_0/operation/MercureOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/v0/_1_0/operation/MercureOperationBinding.java
new file mode 100644
index 00000000..ade40461
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/v0/_1_0/operation/MercureOperationBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.mercure.v0._1_0.operation;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Mercure operation binding.
+ *
+ * @see Mercure operation binding
+ * @see Mercure
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MercureOperationBinding extends com.asyncapi.bindings.mercure.MercureOperationBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/v0/_1_0/server/MercureServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/v0/_1_0/server/MercureServerBinding.java
new file mode 100644
index 00000000..273141ca
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mercure/v0/_1_0/server/MercureServerBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.mercure.v0._1_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Mercure server binding.
+ *
+ * @see Mercure server binding
+ * @see Mercure
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MercureServerBinding extends com.asyncapi.bindings.mercure.MercureServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/MQTTChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/MQTTChannelBinding.java
new file mode 100644
index 00000000..ad900ee3
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/MQTTChannelBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.mqtt;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes MQTT channel binding.
+ *
+ * @see MQTT channel binding
+ * @see MQTT
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.mqtt.v0._2_0.channel.MQTTChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt.v0._1_0.channel.MQTTChannelBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt.v0._2_0.channel.MQTTChannelBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class MQTTChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/MQTTMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/MQTTMessageBinding.java
new file mode 100644
index 00000000..e6ad506f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/MQTTMessageBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.mqtt;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes MQTT message binding.
+ *
+ * @see MQTT message binding
+ * @see MQTT
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.mqtt.v0._2_0.message.MQTTMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt.v0._1_0.message.MQTTMessageBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt.v0._2_0.message.MQTTMessageBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class MQTTMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/MQTTOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/MQTTOperationBinding.java
new file mode 100644
index 00000000..c4dbf21c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/MQTTOperationBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.mqtt;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes MQTT operation binding.
+ *
+ * @see MQTT operation binding
+ * @see MQTT
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.mqtt.v0._2_0.operation.MQTTOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt.v0._1_0.operation.MQTTOperationBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt.v0._2_0.operation.MQTTOperationBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class MQTTOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/MQTTServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/MQTTServerBinding.java
new file mode 100644
index 00000000..69375552
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/MQTTServerBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.mqtt;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes MQTT server binding.
+ *
+ * @see MQTT server binding
+ * @see MQTT
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.mqtt.v0._2_0.server.MQTTServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt.v0._1_0.server.MQTTServerBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt.v0._2_0.server.MQTTServerBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class MQTTServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/channel/MQTTChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/channel/MQTTChannelBinding.java
new file mode 100644
index 00000000..e1480b9e
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/channel/MQTTChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.mqtt.v0._1_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes MQTT channel binding.
+ *
+ * @see MQTT channel binding
+ * @see MQTT
+ * @version 0.1.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTTChannelBinding extends com.asyncapi.bindings.mqtt.MQTTChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/message/MQTTMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/message/MQTTMessageBinding.java
new file mode 100644
index 00000000..31a10b17
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/message/MQTTMessageBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.mqtt.v0._1_0.message;
+
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes MQTT message binding.
+ *
+ * Contains information about the message representation in MQTT.
+ *
+ * @see MQTT message binding
+ * @see MQTT
+ * @version 0.1.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTTMessageBinding extends com.asyncapi.bindings.mqtt.MQTTMessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/operation/MQTTOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/operation/MQTTOperationBinding.java
new file mode 100644
index 00000000..d6b7f1ba
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/operation/MQTTOperationBinding.java
@@ -0,0 +1,71 @@
+package com.asyncapi.bindings.mqtt.v0._1_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes MQTT operation binding.
+ *
+ * Contains information about the operation representation in MQTT.
+ *
+ * @see MQTT operation binding
+ * @see MQTT
+ * @version 0.1.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes MQTT operation binding.")
+public class MQTTOperationBinding extends com.asyncapi.bindings.mqtt.MQTTOperationBinding {
+
+ /**
+ * 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
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "QoS must be greater or equals to 0."
+ )
+ @javax.validation.constraints.Max(
+ value = 2,
+ message = "QoS must be lower or equals to 0."
+ )
+ @JsonProperty("qos")
+ @JsonPropertyDescription("Defines the Quality of Service (QoS) levels for the message flow between client and server. Its value MUST be either 0 (At most once delivery), 1 (At least once delivery), or 2 (Exactly once delivery).")
+ private Integer qos;
+
+ /**
+ * Whether the broker should retain the message or not.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("retain")
+ @JsonPropertyDescription("Whether the broker should retain the message or not.")
+ private Boolean retain;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/server/MQTTServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/server/MQTTServerBinding.java
new file mode 100644
index 00000000..8fec8ff8
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/server/MQTTServerBinding.java
@@ -0,0 +1,74 @@
+package com.asyncapi.bindings.mqtt.v0._1_0.server;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes MQTT server binding.
+ *
+ * Contains information about the server representation in MQTT.
+ *
+ * @see MQTT server binding
+ * @see MQTT
+ * @version 0.1.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes MQTT server binding.")
+public class MQTTServerBinding extends com.asyncapi.bindings.mqtt.MQTTServerBinding {
+
+ /**
+ * The client identifier.
+ */
+ @Nullable
+ @JsonProperty("clientId")
+ @JsonPropertyDescription("The client identifier.")
+ private String clientId;
+
+ /**
+ * Whether to create a persisten connection or not. When false, the connection will be persistent.
+ */
+ @Nullable
+ @JsonProperty("cleanSession")
+ @JsonPropertyDescription("Whether to create a persisten connection or not. When false, the connection will be persistent.")
+ private Boolean cleanSession;
+
+ /**
+ * Last Will and Testament configuration.
+ */
+ @Nullable
+ @JsonProperty("lastWill")
+ @JsonPropertyDescription("Last Will and Testament configuration.")
+ private MQTTServerLastWillConfiguration lastWill;
+
+ /**
+ * Interval in seconds of the longest period of time the broker and the client can endure without sending a message.
+ */
+ @Nullable
+ @JsonProperty("keepAlive")
+ @JsonPropertyDescription("Interval in seconds of the longest period of time the broker and the client can endure without sending a message.")
+ private Integer keepAlive;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/server/MQTTServerLastWillConfiguration.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/server/MQTTServerLastWillConfiguration.java
new file mode 100644
index 00000000..65cf84cc
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_1_0/server/MQTTServerLastWillConfiguration.java
@@ -0,0 +1,67 @@
+package com.asyncapi.bindings.mqtt.v0._1_0.server;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes MQTT server last will configuration.
+ *
+ * @see MQTT server binding
+ * @see MQTT
+ * @version 0.1.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@EqualsAndHashCode
+@NoArgsConstructor
+@AllArgsConstructor
+public class MQTTServerLastWillConfiguration {
+
+ /**
+ * The topic where the Last Will and Testament message will be sent.
+ */
+ @Nullable
+ @JsonProperty("topic")
+ @JsonPropertyDescription("The topic where the Last Will and Testament message will be sent.")
+ private String topic;
+
+ /**
+ * Defines how hard the broker/client will try to ensure that the Last Will and Testament message is received.
+ * Its value MUST be either 0, 1 or 2.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "QoS must be greater or equals to 0."
+ )
+ @javax.validation.constraints.Max(
+ value = 2,
+ message = "QoS must be lower or equals to 0."
+ )
+ @JsonProperty("qos")
+ @JsonPropertyDescription("Defines how hard the broker/client will try to ensure that the Last Will and Testament message is received. Its value MUST be either 0, 1 or 2.")
+ private Integer qos;
+
+ /**
+ * Last Will message.
+ */
+ @Nullable
+ @JsonProperty("message")
+ @JsonPropertyDescription("Last Will message.")
+ private String message;
+
+ /**
+ * Whether the broker should retain the Last Will and Testament message or not.
+ */
+ @Nullable
+ @JsonProperty("retain")
+ @JsonPropertyDescription("Whether the broker should retain the Last Will and Testament message or not.")
+ private Boolean retain;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/channel/MQTTChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/channel/MQTTChannelBinding.java
new file mode 100644
index 00000000..d82abe6c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/channel/MQTTChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.mqtt.v0._2_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes MQTT channel binding.
+ *
+ * @see MQTT channel binding
+ * @see MQTT
+ * @version 0.2.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTTChannelBinding extends com.asyncapi.bindings.mqtt.MQTTChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/message/MQTTMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/message/MQTTMessageBinding.java
new file mode 100644
index 00000000..c4ccf1de
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/message/MQTTMessageBinding.java
@@ -0,0 +1,84 @@
+package com.asyncapi.bindings.mqtt.v0._2_0.message;
+
+import com.asyncapi.schemas.serde.asyncapi.ReferenceOrAsyncAPISchemaOrStringDeserializer;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes MQTT message binding.
+ *
+ * Contains information about the message representation in MQTT.
+ *
+ * @see MQTT message binding
+ * @see MQTT
+ * @version 0.2.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTTMessageBinding extends com.asyncapi.bindings.mqtt.MQTTMessageBinding {
+
+ /**
+ * 1 indicates that the payload is UTF-8 encoded character data.
+ *
+ * 0 indicates that the payload format is unspecified.
+ */
+ @Nullable
+ @Builder.Default
+ private Integer payloadFormatIndicator = 0;
+
+ /**
+ * Correlation Data is used by the sender of the request message to identify which request the response message is for when it is received.
+ *
+ * MUST BE:
+ *
+ * {@link com.asyncapi.schemas.asyncapi.AsyncAPISchema}
+ * {@link com.asyncapi.schemas.asyncapi.Reference}
+ *
+ */
+ @Nullable
+ @JsonDeserialize(using = ReferenceOrAsyncAPISchemaOrStringDeserializer.class)
+ private Object correlationData;
+
+ /**
+ * String describing the content type of the message payload.
+ *
+ * This should not conflict with the contentType field of the associated AsyncAPI Message object.
+ */
+ @Nullable
+ private String contentType;
+
+ /**
+ * The topic (channel URI) to be used for a response message.
+ *
+ * MUST BE:
+ *
+ * {@link String} in uri-template
format
+ * {@link com.asyncapi.schemas.asyncapi.AsyncAPISchema}
+ * {@link com.asyncapi.schemas.asyncapi.Reference}
+ *
+ */
+ @Nullable
+ @JsonDeserialize(using = ReferenceOrAsyncAPISchemaOrStringDeserializer.class)
+ private Object responseTopic;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/operation/MQTTOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/operation/MQTTOperationBinding.java
new file mode 100644
index 00000000..e8b9b57a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/operation/MQTTOperationBinding.java
@@ -0,0 +1,87 @@
+package com.asyncapi.bindings.mqtt.v0._2_0.operation;
+
+import com.asyncapi.schemas.serde.asyncapi.ReferenceOrAsyncAPISchemaOrNumberDeserializer;
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes MQTT operation binding.
+ *
+ * Contains information about the operation representation in MQTT.
+ *
+ * @see MQTT operation binding
+ * @see MQTT
+ * @version 0.2.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes MQTT operation binding.")
+public class MQTTOperationBinding extends com.asyncapi.bindings.mqtt.MQTTOperationBinding {
+
+ /**
+ * 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
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "QoS must be greater or equals to 0."
+ )
+ @javax.validation.constraints.Max(
+ value = 2,
+ message = "QoS must be lower or equals to 2."
+ )
+ @JsonProperty("qos")
+ @JsonPropertyDescription("Defines the Quality of Service (QoS) levels for the message flow between client and server. Its value MUST be either 0 (At most once delivery), 1 (At least once delivery), or 2 (Exactly once delivery).")
+ private Integer qos;
+
+ /**
+ * Whether the broker should retain the message or not.
+ *
+ * Applies to: publish, subscribe
+ */
+ @Nullable
+ @JsonProperty("retain")
+ @JsonPropertyDescription("Whether the broker should retain the message or not.")
+ private Boolean retain;
+
+ /**
+ * Lifetime of the message in seconds.
+ *
+ * MUST BE:
+ *
+ * {@link Number}
+ * {@link com.asyncapi.schemas.asyncapi.Reference}
+ * {@link com.asyncapi.schemas.asyncapi.AsyncAPISchema}
+ *
+ */
+ @Nullable
+ @JsonDeserialize(using = ReferenceOrAsyncAPISchemaOrNumberDeserializer.class)
+ private Object messageExpiryInterval;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/server/MQTTServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/server/MQTTServerBinding.java
new file mode 100644
index 00000000..cd924d17
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/server/MQTTServerBinding.java
@@ -0,0 +1,106 @@
+package com.asyncapi.bindings.mqtt.v0._2_0.server;
+
+import com.asyncapi.schemas.serde.asyncapi.ReferenceOrAsyncAPISchemaOrNumberDeserializer;
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes MQTT server binding.
+ *
+ * Contains information about the server representation in MQTT.
+ *
+ * @see MQTT server binding
+ * @see MQTT
+ * @version 0.2.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes MQTT server binding.")
+public class MQTTServerBinding extends com.asyncapi.bindings.mqtt.MQTTServerBinding {
+
+ /**
+ * The client identifier.
+ */
+ @Nullable
+ @JsonProperty("clientId")
+ @JsonPropertyDescription("The client identifier.")
+ private String clientId;
+
+ /**
+ * Whether to create a persisten connection or not. When false, the connection will be persistent.
+ */
+ @Nullable
+ @JsonProperty("cleanSession")
+ @JsonPropertyDescription("Whether to create a persisten connection or not. When false, the connection will be persistent.")
+ private Boolean cleanSession;
+
+ /**
+ * Last Will and Testament configuration.
+ */
+ @Nullable
+ @JsonProperty("lastWill")
+ @JsonPropertyDescription("Last Will and Testament configuration.")
+ private MQTTServerLastWillConfiguration lastWill;
+
+ /**
+ * Interval in seconds of the longest period of time the broker and the client can endure without sending a message.
+ */
+ @Nullable
+ @JsonProperty("keepAlive")
+ @JsonPropertyDescription("Interval in seconds of the longest period of time the broker and the client can endure without sending a message.")
+ private Integer keepAlive;
+
+ /**
+ * Interval time in seconds or a Schema Object containing the definition of the interval.
+ *
+ * The broker maintains a session for a disconnected client until this interval expires.
+ *
+ * MUST BE:
+ *
+ * {@link Number}
+ * {@link com.asyncapi.schemas.asyncapi.Reference}
+ * {@link com.asyncapi.schemas.asyncapi.AsyncAPISchema}
+ *
+ */
+ @Nullable
+ @JsonDeserialize(using = ReferenceOrAsyncAPISchemaOrNumberDeserializer.class)
+ private Object sessionExpiryInterval;
+
+ /**
+ * Number of bytes or a Schema Object representing the Maximum Packet Size the Client is willing to accept.
+ *
+ * MUST BE:
+ *
+ * {@link Number}
+ * {@link com.asyncapi.schemas.asyncapi.Reference}
+ * {@link com.asyncapi.schemas.asyncapi.AsyncAPISchema}
+ *
+ */
+ @Nullable
+ @JsonDeserialize(using = ReferenceOrAsyncAPISchemaOrNumberDeserializer.class)
+ private Object maximumPacketSize;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/server/MQTTServerLastWillConfiguration.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/server/MQTTServerLastWillConfiguration.java
new file mode 100644
index 00000000..663a226d
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt/v0/_2_0/server/MQTTServerLastWillConfiguration.java
@@ -0,0 +1,67 @@
+package com.asyncapi.bindings.mqtt.v0._2_0.server;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes MQTT server last will configuration.
+ *
+ * @see MQTT server binding
+ * @see MQTT
+ * @version 0.2.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@EqualsAndHashCode
+@NoArgsConstructor
+@AllArgsConstructor
+public class MQTTServerLastWillConfiguration {
+
+ /**
+ * The topic where the Last Will and Testament message will be sent.
+ */
+ @Nullable
+ @JsonProperty("topic")
+ @JsonPropertyDescription("The topic where the Last Will and Testament message will be sent.")
+ private String topic;
+
+ /**
+ * Defines how hard the broker/client will try to ensure that the Last Will and Testament message is received.
+ * Its value MUST be either 0, 1 or 2.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "QoS must be greater or equals to 0."
+ )
+ @javax.validation.constraints.Max(
+ value = 2,
+ message = "QoS must be lower or equals to 0."
+ )
+ @JsonProperty("qos")
+ @JsonPropertyDescription("Defines how hard the broker/client will try to ensure that the Last Will and Testament message is received. Its value MUST be either 0, 1 or 2.")
+ private Integer qos;
+
+ /**
+ * Last Will message.
+ */
+ @Nullable
+ @JsonProperty("message")
+ @JsonPropertyDescription("Last Will message.")
+ private String message;
+
+ /**
+ * Whether the broker should retain the Last Will and Testament message or not.
+ */
+ @Nullable
+ @JsonProperty("retain")
+ @JsonPropertyDescription("Whether the broker should retain the Last Will and Testament message or not.")
+ private Boolean retain;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/MQTT5ChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/MQTT5ChannelBinding.java
new file mode 100644
index 00000000..ebf82916
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/MQTT5ChannelBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.mqtt5;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes MQTT 5 channel binding.
+ *
+ * @see MQTT 5 channel binding
+ * @see MQTT 5
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.mqtt5.v0._2_0.channel.MQTT5ChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt5.v0._1_0.channel.MQTT5ChannelBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt5.v0._2_0.channel.MQTT5ChannelBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class MQTT5ChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/MQTT5MessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/MQTT5MessageBinding.java
new file mode 100644
index 00000000..c736f290
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/MQTT5MessageBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.mqtt5;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes MQTT 5 message binding.
+ *
+ * @see MQTT 5 message binding
+ * @see MQTT 5
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.mqtt5.v0._2_0.message.MQTT5MessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt5.v0._1_0.message.MQTT5MessageBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt5.v0._2_0.message.MQTT5MessageBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class MQTT5MessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/MQTT5OperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/MQTT5OperationBinding.java
new file mode 100644
index 00000000..27f30812
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/MQTT5OperationBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.mqtt5;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes MQTT 5 operation binding.
+ *
+ * @see MQTT 5 operation binding
+ * @see MQTT 5
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.mqtt5.v0._2_0.operation.MQTT5OperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt5.v0._1_0.operation.MQTT5OperationBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt5.v0._2_0.operation.MQTT5OperationBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class MQTT5OperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/MQTT5ServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/MQTT5ServerBinding.java
new file mode 100644
index 00000000..996cd92f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/MQTT5ServerBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.mqtt5;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes MQTT 5 server binding.
+ *
+ * @see MQTT 5 server binding
+ * @see MQTT 5
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.mqtt5.v0._2_0.server.MQTT5ServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt5.v0._1_0.server.MQTT5ServerBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.mqtt5.v0._2_0.server.MQTT5ServerBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class MQTT5ServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/package-info.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/package-info.java
new file mode 100644
index 00000000..e4f5b8e5
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/package-info.java
@@ -0,0 +1,9 @@
+/**
+ * Deprecation Warning:
+ *
+ * MQTT version 5 specific bindings are deprecated in favor of MQTT bindings that are not version specific.
+ *
+ * @see com.asyncapi.bindings.mqtt
+ */
+@Deprecated
+package com.asyncapi.bindings.mqtt5;
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_1_0/channel/MQTT5ChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_1_0/channel/MQTT5ChannelBinding.java
new file mode 100644
index 00000000..2fc0e88f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_1_0/channel/MQTT5ChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.mqtt5.v0._1_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes MQTT 5 channel binding.
+ *
+ * @see MQTT 5 channel binding
+ * @see MQTT 5
+ * @version 0.1.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTT5ChannelBinding extends com.asyncapi.bindings.mqtt5.MQTT5ChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_1_0/message/MQTT5MessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_1_0/message/MQTT5MessageBinding.java
new file mode 100644
index 00000000..9b26057f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_1_0/message/MQTT5MessageBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.mqtt5.v0._1_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes MQTT 5 message binding.
+ *
+ * @see MQTT 5 message binding
+ * @see MQTT 5
+ * @version 0.1.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTT5MessageBinding extends com.asyncapi.bindings.mqtt5.MQTT5MessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_1_0/operation/MQTT5OperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_1_0/operation/MQTT5OperationBinding.java
new file mode 100644
index 00000000..0f9f2272
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_1_0/operation/MQTT5OperationBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.mqtt5.v0._1_0.operation;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes MQTT 5 operation binding.
+ *
+ * @see MQTT 5 operation binding
+ * @see MQTT 5
+ * @version 0.1.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTT5OperationBinding extends com.asyncapi.bindings.mqtt5.MQTT5OperationBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_1_0/server/MQTT5ServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_1_0/server/MQTT5ServerBinding.java
new file mode 100644
index 00000000..4a06cd40
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_1_0/server/MQTT5ServerBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.mqtt5.v0._1_0.server;
+
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes MQTT 5 server binding.
+ *
+ * @see MQTT 5 server binding
+ * @see MQTT 5
+ * @version 0.1.0
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTT5ServerBinding extends com.asyncapi.bindings.mqtt5.MQTT5ServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_2_0/channel/MQTT5ChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_2_0/channel/MQTT5ChannelBinding.java
new file mode 100644
index 00000000..97b4eb0f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_2_0/channel/MQTT5ChannelBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.mqtt5.v0._2_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * 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 com.asyncapi.bindings.mqtt5.MQTT5ChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_2_0/message/MQTT5MessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_2_0/message/MQTT5MessageBinding.java
new file mode 100644
index 00000000..9b5ead5f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_2_0/message/MQTT5MessageBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.mqtt5.v0._2_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * 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 com.asyncapi.bindings.mqtt5.MQTT5MessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_2_0/operation/MQTT5OperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_2_0/operation/MQTT5OperationBinding.java
new file mode 100644
index 00000000..77a272db
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_2_0/operation/MQTT5OperationBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.mqtt5.v0._2_0.operation;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * 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 com.asyncapi.bindings.mqtt5.MQTT5OperationBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_2_0/server/MQTT5ServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_2_0/server/MQTT5ServerBinding.java
new file mode 100644
index 00000000..f43c7f09
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/mqtt5/v0/_2_0/server/MQTT5ServerBinding.java
@@ -0,0 +1,40 @@
+package com.asyncapi.bindings.mqtt5.v0._2_0.server;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes MQTT 5 server binding.
+ *
+ * @version 0.2.0
+ * @see MQTT 5 server binding
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class MQTT5ServerBinding extends com.asyncapi.bindings.mqtt5.MQTT5ServerBinding {
+
+ /**
+ * TODO: support reference, Schema object
+ * Session Expiry Interval in seconds or a Schema Object containing the definition of the interval.
+ */
+ private int sessionExpiryInterval;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/NATSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/NATSChannelBinding.java
new file mode 100644
index 00000000..63b99770
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/NATSChannelBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.nats;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes NATS channel binding.
+ *
+ * @see NATS channel binding
+ * @see NATS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.nats.v0._1_0.channel.NATSChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.nats.v0._1_0.channel.NATSChannelBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class NATSChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/NATSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/NATSMessageBinding.java
new file mode 100644
index 00000000..6b8bddde
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/NATSMessageBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.nats;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes NATS message binding.
+ *
+ * @see NATS message binding
+ * @see NATS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.nats.v0._1_0.message.NATSMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.nats.v0._1_0.message.NATSMessageBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class NATSMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/NATSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/NATSOperationBinding.java
new file mode 100644
index 00000000..86bb18f4
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/NATSOperationBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.nats;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes NATS operation binding.
+ *
+ * @see NATS operation binding
+ * @see NATS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.nats.v0._1_0.operation.NATSOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.nats.v0._1_0.operation.NATSOperationBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class NATSOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/NATSServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/NATSServerBinding.java
new file mode 100644
index 00000000..aef81625
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/NATSServerBinding.java
@@ -0,0 +1,30 @@
+package com.asyncapi.bindings.nats;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes NATS channel binding.
+ *
+ * @see NATS server binding
+ * @see NATS
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.nats.v0._1_0.server.NATSServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.nats.v0._1_0.server.NATSServerBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class NATSServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/v0/_1_0/channel/NATSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/v0/_1_0/channel/NATSChannelBinding.java
new file mode 100644
index 00000000..81f06a31
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/v0/_1_0/channel/NATSChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.nats.v0._1_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes NATS channel binding.
+ *
+ * @see NATS channel binding
+ * @see NATS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class NATSChannelBinding extends com.asyncapi.bindings.nats.NATSChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/v0/_1_0/message/NATSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/v0/_1_0/message/NATSMessageBinding.java
new file mode 100644
index 00000000..fcce1b77
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/v0/_1_0/message/NATSMessageBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.nats.v0._1_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes NATS message binding.
+ *
+ * @see NATS message binding
+ * @see NATS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class NATSMessageBinding extends com.asyncapi.bindings.nats.NATSMessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/v0/_1_0/operation/NATSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/v0/_1_0/operation/NATSOperationBinding.java
new file mode 100644
index 00000000..0f66c03a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/v0/_1_0/operation/NATSOperationBinding.java
@@ -0,0 +1,52 @@
+package com.asyncapi.bindings.nats.v0._1_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes NATS operation binding.
+ *
+ * @see NATS operation binding
+ * @see NATS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes NATS operation binding.")
+public class NATSOperationBinding extends com.asyncapi.bindings.nats.NATSOperationBinding {
+
+ /**
+ * Defines the name of the queue to use. It MUST NOT exceed 255 characters.
+ */
+ @Nullable
+ @javax.validation.constraints.Size(
+ max = 255,
+ message = "Queue name must be lower or equals to 255."
+ )
+ @JsonProperty("queue")
+ @JsonPropertyDescription("Defines the name of the queue to use. It MUST NOT exceed 255 characters.")
+ private String queue;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/v0/_1_0/server/NATSServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/v0/_1_0/server/NATSServerBinding.java
new file mode 100644
index 00000000..9a02f33f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/nats/v0/_1_0/server/NATSServerBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.nats.v0._1_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes NATS channel binding.
+ *
+ * @see NATS server binding
+ * @see NATS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class NATSServerBinding extends com.asyncapi.bindings.nats.NATSServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/package-info.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/package-info.java
new file mode 100644
index 00000000..dd16b3b8
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/package-info.java
@@ -0,0 +1,23 @@
+/**
+ * This module provides bindings to describe protocol-specific things:
+ *
+ * Channel
+ * Message
+ * Operation
+ * Server
+ *
+ *
+ *
+ * A "binding" (or "protocol binding") is a mechanism to define protocol-specific information.
+ *
+ * Therefore, a protocol binding MUST define protocol-specific information only.
+ *
+ * @see AsyncAPI Bindings
+ * @see AsyncAPI Channel Bindings
+ * @see AsyncAPI Message Bindings
+ * @see AsyncAPI Operation Bindings
+ * @see AsyncAPI Server Bindings
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+package com.asyncapi.bindings;
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/PulsarChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/PulsarChannelBinding.java
new file mode 100644
index 00000000..17c85dd1
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/PulsarChannelBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.pulsar;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Pulsar channel binding.
+ *
+ * @see Pulsar channel binding
+ * @see Pulsar
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.pulsar.v0._1_0.channel.PulsarChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.pulsar.v0._1_0.channel.PulsarChannelBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class PulsarChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/PulsarMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/PulsarMessageBinding.java
new file mode 100644
index 00000000..70beb28b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/PulsarMessageBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.pulsar;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Pulsar message binding.
+ *
+ * @see Pulsar message binding
+ * @see Pulsar
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.pulsar.v0._1_0.message.PulsarMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.pulsar.v0._1_0.message.PulsarMessageBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class PulsarMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/PulsarOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/PulsarOperationBinding.java
new file mode 100644
index 00000000..23fb08c0
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/PulsarOperationBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.pulsar;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Pulsar operation binding.
+ *
+ * @see Pulsar operation binding
+ * @see Pulsar
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.pulsar.v0._1_0.operation.PulsarOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.pulsar.v0._1_0.operation.PulsarOperationBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class PulsarOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/PulsarServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/PulsarServerBinding.java
new file mode 100644
index 00000000..3a000735
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/PulsarServerBinding.java
@@ -0,0 +1,30 @@
+package com.asyncapi.bindings.pulsar;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Pulsar server binding.
+ *
+ * @see Redis server binding
+ * @see Pulsar
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.pulsar.v0._1_0.server.PulsarServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.pulsar.v0._1_0.server.PulsarServerBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class PulsarServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/channel/PulsarChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/channel/PulsarChannelBinding.java
new file mode 100644
index 00000000..a1533cf3
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/channel/PulsarChannelBinding.java
@@ -0,0 +1,107 @@
+package com.asyncapi.bindings.pulsar.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes Pulsar channel binding.
+ *
+ * @see Pulsar channel binding
+ * @see Pulsar
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Pulsar channel binding.")
+public class PulsarChannelBinding extends com.asyncapi.bindings.pulsar.PulsarChannelBinding {
+
+ /**
+ * The namespace the channel is associated with.
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty("namespace")
+ @JsonPropertyDescription("The namespace the channel is associated with.")
+ private String namespace = "";
+
+ /**
+ * Persistence of the topic in Pulsar. It MUST be either persistent or non-persistent.
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.NotNull
+ @JsonProperty(value = "persistence", defaultValue = "persistent")
+ @JsonPropertyDescription("Persistence of the topic in Pulsar. It MUST be either persistent or non-persistent.")
+ private PulsarChannelPersistence persistence = PulsarChannelPersistence.PERSISTENT;
+
+ /**
+ * Topic compaction threshold given in Megabytes.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(
+ value = 0,
+ message = "Topic compaction threshold must be greater or equals to 0."
+ )
+ @JsonProperty("compaction")
+ @JsonPropertyDescription("Topic compaction threshold given in Megabytes.")
+ private Integer compaction;
+
+ /**
+ * A list of clusters the topic is replicated to.
+ */
+ @Nullable
+ @JsonProperty("geo-replication")
+ @JsonPropertyDescription("A list of clusters the topic is replicated to.")
+ private List geoReplication;
+
+ /**
+ * Topic retention policy.
+ */
+ @Nullable
+ @JsonProperty("retention")
+ @JsonPropertyDescription("Topic retention policy.")
+ private PulsarChannelRetentionDefinition retention;
+
+ /**
+ * Message time-to-live in seconds.
+ */
+ @Nullable
+ @JsonProperty("ttl")
+ @JsonPropertyDescription("Message time-to-live in seconds.")
+ private Integer ttl;
+
+ /**
+ * Message deduplication. When true, it ensures that each message produced on Pulsar topics is persisted to disk only once.
+ */
+ @Nullable
+ @JsonProperty("deduplication")
+ @JsonPropertyDescription("Message deduplication. When true, it ensures that each message produced on Pulsar topics is persisted to disk only once.")
+ private Boolean deduplication;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/channel/PulsarChannelPersistence.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/channel/PulsarChannelPersistence.java
new file mode 100644
index 00000000..ed7ccaef
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/channel/PulsarChannelPersistence.java
@@ -0,0 +1,24 @@
+package com.asyncapi.bindings.pulsar.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes Pulsar channel persistence.
+ *
+ * @see Pulsar channel binding
+ * @see Pulsar
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonClassDescription("Describes Pulsar channel persistence.")
+public enum PulsarChannelPersistence {
+
+ @JsonProperty("persistent")
+ PERSISTENT,
+
+ @JsonProperty("non-persistent")
+ NON_PERSISTENT
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/channel/PulsarChannelRetentionDefinition.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/channel/PulsarChannelRetentionDefinition.java
new file mode 100644
index 00000000..f78cca24
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/channel/PulsarChannelRetentionDefinition.java
@@ -0,0 +1,50 @@
+package com.asyncapi.bindings.pulsar.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Pulsar channel retention definition.
+ *
+ * The Retention Definition Object is used to describe the Pulsar Retention policy.
+ *
+ * @see Pulsar channel binding
+ * @see Pulsar
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode
+@JsonClassDescription("Describes Pulsar channel retention definition.")
+public class PulsarChannelRetentionDefinition {
+
+ /**
+ * Time given in Minutes.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty("time")
+ @JsonPropertyDescription("Time given in Minutes.")
+ private Integer time = 0;
+
+ /**
+ * Size given in MegaBytes.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty("size")
+ @JsonPropertyDescription("Size given in MegaBytes.")
+ private Integer size = 0;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/message/PulsarMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/message/PulsarMessageBinding.java
new file mode 100644
index 00000000..ec3970f5
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/message/PulsarMessageBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.pulsar.v0._1_0.message;
+
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Pulsar message binding.
+ *
+ * This object MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * @see Pulsar message binding
+ * @see Pulsar
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class PulsarMessageBinding extends com.asyncapi.bindings.pulsar.PulsarMessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/operation/PulsarOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/operation/PulsarOperationBinding.java
new file mode 100644
index 00000000..474b3266
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/operation/PulsarOperationBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.pulsar.v0._1_0.operation;
+
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Pulsar operation binding.
+ *
+ * This object MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * @see Pulsar operation binding
+ * @see Pulsar
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class PulsarOperationBinding extends com.asyncapi.bindings.pulsar.PulsarOperationBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/server/PulsarServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/server/PulsarServerBinding.java
new file mode 100644
index 00000000..35f78494
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/pulsar/v0/_1_0/server/PulsarServerBinding.java
@@ -0,0 +1,49 @@
+package com.asyncapi.bindings.pulsar.v0._1_0.server;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Pulsar server binding.
+ *
+ * @see Redis server binding
+ * @see Pulsar
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Pulsar server binding.")
+public class PulsarServerBinding extends com.asyncapi.bindings.pulsar.PulsarServerBinding {
+
+ /**
+ * The pulsar tenant. If omitted, "public" MUST be assumed.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "tenant", defaultValue = "public")
+ @JsonPropertyDescription("The pulsar tenant. If omitted, \"public\" MUST be assumed.")
+ private String tenant = "public";
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/RedisChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/RedisChannelBinding.java
new file mode 100644
index 00000000..fda5fa6d
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/RedisChannelBinding.java
@@ -0,0 +1,33 @@
+package com.asyncapi.bindings.redis;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Redis channel binding.
+ *
+ * @see Redis channel binding
+ * @see Redis
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.redis.v0._1_0.channel.RedisChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.redis.v0._1_0.channel.RedisChannelBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class RedisChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/RedisMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/RedisMessageBinding.java
new file mode 100644
index 00000000..7f74c770
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/RedisMessageBinding.java
@@ -0,0 +1,33 @@
+package com.asyncapi.bindings.redis;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Redis message binding.
+ *
+ * @see Redis message binding
+ * @see Redis
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.redis.v0._1_0.message.RedisMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.redis.v0._1_0.message.RedisMessageBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class RedisMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/RedisOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/RedisOperationBinding.java
new file mode 100644
index 00000000..17a931e9
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/RedisOperationBinding.java
@@ -0,0 +1,33 @@
+package com.asyncapi.bindings.redis;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Redis operation binding.
+ *
+ * @see Redis operation binding
+ * @see Redis
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.redis.v0._1_0.operation.RedisOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.redis.v0._1_0.operation.RedisOperationBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class RedisOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/RedisServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/RedisServerBinding.java
new file mode 100644
index 00000000..30a12f83
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/RedisServerBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.redis;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Redis server binding.
+ *
+ * @see Redis server binding
+ * @see Redis
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.redis.v0._1_0.server.RedisServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.redis.v0._1_0.server.RedisServerBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class RedisServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/v0/_1_0/channel/RedisChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/v0/_1_0/channel/RedisChannelBinding.java
new file mode 100644
index 00000000..3d7c7328
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/v0/_1_0/channel/RedisChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.redis.v0._1_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Redis channel binding.
+ *
+ * @see Redis channel binding
+ * @see Redis
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class RedisChannelBinding extends com.asyncapi.bindings.redis.RedisChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/v0/_1_0/message/RedisMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/v0/_1_0/message/RedisMessageBinding.java
new file mode 100644
index 00000000..96a89988
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/v0/_1_0/message/RedisMessageBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.redis.v0._1_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Redis message binding.
+ *
+ * @see Redis message binding
+ * @see Redis
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class RedisMessageBinding extends com.asyncapi.bindings.redis.RedisMessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/v0/_1_0/operation/RedisOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/v0/_1_0/operation/RedisOperationBinding.java
new file mode 100644
index 00000000..e3473df4
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/v0/_1_0/operation/RedisOperationBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.redis.v0._1_0.operation;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Redis operation binding.
+ *
+ * @see Redis operation binding
+ * @see Redis
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class RedisOperationBinding extends com.asyncapi.bindings.redis.RedisOperationBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/v0/_1_0/server/RedisServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/v0/_1_0/server/RedisServerBinding.java
new file mode 100644
index 00000000..f9ef480d
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/redis/v0/_1_0/server/RedisServerBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.redis.v0._1_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Redis server binding.
+ *
+ * @see Redis server binding
+ * @see Redis
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class RedisServerBinding extends com.asyncapi.bindings.redis.RedisServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/SNSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/SNSChannelBinding.java
new file mode 100644
index 00000000..034cfd33
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/SNSChannelBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.sns;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes SNS channel binding.
+ *
+ * @see SNS channel binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.sns.v0._1_0.channel.SNSChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.sns.v0._1_0.channel.SNSChannelBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class SNSChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/SNSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/SNSMessageBinding.java
new file mode 100644
index 00000000..46e20bd3
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/SNSMessageBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.sns;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes SNS message binding.
+ *
+ * @see SNS message binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.sns.v0._1_0.message.SNSMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.sns.v0._1_0.message.SNSMessageBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class SNSMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/SNSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/SNSOperationBinding.java
new file mode 100644
index 00000000..d71cb850
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/SNSOperationBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.sns;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes SNS operation binding.
+ *
+ * @see SNS operation binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.sns.v0._1_0.operation.SNSOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.sns.v0._1_0.operation.SNSOperationBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class SNSOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/SNSServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/SNSServerBinding.java
new file mode 100644
index 00000000..bba5de47
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/SNSServerBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.sns;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes SNS server binding.
+ *
+ * @see SNS server binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.sns.v0._1_0.server.SNSServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.sns.v0._1_0.server.SNSServerBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class SNSServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelBinding.java
new file mode 100644
index 00000000..07c428e6
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelBinding.java
@@ -0,0 +1,66 @@
+package com.asyncapi.bindings.sns.v0._1_0.channel;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * Describes SNS channel binding.
+ *
+ * @see SNS channel binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SNSChannelBinding extends com.asyncapi.bindings.sns.SNSChannelBinding {
+
+ /**
+ * The name of the topic.
+ *
+ * Can be different from the channel name to allow flexibility around AWS resource naming limitations.
+ */
+ @NotNull
+ @Builder.Default
+ private String name = "";
+
+ /**
+ * This field allows configuration of a FIFO SNS Topic.
+ */
+ @Nullable
+ private SNSChannelOrdering ordering;
+
+ /**
+ *
+ */
+ @Nullable
+ private SNSChannelPolicy policy;
+
+ /**
+ * Key-value pairs that represent AWS tags on the topic.
+ */
+ @Nullable
+ private Map tags;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelOrdering.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelOrdering.java
new file mode 100644
index 00000000..5e3ca991
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelOrdering.java
@@ -0,0 +1,37 @@
+package com.asyncapi.bindings.sns.v0._1_0.channel;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * By default, we assume an unordered SNS topic. This field allows configuration of a FIFO SNS Topic.
+ *
+ * @see SNS channel binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SNSChannelOrdering {
+
+ /**
+ * Defines the type of SNS Topic.
+ */
+ @NotNull
+ private SNSChannelOrderingType type;
+
+ /**
+ * True to turn on de-duplication of messages for a channel.
+ */
+ @Nullable
+ private Boolean contentBasedDeduplication;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelOrderingType.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelOrderingType.java
new file mode 100644
index 00000000..5894f190
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelOrderingType.java
@@ -0,0 +1,22 @@
+package com.asyncapi.bindings.sns.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Defines the type of SNS Topic.
+ *
+ * @see SNS channel binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+public enum SNSChannelOrderingType {
+
+ @JsonProperty("standard")
+ STANDARD,
+
+ @JsonProperty("FIFO")
+ FIFO
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelPolicy.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelPolicy.java
new file mode 100644
index 00000000..2fd1d102
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelPolicy.java
@@ -0,0 +1,33 @@
+package com.asyncapi.bindings.sns.v0._1_0.channel;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * The security policy for the SNS Topic.
+ *
+ * @see SNS channel binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SNSChannelPolicy {
+
+ /**
+ * An array of statement objects, each of which controls a permission for this topic
+ */
+ @NotNull
+ private List<@NotNull SNSChannelPolicyStatement> statements = Collections.emptyList();
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelPolicyStatement.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelPolicyStatement.java
new file mode 100644
index 00000000..4dd29012
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelPolicyStatement.java
@@ -0,0 +1,42 @@
+package com.asyncapi.bindings.sns.v0._1_0.channel;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * The security policy for the SNS Topic.
+ *
+ * @see SNS channel binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SNSChannelPolicyStatement {
+
+ /**
+ * The SNS rule to allow or deny actions.
+ */
+ @NotNull
+ private SNSChannelPolicyStatementEffect effect;
+
+ /**
+ * The AWS account or resource ARN that this statement applies to.
+ */
+ @NotNull
+ private Object principal;
+
+ /**
+ * The SNS permission being allowed or denied e.g. sns:Publish.
+ */
+ @NotNull
+ private Object action;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelPolicyStatementEffect.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelPolicyStatementEffect.java
new file mode 100644
index 00000000..8eea245b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/channel/SNSChannelPolicyStatementEffect.java
@@ -0,0 +1,22 @@
+package com.asyncapi.bindings.sns.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * The security policy effect for the SNS Topic.
+ *
+ * @see SNS channel binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+public enum SNSChannelPolicyStatementEffect {
+
+ @JsonProperty("Allow")
+ ALLOW,
+
+ @JsonProperty("Deny")
+ DENY
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/message/SNSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/message/SNSMessageBinding.java
new file mode 100644
index 00000000..6e49fe31
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/message/SNSMessageBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.sns.v0._1_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes SNS message binding.
+ *
+ * @see SNS message binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SNSMessageBinding extends com.asyncapi.bindings.sns.SNSMessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationBinding.java
new file mode 100644
index 00000000..a7784f7a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationBinding.java
@@ -0,0 +1,62 @@
+package com.asyncapi.bindings.sns.v0._1_0.operation;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Describes SNS operation binding.
+ *
+ * @see SNS operation binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SNSOperationBinding extends com.asyncapi.bindings.sns.SNSOperationBinding {
+
+ /**
+ * Often we can assume that the SNS Topic is the channel name-we provide this field in case the you need to
+ * supply the ARN, or the Topic name is not the channel name in the AsyncAPI document.
+ */
+ @Nullable
+ private SNSOperationDestinationIdentifier topic;
+
+ /**
+ * The protocols that listen to this topic and their endpoints.
+ */
+ @NotNull
+ @Builder.Default
+ @javax.validation.constraints.Size(min = 1)
+ private List<@NotNull SNSOperationConsumer> consumers = Collections.emptyList();
+
+ /**
+ * Policy for retries to HTTP. The field is the default for HTTP receivers of the SNS Topic
+ * which may be overridden by a specific consumer.
+ */
+ @Nullable
+ private Object deliveryPolicy;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumer.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumer.java
new file mode 100644
index 00000000..a2a7e5be
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumer.java
@@ -0,0 +1,87 @@
+package com.asyncapi.bindings.sns.v0._1_0.operation;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes SNS operation topic consumer.
+ *
+ * @see SNS operation binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SNSOperationConsumer {
+
+ /**
+ * The protocol that this endpoint receives messages by.
+ */
+ @NotNull
+ private SNSOperationConsumerProtocol protocol;
+
+ /**
+ * The endpoint messages are delivered to.
+ */
+ @NotNull
+ private SNSOperationDestinationIdentifier endpoint;
+
+ /**
+ * Only receive a subset of messages from the channel, determined by this policy.
+ *
+ * Depending on the FilterPolicyScope, a map of either a message attribute or message body to an array of possible matches.
+ *
+ * The match may be a simple string for an exact match, but it may also be an object that represents a constraint and values for that constraint.
+ *
+ * Possible variants:
+ *
+ * List<String>
+ * String
+ * Object
+ *
+ */
+ @Nullable
+ private Object filterPolicy;
+
+ /**
+ * Determines whether the FilterPolicy applies to MessageAttributes or MessageBody.
+ */
+ @Nullable
+ @Builder.Default
+ private SNSOperationConsumerFilterPolicyScope filterPolicyScope = SNSOperationConsumerFilterPolicyScope.MESSAGE_ATTRIBUTES;
+
+ /**
+ * If true AWS SNS attributes are removed from the body, and for SQS, SNS message attributes are copied to SQS message attributes.
+ *
+ * If false the SNS attributes are included in the body.
+ */
+ @NotNull
+ private Boolean rawMessageDelivery;
+
+ /**
+ * Prevent poison pill messages by moving un-processable messages to an SQS dead letter queue.
+ */
+ @Nullable
+ private SNSOperationConsumerRedrivePolicy redrivePolicy;
+
+ /**
+ * Policy for retries to HTTP. The parameter is for that SNS Subscription and overrides any policy on the SNS Topic.
+ */
+ @Nullable
+ private SNSOperationConsumerDeliveryPolicy deliveryPolicy;
+
+ /**
+ * The display name to use with an SNS subscription
+ */
+ @Nullable
+ private String displayName;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerDeliveryPolicy.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerDeliveryPolicy.java
new file mode 100644
index 00000000..4853fe22
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerDeliveryPolicy.java
@@ -0,0 +1,72 @@
+package com.asyncapi.bindings.sns.v0._1_0.operation;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes SNS operation delivery policy.
+ *
+ * @see SNS operation binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SNSOperationConsumerDeliveryPolicy {
+
+ /**
+ * The minimum delay for a retry in seconds.
+ */
+ @Nullable
+ private Integer minDelayTarget;
+
+ /**
+ * The maximum delay for a retry in seconds.
+ */
+ @Nullable
+ private Integer maxDelayTarget;
+
+ /**
+ * The total number of retries, including immediate, pre-backoff, backoff, and post-backoff retries.
+ */
+ @Nullable
+ private Integer numRetries;
+
+ /**
+ * The number of immediate retries (with no delay).
+ */
+ @Nullable
+ private Integer numNoDelayRetries;
+
+ /**
+ * The number of immediate retries (with delay).
+ */
+ @Nullable
+ private Integer numMinDelayRetries;
+
+ /**
+ * The number of post-backoff phase retries, with the maximum delay between retries.
+ */
+ @Nullable
+ private Integer numMaxDelayRetries;
+
+ /**
+ * The algorithm for backoff between retries.
+ */
+ @Nullable
+ private SNSOperationConsumerDeliveryPolicyBackoffFunction backoffFunction;
+
+ /**
+ * The maximum number of deliveries per second, per subscription.
+ */
+ @Nullable
+ private Integer maxReceivesPerSecond;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerDeliveryPolicyBackoffFunction.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerDeliveryPolicyBackoffFunction.java
new file mode 100644
index 00000000..b82fc61a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerDeliveryPolicyBackoffFunction.java
@@ -0,0 +1,28 @@
+package com.asyncapi.bindings.sns.v0._1_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes SNS operation delivery policy backoff function.
+ *
+ * @see SNS operation binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+public enum SNSOperationConsumerDeliveryPolicyBackoffFunction {
+
+ @JsonProperty("arithmetic")
+ ARITHMETIC,
+
+ @JsonProperty("exponential")
+ EXPONENTIAL,
+
+ @JsonProperty("geometric")
+ GEOMETRIC,
+
+ @JsonProperty("linear")
+ LINEAR
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerFilterPolicyScope.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerFilterPolicyScope.java
new file mode 100644
index 00000000..011c7d4a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerFilterPolicyScope.java
@@ -0,0 +1,22 @@
+package com.asyncapi.bindings.sns.v0._1_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes SNS consumer filter policy scope.
+ *
+ * @see SNS operation binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+public enum SNSOperationConsumerFilterPolicyScope {
+
+ @JsonProperty("MessageAttributes")
+ MESSAGE_ATTRIBUTES,
+
+ @JsonProperty("MessageBody")
+ MESSAGE_BODY
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerProtocol.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerProtocol.java
new file mode 100644
index 00000000..98dbb8de
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerProtocol.java
@@ -0,0 +1,43 @@
+package com.asyncapi.bindings.sns.v0._1_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Describes SNS consumer protocol.
+ *
+ * @see SNS operation binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+public enum SNSOperationConsumerProtocol {
+
+ @JsonProperty("http")
+ HTTP,
+
+ @JsonProperty("https")
+ HTTPS,
+
+ @JsonProperty("email")
+ EMAIL,
+
+ @JsonProperty("email-json")
+ EMAIL_JSON,
+
+ @JsonProperty("sms")
+ SMS,
+
+ @JsonProperty("sqs")
+ SQS,
+
+ @JsonProperty("application")
+ APPLICATION,
+
+ @JsonProperty("lambda")
+ LAMBDA,
+
+ @JsonProperty("firehose")
+ FIREHOSE
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerRedrivePolicy.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerRedrivePolicy.java
new file mode 100644
index 00000000..5bcaaec7
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationConsumerRedrivePolicy.java
@@ -0,0 +1,40 @@
+package com.asyncapi.bindings.sns.v0._1_0.operation;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes SNS operation consumer redrive policy.
+ *
+ * Prevent poison pill messages by moving un-processable messages to an SQS dead letter queue.
+ *
+ * @see SNS operation binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SNSOperationConsumerRedrivePolicy {
+
+ /**
+ * The SQS queue to use as a dead letter queue (DLQ).
+ */
+ @NotNull
+ private SNSOperationDestinationIdentifier deadLetterQueue;
+
+ /**
+ * The number of times a message is delivered to the source queue before being moved to the dead-letter queue.
+ */
+ @Nullable
+ @Builder.Default
+ private Integer maxReceiveCount = 10;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationDestinationIdentifier.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationDestinationIdentifier.java
new file mode 100644
index 00000000..28ce0f44
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/operation/SNSOperationDestinationIdentifier.java
@@ -0,0 +1,61 @@
+package com.asyncapi.bindings.sns.v0._1_0.operation;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes SNS operation destination identifier.
+ *
+ * @see SNS operation binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SNSOperationDestinationIdentifier {
+
+ /**
+ * The endpoint is a URL.
+ */
+ @Nullable
+ private String url;
+
+ /**
+ * The endpoint is an email address.
+ */
+ @Nullable
+ private String email;
+
+ /**
+ * The endpoint is a phone number.
+ */
+ @Nullable
+ private String phone;
+
+ /**
+ * The target is an ARN.
+ *
+ * For example, for SQS, the identifier may be an ARN, which will be of the form: arn:aws:sqs:{region}:{account-id}:{queueName}
+ */
+ @Nullable
+ private String arn;
+
+ /**
+ * The endpoint is identified by a name, which corresponds to an identifying
+ * field called name
of a binding for that protocol on this publish Operation Object.
+ *
+ * For example, if the protocol is 'sqs' then the name refers to the name field sqs binding.
+ *
+ * We don't use $ref because we are referring, not including.
+ */
+ @Nullable
+ private String name;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/server/SNSServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/server/SNSServerBinding.java
new file mode 100644
index 00000000..35273fc5
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sns/v0/_1_0/server/SNSServerBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.sns.v0._1_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes SNS server binding.
+ *
+ * @see SNS server binding
+ * @see Amazon SNS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SNSServerBinding extends com.asyncapi.bindings.sns.SNSServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/SolaceChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/SolaceChannelBinding.java
new file mode 100644
index 00000000..d56d8e61
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/SolaceChannelBinding.java
@@ -0,0 +1,35 @@
+package com.asyncapi.bindings.solace;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Solace channel binding.
+ *
+ * @see Solace channel binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.solace.v0._4_0.channel.SolaceChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._1_0.channel.SolaceChannelBinding.class, names = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._2_0.channel.SolaceChannelBinding.class, names = "0.2.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._3_0.channel.SolaceChannelBinding.class, names = "0.3.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._4_0.channel.SolaceChannelBinding.class, names = {
+ "0.4.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class SolaceChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/SolaceMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/SolaceMessageBinding.java
new file mode 100644
index 00000000..b7c472fb
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/SolaceMessageBinding.java
@@ -0,0 +1,35 @@
+package com.asyncapi.bindings.solace;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Solace message binding.
+ *
+ * @see Solace message binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.solace.v0._4_0.message.SolaceMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._1_0.message.SolaceMessageBinding.class, names = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._2_0.message.SolaceMessageBinding.class, names = "0.2.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._3_0.message.SolaceMessageBinding.class, names = "0.3.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._4_0.message.SolaceMessageBinding.class, names = {
+ "0.4.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class SolaceMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/SolaceOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/SolaceOperationBinding.java
new file mode 100644
index 00000000..589b1b69
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/SolaceOperationBinding.java
@@ -0,0 +1,35 @@
+package com.asyncapi.bindings.solace;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Solace operation binding.
+ *
+ * @see Solace operation binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.solace.v0._4_0.operation.SolaceOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._1_0.operation.SolaceOperationBinding.class, names = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._2_0.operation.SolaceOperationBinding.class, names = "0.2.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._3_0.operation.SolaceOperationBinding.class, names = "0.3.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._4_0.operation.SolaceOperationBinding.class, names = {
+ "0.4.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class SolaceOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/SolaceServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/SolaceServerBinding.java
new file mode 100644
index 00000000..fa1807b9
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/SolaceServerBinding.java
@@ -0,0 +1,35 @@
+package com.asyncapi.bindings.solace;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes Solace server binding.
+ *
+ * @see Solace server binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.solace.v0._4_0.server.SolaceServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._1_0.server.SolaceServerBinding.class, names = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._2_0.server.SolaceServerBinding.class, names = "0.2.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._3_0.server.SolaceServerBinding.class, names = "0.3.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.solace.v0._4_0.server.SolaceServerBinding.class, names = {
+ "0.4.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class SolaceServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_1_0/channel/SolaceChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_1_0/channel/SolaceChannelBinding.java
new file mode 100644
index 00000000..48db408f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_1_0/channel/SolaceChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.solace.v0._1_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Solace channel binding.
+ *
+ * @see Solace channel binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceChannelBinding extends com.asyncapi.bindings.solace.SolaceChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_1_0/message/SolaceMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_1_0/message/SolaceMessageBinding.java
new file mode 100644
index 00000000..03dc9081
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_1_0/message/SolaceMessageBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.solace.v0._1_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Solace message binding.
+ *
+ * @see Solace message binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceMessageBinding extends com.asyncapi.bindings.solace.SolaceMessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_1_0/operation/SolaceOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_1_0/operation/SolaceOperationBinding.java
new file mode 100644
index 00000000..6d85387c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_1_0/operation/SolaceOperationBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.solace.v0._1_0.operation;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Solace operation binding.
+ *
+ * Contains information about the operation representation in Solace PubSub+ Broker.
+ *
+ * @see Solace operation binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceOperationBinding extends com.asyncapi.bindings.solace.SolaceOperationBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_1_0/server/SolaceServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_1_0/server/SolaceServerBinding.java
new file mode 100644
index 00000000..7c1ea9b0
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_1_0/server/SolaceServerBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.solace.v0._1_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Solace server binding.
+ *
+ * @see Solace server binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceServerBinding extends com.asyncapi.bindings.solace.SolaceServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/channel/SolaceChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/channel/SolaceChannelBinding.java
new file mode 100644
index 00000000..c45dfb13
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/channel/SolaceChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.solace.v0._2_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Solace channel binding.
+ *
+ * @see Solace channel binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceChannelBinding extends com.asyncapi.bindings.solace.SolaceChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/message/SolaceMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/message/SolaceMessageBinding.java
new file mode 100644
index 00000000..966ed6b7
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/message/SolaceMessageBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.solace.v0._2_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Solace message binding.
+ *
+ * @see Solace message binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceMessageBinding extends com.asyncapi.bindings.solace.SolaceMessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/operation/SolaceOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/operation/SolaceOperationBinding.java
new file mode 100644
index 00000000..d289c976
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/operation/SolaceOperationBinding.java
@@ -0,0 +1,52 @@
+package com.asyncapi.bindings.solace.v0._2_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes Solace operation binding.
+ *
+ * Contains information about the operation representation in Solace PubSub+ Broker.
+ *
+ * @see Solace operation binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Solace operation binding.")
+public class SolaceOperationBinding extends com.asyncapi.bindings.solace.SolaceOperationBinding {
+
+ /**
+ * List of destinations
+ */
+ @Nullable
+ @JsonProperty("destinations")
+ @JsonPropertyDescription("List of destinations")
+ private List destinations;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/operation/SolaceOperationDestination.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/operation/SolaceOperationDestination.java
new file mode 100644
index 00000000..7065310b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/operation/SolaceOperationDestination.java
@@ -0,0 +1,86 @@
+package com.asyncapi.bindings.solace.v0._2_0.operation;
+
+import com.asyncapi.bindings.solace.v0._2_0.operation.queue.SolaceOperationQueue;
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes Solace destination.
+ *
+ * Contains information about the destination in Solace PubSub+ Broker.
+ *
+ * @see Solace operation binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonClassDescription("Describes Solace destination.")
+public class SolaceOperationDestination {
+
+ /**
+ * 'queue' or 'topic'. If the type is queue, then the subscriber can bind to the queue, which in turn will
+ * subscribe to the topic as represented by the channel name or to the provided topicSubscriptions.
+ */
+ @Nullable
+ @JsonProperty("destinationType")
+ @JsonPropertyDescription("'queue' or 'topic'. If the type is queue, then the subscriber can bind to the queue, which in turn will subscribe to the topic as represented by the channel name or to the provided topicSubscriptions.")
+ private Type destinationType;
+
+ /**
+ * 'direct' or 'persistent'. This determines the quality of service for publishing messages as documented here .
+ * Default is 'persistent'.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "deliveryMode", defaultValue = "persistent")
+ @JsonPropertyDescription("'direct' or 'persistent'. This determines the quality of service for publishing messages as documented at https://docs.solace.com/Get-Started/Core-Concepts-Message-Delivery-Modes.htm. Default is 'persistent'.")
+ private DeliveryMode deliveryMode = DeliveryMode.PERSISTENT;
+
+ /**
+ * Solace queue destination details.
+ */
+ @Nullable
+ @JsonProperty("queue")
+ @JsonPropertyDescription("Solace queue destination details.")
+ private SolaceOperationQueue queue;
+
+ /**
+ * The list of topics that the client subscribes to.
+ */
+ @Nullable
+ @JsonProperty("topicSubscriptions")
+ @JsonPropertyDescription("The list of topics that the client subscribes to.")
+ private List topicSubscriptions;
+
+ public enum Type {
+
+ @JsonProperty("queue")
+ QUEUE,
+ @JsonProperty("topic")
+ TOPIC
+
+ }
+
+ public enum DeliveryMode {
+
+ @JsonProperty("direct")
+ DIRECT,
+ @JsonProperty("persistent")
+ PERSISTENT
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/operation/queue/SolaceOperationQueue.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/operation/queue/SolaceOperationQueue.java
new file mode 100644
index 00000000..62bc9db4
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/operation/queue/SolaceOperationQueue.java
@@ -0,0 +1,66 @@
+package com.asyncapi.bindings.solace.v0._2_0.operation.queue;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes Solace queue.
+ *
+ * Contains information about the queue in Solace PubSub+ Broker.
+ *
+ * @see Solace operation binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonClassDescription("Describes Solace queue.")
+public class SolaceOperationQueue {
+
+ /**
+ * The name of the queue, only applicable when destinationType is 'queue'.
+ */
+ @Nullable
+ @JsonProperty("name")
+ @JsonPropertyDescription("The name of the queue, only applicable when destinationType is 'queue'.")
+ private String name;
+
+ /**
+ * A list of topics that the queue subscribes to, only applicable when destinationType is 'queue'.
+ * If none is given, the queue subscribes to the topic as represented by the channel name.
+ */
+ @Nullable
+ @JsonProperty("topicSubscriptions")
+ @JsonPropertyDescription("A list of topics that the queue subscribes to, only applicable when destinationType is 'queue'. If none is given, the queue subscribes to the topic as represented by the channel name.")
+ private List topicSubscriptions;
+
+ /**
+ * 'exclusive' or 'nonexclusive'. This is documented here . Only applicable when destinationType is 'queue'.
+ */
+ @Nullable
+ @JsonProperty("accessType")
+ @JsonPropertyDescription("'exclusive' or 'nonexclusive'. This is documented at https://docs.solace.com/Messaging/Guaranteed-Msg/Endpoints.htm#Queues. Only applicable when destinationType is 'queue'.")
+ private AccessType accessType;
+
+ public enum AccessType {
+
+ @JsonProperty("exclusive")
+ EXCLUSIVE,
+ @JsonProperty("non-exclusive")
+ NON_EXCLUSIVE
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/server/SolaceServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/server/SolaceServerBinding.java
new file mode 100644
index 00000000..a340d3b0
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_2_0/server/SolaceServerBinding.java
@@ -0,0 +1,48 @@
+package com.asyncapi.bindings.solace.v0._2_0.server;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Solace server binding.
+ *
+ * @see Solace server binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceServerBinding extends com.asyncapi.bindings.solace.SolaceServerBinding {
+
+ /**
+ * Message VPN of the Solace Broker
+ *
+ * e.g. msgVpn: solace-broker-msg-vpn
+ */
+ @Nullable
+ @JsonProperty("msgVpn")
+ @JsonPropertyDescription("Message VPN of the Solace Broker")
+ private String msgVpn;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/channel/SolaceChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/channel/SolaceChannelBinding.java
new file mode 100644
index 00000000..0572ea93
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/channel/SolaceChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.solace.v0._3_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Solace channel binding.
+ *
+ * @see Solace channel binding
+ * @see Solace
+ * @author Dennis Brinley, Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceChannelBinding extends com.asyncapi.bindings.solace.SolaceChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/message/SolaceMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/message/SolaceMessageBinding.java
new file mode 100644
index 00000000..5ee6a36c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/message/SolaceMessageBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.solace.v0._3_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Solace message binding.
+ *
+ * @see Solace message binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceMessageBinding extends com.asyncapi.bindings.solace.SolaceMessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/operation/SolaceOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/operation/SolaceOperationBinding.java
new file mode 100644
index 00000000..22b1473b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/operation/SolaceOperationBinding.java
@@ -0,0 +1,52 @@
+package com.asyncapi.bindings.solace.v0._3_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes Solace operation binding.
+ *
+ * Contains information about the operation representation in Solace PubSub+ Broker.
+ *
+ * @see Solace operation binding
+ * @see Solace
+ * @author Dennis Brinley, Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Solace operation binding.")
+public class SolaceOperationBinding extends com.asyncapi.bindings.solace.SolaceOperationBinding {
+
+ /**
+ * List of destinations
+ */
+ @Nullable
+ @JsonProperty("destinations")
+ @JsonPropertyDescription("List of destinations")
+ private List destinations;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/operation/SolaceOperationDestination.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/operation/SolaceOperationDestination.java
new file mode 100644
index 00000000..44036b38
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/operation/SolaceOperationDestination.java
@@ -0,0 +1,86 @@
+package com.asyncapi.bindings.solace.v0._3_0.operation;
+
+import com.asyncapi.bindings.solace.v0._3_0.operation.queue.SolaceOperationQueue;
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes Solace destination.
+ *
+ * Contains information about the destination in Solace PubSub+ Broker.
+ *
+ * @see Solace operation binding
+ * @see Solace
+ * @author Dennis Brinley, Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonClassDescription("Describes Solace destination.")
+public class SolaceOperationDestination {
+
+ /**
+ * 'queue' or 'topic'. If the type is queue, then the subscriber can bind to the queue, which in turn will
+ * subscribe to the topic as represented by the channel name or to the provided topicSubscriptions.
+ */
+ @Nullable
+ @JsonProperty("destinationType")
+ @JsonPropertyDescription("'queue' or 'topic'. If the type is queue, then the subscriber can bind to the queue, which in turn will subscribe to the topic as represented by the channel name or to the provided topicSubscriptions.")
+ private Type destinationType;
+
+ /**
+ * 'direct' or 'persistent'. This determines the quality of service for publishing messages as documented here .
+ * Default is 'persistent'.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "deliveryMode", defaultValue = "persistent")
+ @JsonPropertyDescription("'direct' or 'persistent'. This determines the quality of service for publishing messages as documented at https://docs.solace.com/Get-Started/Core-Concepts-Message-Delivery-Modes.htm. Default is 'persistent'.")
+ private DeliveryMode deliveryMode = DeliveryMode.PERSISTENT;
+
+ /**
+ * Solace queue destination details.
+ */
+ @Nullable
+ @JsonProperty("queue")
+ @JsonPropertyDescription("Solace queue destination details.")
+ private SolaceOperationQueue queue;
+
+ /**
+ * The list of topics that the client subscribes to.
+ */
+ @Nullable
+ @JsonProperty("topicSubscriptions")
+ @JsonPropertyDescription("The list of topics that the client subscribes to.")
+ private List topicSubscriptions;
+
+ public enum Type {
+
+ @JsonProperty("queue")
+ QUEUE,
+ @JsonProperty("topic")
+ TOPIC
+
+ }
+
+ public enum DeliveryMode {
+
+ @JsonProperty("direct")
+ DIRECT,
+ @JsonProperty("persistent")
+ PERSISTENT
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/operation/queue/SolaceOperationQueue.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/operation/queue/SolaceOperationQueue.java
new file mode 100644
index 00000000..f41d283d
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/operation/queue/SolaceOperationQueue.java
@@ -0,0 +1,84 @@
+package com.asyncapi.bindings.solace.v0._3_0.operation.queue;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes Solace queue.
+ *
+ * Contains information about the queue in Solace PubSub+ Broker.
+ *
+ * @see Solace operation binding
+ * @see Solace
+ * @author Dennis Brinley, Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonClassDescription("Describes Solace queue.")
+public class SolaceOperationQueue {
+
+ /**
+ * The name of the queue, only applicable when destinationType is 'queue'.
+ */
+ @Nullable
+ @JsonProperty("name")
+ @JsonPropertyDescription("The name of the queue, only applicable when destinationType is 'queue'.")
+ private String name;
+
+ /**
+ * A list of topics that the queue subscribes to, only applicable when destinationType is 'queue'.
+ * If none is given, the queue subscribes to the topic as represented by the channel name.
+ */
+ @Nullable
+ @JsonProperty("topicSubscriptions")
+ @JsonPropertyDescription("A list of topics that the queue subscribes to, only applicable when destinationType is 'queue'. If none is given, the queue subscribes to the topic as represented by the channel name.")
+ private List topicSubscriptions;
+
+ /**
+ * 'exclusive' or 'nonexclusive'. This is documented here . Only applicable when destinationType is 'queue'.
+ */
+ @Nullable
+ @JsonProperty("accessType")
+ @JsonPropertyDescription("'exclusive' or 'nonexclusive'. This is documented at https://docs.solace.com/Messaging/Guaranteed-Msg/Endpoints.htm#Queues. Only applicable when destinationType is 'queue'.")
+ private AccessType accessType;
+
+ /**
+ * The maximum amount of message spool that the given queue may use. This is documented here .
+ * Only applicable when destinationType is 'queue'.
+ */
+ @Nullable
+ @JsonProperty("maxMsgSpoolSize")
+ @JsonPropertyDescription("The maximum amount of message spool that the given queue may use. This is documented at https://docs.solace.com/Messaging/Guaranteed-Msg/Message-Spooling.htm#max-spool-usage. Only applicable when destinationType is 'queue'.")
+ private String maxMsgSpoolSize;
+
+ /**
+ * The maximum TTL to apply to messages to be spooled. This is documented here .
+ * Only applicable when destinationType is 'queue'.
+ */
+ @Nullable
+ @JsonProperty("maxTtl")
+ @JsonPropertyDescription("The maximum TTL to apply to messages to be spooled. This is documented at https://docs.solace.com/Messaging/Guaranteed-Msg/Configuring-Queues.htm. Only applicable when destinationType is 'queue'.")
+ private String maxTtl;
+
+ public enum AccessType {
+
+ @JsonProperty("exclusive")
+ EXCLUSIVE,
+ @JsonProperty("nonexclusive")
+ NON_EXCLUSIVE
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/server/SolaceServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/server/SolaceServerBinding.java
new file mode 100644
index 00000000..35075207
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_3_0/server/SolaceServerBinding.java
@@ -0,0 +1,50 @@
+package com.asyncapi.bindings.solace.v0._3_0.server;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Solace server binding.
+ *
+ * @see Solace server binding
+ * @see Solace
+ * @author Dennis Brinley, Pavel Bodiachevskii
+ * @version 0.3.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes Solace server binding.")
+public class SolaceServerBinding extends com.asyncapi.bindings.solace.SolaceServerBinding {
+
+ /**
+ * Message VPN of the Solace Broker
+ *
+ * e.g. msgVpn: solace-broker-msg-vpn
+ */
+ @Nullable
+ @JsonProperty("msgVpn")
+ @JsonPropertyDescription("Message VPN of the Solace Broker")
+ private String msgVpn;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.3.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.3.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/channel/SolaceChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/channel/SolaceChannelBinding.java
new file mode 100644
index 00000000..ffda67b1
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/channel/SolaceChannelBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.solace.v0._4_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Solace channel binding.
+ *
+ * @see Solace channel binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.4.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceChannelBinding extends com.asyncapi.bindings.solace.SolaceChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.4.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.4.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/message/SolaceMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/message/SolaceMessageBinding.java
new file mode 100644
index 00000000..c66b99be
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/message/SolaceMessageBinding.java
@@ -0,0 +1,34 @@
+package com.asyncapi.bindings.solace.v0._4_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties. Its name is reserved for future use.
+ *
+ * Describes Solace message binding.
+ *
+ * @see Solace message binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.4.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceMessageBinding extends com.asyncapi.bindings.solace.SolaceMessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.4.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.4.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/operation/SolaceOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/operation/SolaceOperationBinding.java
new file mode 100644
index 00000000..0fd66087
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/operation/SolaceOperationBinding.java
@@ -0,0 +1,75 @@
+package com.asyncapi.bindings.solace.v0._4_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes Solace operation binding.
+ *
+ * Contains information about the operation representation in Solace PubSub+ Broker.
+ *
+ * @see Solace operation binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.4.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceOperationBinding extends com.asyncapi.bindings.solace.SolaceOperationBinding {
+
+ /**
+ * List of destinations
+ */
+ @Nullable
+ @JsonProperty("destinations")
+ @JsonPropertyDescription("List of destinations")
+ private List destinations;
+
+ /**
+ * Interval in milliseconds or a Schema Object containing the definition of the lifetime of the message.
+ */
+ @Nullable
+ @JsonProperty("timeToLive")
+ private Integer timeToLive;
+
+ /**
+ * The valid priority value range is 0-255 with 0 as the lowest priority and 255 as the highest or
+ * a Schema Object containing the definition of the priority.
+ */
+ @Nullable
+ @javax.validation.constraints.Min(0)
+ @javax.validation.constraints.Max(255)
+ private Integer priority;
+
+ /**
+ * Set the message to be eligible to be moved to a Dead Message Queue.
+ *
+ * The default value is false.
+ */
+ @Nullable
+ @Builder.Default
+ private Boolean dmqEligible = false;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.4.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.4.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/operation/SolaceOperationDestination.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/operation/SolaceOperationDestination.java
new file mode 100644
index 00000000..96c090a5
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/operation/SolaceOperationDestination.java
@@ -0,0 +1,86 @@
+package com.asyncapi.bindings.solace.v0._4_0.operation;
+
+import com.asyncapi.bindings.solace.v0._4_0.operation.queue.SolaceOperationQueue;
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes Solace destination.
+ *
+ * Contains information about the destination in Solace PubSub+ Broker.
+ *
+ * @see Solace operation binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.4.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonClassDescription("Describes Solace destination.")
+public class SolaceOperationDestination {
+
+ /**
+ * 'queue' or 'topic'. If the type is queue, then the subscriber can bind to the queue, which in turn will
+ * subscribe to the topic as represented by the channel name or to the provided topicSubscriptions.
+ */
+ @Nullable
+ @JsonProperty("destinationType")
+ @JsonPropertyDescription("'queue' or 'topic'. If the type is queue, then the subscriber can bind to the queue, which in turn will subscribe to the topic as represented by the channel name or to the provided topicSubscriptions.")
+ private Type destinationType;
+
+ /**
+ * 'direct' or 'persistent'. This determines the quality of service for publishing messages as documented here .
+ * Default is 'persistent'.
+ */
+ @Nullable
+ @Builder.Default
+ @JsonProperty(value = "deliveryMode", defaultValue = "persistent")
+ @JsonPropertyDescription("'direct' or 'persistent'. This determines the quality of service for publishing messages as documented at https://docs.solace.com/Get-Started/Core-Concepts-Message-Delivery-Modes.htm. Default is 'persistent'.")
+ private DeliveryMode deliveryMode = DeliveryMode.PERSISTENT;
+
+ /**
+ * Solace queue destination details.
+ */
+ @Nullable
+ @JsonProperty("queue")
+ @JsonPropertyDescription("Solace queue destination details.")
+ private SolaceOperationQueue queue;
+
+ /**
+ * The list of topics that the client subscribes to.
+ */
+ @Nullable
+ @JsonProperty("topicSubscriptions")
+ @JsonPropertyDescription("The list of topics that the client subscribes to.")
+ private List topicSubscriptions;
+
+ public enum Type {
+
+ @JsonProperty("queue")
+ QUEUE,
+ @JsonProperty("topic")
+ TOPIC
+
+ }
+
+ public enum DeliveryMode {
+
+ @JsonProperty("direct")
+ DIRECT,
+ @JsonProperty("persistent")
+ PERSISTENT
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/operation/queue/SolaceOperationQueue.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/operation/queue/SolaceOperationQueue.java
new file mode 100644
index 00000000..dfa5c68f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/operation/queue/SolaceOperationQueue.java
@@ -0,0 +1,84 @@
+package com.asyncapi.bindings.solace.v0._4_0.operation.queue;
+
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * Describes Solace queue.
+ *
+ * Contains information about the queue in Solace PubSub+ Broker.
+ *
+ * @see Solace operation binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.4.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonClassDescription("Describes Solace queue.")
+public class SolaceOperationQueue {
+
+ /**
+ * The name of the queue, only applicable when destinationType is 'queue'.
+ */
+ @Nullable
+ @JsonProperty("name")
+ @JsonPropertyDescription("The name of the queue, only applicable when destinationType is 'queue'.")
+ private String name;
+
+ /**
+ * A list of topics that the queue subscribes to, only applicable when destinationType is 'queue'.
+ * If none is given, the queue subscribes to the topic as represented by the channel name.
+ */
+ @Nullable
+ @JsonProperty("topicSubscriptions")
+ @JsonPropertyDescription("A list of topics that the queue subscribes to, only applicable when destinationType is 'queue'. If none is given, the queue subscribes to the topic as represented by the channel name.")
+ private List topicSubscriptions;
+
+ /**
+ * 'exclusive' or 'nonexclusive'. This is documented here . Only applicable when destinationType is 'queue'.
+ */
+ @Nullable
+ @JsonProperty("accessType")
+ @JsonPropertyDescription("'exclusive' or 'nonexclusive'. This is documented at https://docs.solace.com/Messaging/Guaranteed-Msg/Endpoints.htm#Queues. Only applicable when destinationType is 'queue'.")
+ private AccessType accessType;
+
+ /**
+ * The maximum amount of message spool that the given queue may use. This is documented here .
+ * Only applicable when destinationType is 'queue'.
+ */
+ @Nullable
+ @JsonProperty("maxMsgSpoolSize")
+ @JsonPropertyDescription("The maximum amount of message spool that the given queue may use. This is documented at https://docs.solace.com/Messaging/Guaranteed-Msg/Message-Spooling.htm#max-spool-usage. Only applicable when destinationType is 'queue'.")
+ private String maxMsgSpoolSize;
+
+ /**
+ * The maximum TTL to apply to messages to be spooled. This is documented here .
+ * Only applicable when destinationType is 'queue'.
+ */
+ @Nullable
+ @JsonProperty("maxTtl")
+ @JsonPropertyDescription("The maximum TTL to apply to messages to be spooled. This is documented at https://docs.solace.com/Messaging/Guaranteed-Msg/Configuring-Queues.htm. Only applicable when destinationType is 'queue'.")
+ private String maxTtl;
+
+ public enum AccessType {
+
+ @JsonProperty("exclusive")
+ EXCLUSIVE,
+ @JsonProperty("nonexclusive")
+ NON_EXCLUSIVE
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/server/SolaceServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/server/SolaceServerBinding.java
new file mode 100644
index 00000000..c71fbf75
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/solace/v0/_4_0/server/SolaceServerBinding.java
@@ -0,0 +1,58 @@
+package com.asyncapi.bindings.solace.v0._4_0.server;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes Solace server binding.
+ *
+ * @see Solace server binding
+ * @see Solace
+ * @author Pavel Bodiachevskii
+ * @version 0.4.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SolaceServerBinding extends com.asyncapi.bindings.solace.SolaceServerBinding {
+
+ /**
+ * Message VPN of the Solace Broker
+ *
+ * e.g. msgVpn: solace-broker-msg-vpn
+ */
+ @Nullable
+ @JsonProperty("msgVpn")
+ @JsonPropertyDescription("Message VPN of the Solace Broker")
+ private String msgVpn;
+
+ /**
+ * A unique client name to use to register to the appliance.
+ *
+ * If specified, it must be a valid Topic name, and a maximum of 160 bytes in length when encoded as UTF-8.
+ */
+ @Nullable
+ @JsonProperty("clientName")
+ @javax.validation.constraints.Size(min = 1, max = 160)
+ private String clientName;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.4.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.4.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/SQSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/SQSChannelBinding.java
new file mode 100644
index 00000000..f10410c4
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/SQSChannelBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.sqs;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes SQS channel binding.
+ *
+ * @see SQS channel binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.sqs.v0._2_0.channel.SQSChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.sqs.v0._1_0.channel.SQSChannelBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.sqs.v0._2_0.channel.SQSChannelBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class SQSChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/SQSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/SQSMessageBinding.java
new file mode 100644
index 00000000..6c85baa1
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/SQSMessageBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.sqs;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes SQS message binding.
+ *
+ * @see SQS message binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.sqs.v0._2_0.message.SQSMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.sqs.v0._1_0.message.SQSMessageBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.sqs.v0._2_0.message.SQSMessageBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class SQSMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/SQSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/SQSOperationBinding.java
new file mode 100644
index 00000000..88e15d39
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/SQSOperationBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.sqs;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes SQS operation binding.
+ *
+ * @see SQS operation binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.sqs.v0._2_0.operation.SQSOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.sqs.v0._1_0.operation.SQSOperationBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.sqs.v0._2_0.operation.SQSOperationBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class SQSOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/SQSServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/SQSServerBinding.java
new file mode 100644
index 00000000..f103b1b8
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/SQSServerBinding.java
@@ -0,0 +1,31 @@
+package com.asyncapi.bindings.sqs;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes SQS server binding.
+ *
+ * @see SQS server binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.sqs.v0._2_0.server.SQSServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.sqs.v0._1_0.server.SQSServerBinding.class, name = "0.1.0"),
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.sqs.v0._2_0.server.SQSServerBinding.class, names = {
+ "0.2.0",
+ "latest"
+ }),
+})
+@EqualsAndHashCode(callSuper = true)
+public abstract class SQSServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_1_0/channel/SQSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_1_0/channel/SQSChannelBinding.java
new file mode 100644
index 00000000..48a89659
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_1_0/channel/SQSChannelBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.sqs.v0._1_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties.
+ *
+ * Its name is reserved for future use.
+ *
+ * Describes SQS channel binding.
+ *
+ * @see SQS channel binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SQSChannelBinding extends com.asyncapi.bindings.sqs.SQSChannelBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_1_0/message/SQSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_1_0/message/SQSMessageBinding.java
new file mode 100644
index 00000000..cf117b73
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_1_0/message/SQSMessageBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.sqs.v0._1_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties.
+ *
+ * Its name is reserved for future use.
+ *
+ * Describes SQS message binding.
+ *
+ * @see SQS message binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SQSMessageBinding extends com.asyncapi.bindings.sqs.SQSMessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_1_0/operation/SQSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_1_0/operation/SQSOperationBinding.java
new file mode 100644
index 00000000..8cbf430e
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_1_0/operation/SQSOperationBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.sqs.v0._1_0.operation;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties.
+ *
+ * Its name is reserved for future use.
+ *
+ * Describes SQS operation binding.
+ *
+ * @see SQS operation binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SQSOperationBinding extends com.asyncapi.bindings.sqs.SQSOperationBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_1_0/server/SQSServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_1_0/server/SQSServerBinding.java
new file mode 100644
index 00000000..cf416eba
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_1_0/server/SQSServerBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.sqs.v0._1_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties.
+ *
+ * Its name is reserved for future use.
+ *
+ * Describes SQS server binding.
+ *
+ * @see SQS server binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SQSServerBinding extends com.asyncapi.bindings.sqs.SQSServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelBinding.java
new file mode 100644
index 00000000..ab75c4df
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelBinding.java
@@ -0,0 +1,49 @@
+package com.asyncapi.bindings.sqs.v0._2_0.channel;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Describes SQS channel binding.
+ *
+ * @see SQS channel binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SQSChannelBinding extends com.asyncapi.bindings.sqs.SQSChannelBinding {
+
+ /**
+ * A definition of the queue that will be used as the channel.
+ */
+ @NotNull
+ private SQSChannelQueue queue = new SQSChannelQueue();
+
+ /**
+ * A definition of the queue that will be used for un-processable messages.
+ */
+ @Nullable
+ private SQSChannelQueue deadLetterQueue;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelDeadLetterQueueIdentifier.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelDeadLetterQueueIdentifier.java
new file mode 100644
index 00000000..d5826151
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelDeadLetterQueueIdentifier.java
@@ -0,0 +1,42 @@
+package com.asyncapi.bindings.sqs.v0._2_0.channel;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * A definition of a SQS channel dead letter queue identifier.
+ *
+ * The SQS queue to use as a dead letter queue (DLQ).
+ *
+ * @see SQS channel binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SQSChannelDeadLetterQueueIdentifier {
+
+ /**
+ * The target is an ARN. For example, for SQS, the identifier may be an ARN,
+ * which will be of the form: arn:aws:sqs:{region}:{account-id}:{queueName}
+ */
+ @Nullable
+ private String arn;
+
+ /**
+ * The endpoint is identified by a name, which corresponds to an identifying field called name
+ * of a binding for that protocol on this publish Operation Object.
+ *
+ * For example, if the protocol is sqs
then the name refers to the name field sqs binding.
+ */
+ @Nullable
+ private String name;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueue.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueue.java
new file mode 100644
index 00000000..aa6c4690
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueue.java
@@ -0,0 +1,116 @@
+package com.asyncapi.bindings.sqs.v0._2_0.channel;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * A definition of a SQS channel queue.
+ *
+ * @see SQS channel binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SQSChannelQueue {
+
+ /**
+ * The name of the queue. When an SNS Operation Binding Object references an SQS queue by name,
+ * the identifier should be the one in this field.
+ */
+ @NotNull
+ @Builder.Default
+ private String name = "";
+
+ /**
+ * Is this a FIFO queue?
+ */
+ @NotNull
+ @Builder.Default
+ private Boolean fifoQueue = false;
+
+ /**
+ * Specifies whether message deduplication occurs at the message group or queue level.
+ *
+ * Valid values are messageGroup and queue (default).
+ */
+ @Nullable
+ @Builder.Default
+ private SQSChannelQueueDeduplicationScope deduplicationScope = SQSChannelQueueDeduplicationScope.QUEUE;
+
+ /**
+ * Specifies whether the FIFO queue throughput quota applies to the entire queue or per message group.
+ *
+ * Valid values are perQueue (default) and perMessageGroupId.
+ */
+ @Nullable
+ @Builder.Default
+ private SQSChannelQueueFifoThroughputLimit fifoThroughputLimit = SQSChannelQueueFifoThroughputLimit.PER_QUEUE;
+
+ /**
+ * The number of seconds to delay before a message sent to the queue can be received. used to create a delay queue.
+ */
+ @Nullable
+ @Builder.Default
+ @javax.validation.constraints.Min(0)
+ @javax.validation.constraints.Max(15)
+ private Integer deliveryDelay = 0;
+
+ /**
+ * The length of time, in seconds, that a consumer locks a message - hiding it from reads - before it is unlocked and can be read again.
+ */
+ @Nullable
+ @Builder.Default
+ @javax.validation.constraints.Min(0)
+ @javax.validation.constraints.Max(43200)
+ private Integer visibilityTimeout = 30;
+
+ /**
+ * Determines if the queue uses short polling or long polling.
+ *
+ * Set to zero the queue reads available messages and returns immediately.
+ *
+ * Set to a non-zero integer, long polling waits the specified number of seconds for messages to arrive before returning.
+ */
+ @Nullable
+ @Builder.Default
+ private Integer receiveMessageWaitTime = 0;
+
+ /**
+ * How long to retain a message on the queue in seconds, unless deleted.
+ */
+ @Nullable
+ @Builder.Default
+ @javax.validation.constraints.Min(60)
+ @javax.validation.constraints.Max(1209600)
+ private Integer messageRetentionPeriod = 345600;
+
+ /**
+ * Prevent poison pill messages by moving un-processable messages to an SQS dead letter queue.
+ */
+ @Nullable
+ private SQSChannelRedrivePolicy redrivePolicy;
+
+ /**
+ * The security policy for the SQS Queue.
+ */
+ @Nullable
+ private SQSChannelQueuePolicy policy;
+
+ /**
+ * Key-value pairs that represent AWS tags on the queue.
+ */
+ @Nullable
+ private Map tags;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueueDeduplicationScope.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueueDeduplicationScope.java
new file mode 100644
index 00000000..75fa8de7
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueueDeduplicationScope.java
@@ -0,0 +1,22 @@
+package com.asyncapi.bindings.sqs.v0._2_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Specifies whether message deduplication occurs at the message group or queue level.
+ *
+ * @see SQS channel binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+public enum SQSChannelQueueDeduplicationScope {
+
+ @JsonProperty("queue")
+ QUEUE,
+
+ @JsonProperty("messageGroup")
+ MESSAGE_GROUP
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueueFifoThroughputLimit.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueueFifoThroughputLimit.java
new file mode 100644
index 00000000..6aea840c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueueFifoThroughputLimit.java
@@ -0,0 +1,22 @@
+package com.asyncapi.bindings.sqs.v0._2_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Specifies whether the FIFO queue throughput quota applies to the entire queue or per message group.
+ *
+ * @see SQS channel binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+public enum SQSChannelQueueFifoThroughputLimit {
+
+ @JsonProperty("perQueue")
+ PER_QUEUE,
+
+ @JsonProperty("perMessageGroupId")
+ PER_MESSAGE_GROUP_ID
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueuePolicy.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueuePolicy.java
new file mode 100644
index 00000000..a2baeac8
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueuePolicy.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.sqs.v0._2_0.channel;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+/**
+ * A definition of a SQS channel queue policy.
+ *
+ * @see SQS channel binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SQSChannelQueuePolicy {
+
+ /**
+ * An array of statement objects, each of which controls a permission for this queue.
+ */
+ @NotNull
+ private List<@NotNull SQSChannelQueuePolicyStatement> statements;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueuePolicyStatement.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueuePolicyStatement.java
new file mode 100644
index 00000000..e87e20b5
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueuePolicyStatement.java
@@ -0,0 +1,42 @@
+package com.asyncapi.bindings.sqs.v0._2_0.channel;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * A definition of a SQS channel queue policy statement.
+ *
+ * @see SQS channel binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SQSChannelQueuePolicyStatement {
+
+ /**
+ * The SQS rule to allow or deny actions.
+ */
+ @NotNull
+ private SQSChannelQueuePolicyStatementEffect effect;
+
+ /**
+ * The AWS account or resource ARN that this statement applies to.
+ */
+ @NotNull
+ private Object principal;
+
+ /**
+ * The SQS permission being allowed or denied e.g. sqs:ReceiveMessage.
+ */
+ @NotNull
+ private Object action;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueuePolicyStatementEffect.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueuePolicyStatementEffect.java
new file mode 100644
index 00000000..26f92425
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelQueuePolicyStatementEffect.java
@@ -0,0 +1,22 @@
+package com.asyncapi.bindings.sqs.v0._2_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * A definition of a SQS channel queue policy statement effect.
+ *
+ * @see SQS channel binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+public enum SQSChannelQueuePolicyStatementEffect {
+
+ @JsonProperty("Allow")
+ ALLOW,
+
+ @JsonProperty("Deny")
+ DENY
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelRedrivePolicy.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelRedrivePolicy.java
new file mode 100644
index 00000000..7f0d642e
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/channel/SQSChannelRedrivePolicy.java
@@ -0,0 +1,37 @@
+package com.asyncapi.bindings.sqs.v0._2_0.channel;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Prevent poison pill messages by moving un-processable messages to an SQS dead letter queue.
+ *
+ * @see SQS channel binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SQSChannelRedrivePolicy {
+
+ /**
+ * The SQS queue to use as a dead letter queue (DLQ).
+ */
+ @NotNull
+ private SQSChannelDeadLetterQueueIdentifier deadLetterQueue;
+
+ /**
+ * The number of times a message is delivered to the source queue before being moved to the dead-letter queue.
+ */
+ @Nullable
+ private Integer maxReceiveCount = 10;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/message/SQSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/message/SQSMessageBinding.java
new file mode 100644
index 00000000..70d763cd
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/message/SQSMessageBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.sqs.v0._2_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties.
+ *
+ * Its name is reserved for future use.
+ *
+ * Describes SQS message binding.
+ *
+ * @see SQS message binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SQSMessageBinding extends com.asyncapi.bindings.sqs.SQSMessageBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationBinding.java
new file mode 100644
index 00000000..9e4c4851
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationBinding.java
@@ -0,0 +1,48 @@
+package com.asyncapi.bindings.sqs.v0._2_0.operation;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Describes SQS operation binding.
+ *
+ * @see SQS operation binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SQSOperationBinding extends com.asyncapi.bindings.sqs.SQSOperationBinding {
+
+ /**
+ * Queue objects that are either the endpoint for an SNS Operation Binding Object,
+ * or the deadLetterQueue of the SQS Operation Binding Object.
+ */
+ @NotNull
+ @Builder.Default
+ private List<@NotNull SQSOperationQueue> queues = Collections.emptyList();
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationDeadLetterQueueIdentifier.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationDeadLetterQueueIdentifier.java
new file mode 100644
index 00000000..4e7be4c7
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationDeadLetterQueueIdentifier.java
@@ -0,0 +1,42 @@
+package com.asyncapi.bindings.sqs.v0._2_0.operation;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * A definition of a SQS channel dead letter queue identifier.
+ *
+ * The SQS queue to use as a dead letter queue (DLQ).
+ *
+ * @see SQS operation binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SQSOperationDeadLetterQueueIdentifier {
+
+ /**
+ * The target is an ARN. For example, for SQS, the identifier may be an ARN,
+ * which will be of the form: arn:aws:sqs:{region}:{account-id}:{queueName}
+ */
+ @Nullable
+ private String arn;
+
+ /**
+ * The endpoint is identified by a name, which corresponds to an identifying field called name
+ * of a binding for that protocol on this publish Operation Object.
+ *
+ * For example, if the protocol is sqs
then the name refers to the name field sqs binding.
+ */
+ @Nullable
+ private String name;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueue.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueue.java
new file mode 100644
index 00000000..e93e1777
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueue.java
@@ -0,0 +1,129 @@
+package com.asyncapi.bindings.sqs.v0._2_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * A definition of a SQS operation queue.
+ *
+ * @see SQS operation binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SQSOperationQueue {
+
+ /**
+ * Allows for an external definition of a queue.
+ *
+ * The referenced structure MUST be in the format of a Queue.
+ *
+ * If there are conflicts between the referenced definition and this Queue's definition, the behavior is undefined.
+ */
+ @Nullable
+ @JsonProperty("$ref")
+ private String ref;
+
+ /**
+ * The name of the queue.
+ *
+ * When an SNS Operation Binding Object references an SQS queue by name, the identifier should be the one in this field.
+ */
+ @NotNull
+ @Builder.Default
+ private String name = "";
+
+ /**
+ * Is this a FIFO queue?
+ */
+ @NotNull
+ @Builder.Default
+ private Boolean fifoQueue = false;
+
+ /**
+ * Specifies whether message deduplication occurs at the message group or queue level.
+ *
+ * Valid values are messageGroup and queue (default).
+ */
+ @Nullable
+ @Builder.Default
+ private SQSOperationQueueDeduplicationScope deduplicationScope = SQSOperationQueueDeduplicationScope.QUEUE;
+
+ /**
+ * Specifies whether the FIFO queue throughput quota applies to the entire queue or per message group.
+ *
+ * Valid values are perQueue (default) and perMessageGroupId.
+ */
+ @Nullable
+ @Builder.Default
+ private SQSOperationQueueFifoThroughputLimit fifoThroughputLimit = SQSOperationQueueFifoThroughputLimit.PER_QUEUE;
+
+ /**
+ * The number of seconds to delay before a message sent to the queue can be received. used to create a delay queue.
+ */
+ @Nullable
+ @Builder.Default
+ @javax.validation.constraints.Min(0)
+ @javax.validation.constraints.Max(15)
+ private Integer deliveryDelay = 0;
+
+ /**
+ * The length of time, in seconds, that a consumer locks a message - hiding it from reads - before it is unlocked and can be read again.
+ */
+ @Nullable
+ @Builder.Default
+ @javax.validation.constraints.Min(0)
+ @javax.validation.constraints.Max(43200)
+ private Integer visibilityTimeout = 30;
+
+ /**
+ * Determines if the queue uses short polling or long polling.
+ *
+ * Set to zero the queue reads available messages and returns immediately.
+ *
+ * Set to a non-zero integer, long polling waits the specified number of seconds for messages to arrive before returning.
+ */
+ @Nullable
+ @Builder.Default
+ private Integer receiveMessageWaitTime = 0;
+
+ /**
+ * How long to retain a message on the queue in seconds, unless deleted.
+ */
+ @Nullable
+ @Builder.Default
+ @javax.validation.constraints.Min(60)
+ @javax.validation.constraints.Max(1209600)
+ private Integer messageRetentionPeriod = 345600;
+
+ /**
+ * Prevent poison pill messages by moving un-processable messages to an SQS dead letter queue.
+ */
+ @Nullable
+ private SQSOperationRedrivePolicy redrivePolicy;
+
+ /**
+ * The security policy for the SQS Queue.
+ */
+ @Nullable
+ private SQSOperationQueuePolicy policy;
+
+ /**
+ * Key-value pairs that represent AWS tags on the queue.
+ */
+ @Nullable
+ private Map tags;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueueDeduplicationScope.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueueDeduplicationScope.java
new file mode 100644
index 00000000..e975d80c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueueDeduplicationScope.java
@@ -0,0 +1,22 @@
+package com.asyncapi.bindings.sqs.v0._2_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Specifies whether message deduplication occurs at the message group or queue level.
+ *
+ * @see SQS operation binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+public enum SQSOperationQueueDeduplicationScope {
+
+ @JsonProperty("queue")
+ QUEUE,
+
+ @JsonProperty("messageGroup")
+ MESSAGE_GROUP
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueueFifoThroughputLimit.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueueFifoThroughputLimit.java
new file mode 100644
index 00000000..7658d706
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueueFifoThroughputLimit.java
@@ -0,0 +1,22 @@
+package com.asyncapi.bindings.sqs.v0._2_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Specifies whether the FIFO queue throughput quota applies to the entire queue or per message group.
+ *
+ * @see SQS operation binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+public enum SQSOperationQueueFifoThroughputLimit {
+
+ @JsonProperty("perQueue")
+ PER_QUEUE,
+
+ @JsonProperty("perMessageGroupId")
+ PER_MESSAGE_GROUP_ID
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueuePolicy.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueuePolicy.java
new file mode 100644
index 00000000..0debcc85
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueuePolicy.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.sqs.v0._2_0.operation;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.List;
+
+/**
+ * A definition of a SQS channel queue policy.
+ *
+ * @see SQS operation binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SQSOperationQueuePolicy {
+
+ /**
+ * An array of statement objects, each of which controls a permission for this queue.
+ */
+ @NotNull
+ private List<@NotNull SQSOperationQueuePolicyStatement> statements;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueuePolicyStatement.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueuePolicyStatement.java
new file mode 100644
index 00000000..9147ce50
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueuePolicyStatement.java
@@ -0,0 +1,42 @@
+package com.asyncapi.bindings.sqs.v0._2_0.operation;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * A definition of a SQS channel queue policy statement.
+ *
+ * @see SQS operation binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SQSOperationQueuePolicyStatement {
+
+ /**
+ * The SQS rule to allow or deny actions.
+ */
+ @NotNull
+ private SQSOperationQueuePolicyStatementEffect effect;
+
+ /**
+ * The AWS account or resource ARN that this statement applies to.
+ */
+ @NotNull
+ private Object principal;
+
+ /**
+ * The SQS permission being allowed or denied e.g. sqs:ReceiveMessage.
+ */
+ @NotNull
+ private Object action;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueuePolicyStatementEffect.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueuePolicyStatementEffect.java
new file mode 100644
index 00000000..cdc2190a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationQueuePolicyStatementEffect.java
@@ -0,0 +1,22 @@
+package com.asyncapi.bindings.sqs.v0._2_0.operation;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * A definition of a SQS channel queue policy statement effect.
+ *
+ * @see SQS operation binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+public enum SQSOperationQueuePolicyStatementEffect {
+
+ @JsonProperty("Allow")
+ ALLOW,
+
+ @JsonProperty("Deny")
+ DENY
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationRedrivePolicy.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationRedrivePolicy.java
new file mode 100644
index 00000000..b16455de
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/operation/SQSOperationRedrivePolicy.java
@@ -0,0 +1,37 @@
+package com.asyncapi.bindings.sqs.v0._2_0.operation;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Prevent poison pill messages by moving un-processable messages to an SQS dead letter queue.
+ *
+ * @see SQS operation binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class SQSOperationRedrivePolicy {
+
+ /**
+ * The SQS queue to use as a dead letter queue (DLQ).
+ */
+ @NotNull
+ private SQSOperationDeadLetterQueueIdentifier deadLetterQueue;
+
+ /**
+ * The number of times a message is delivered to the source queue before being moved to the dead-letter queue.
+ */
+ @Nullable
+ private Integer maxReceiveCount = 10;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/server/SQSServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/server/SQSServerBinding.java
new file mode 100644
index 00000000..2c5adf8c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/sqs/v0/_2_0/server/SQSServerBinding.java
@@ -0,0 +1,36 @@
+package com.asyncapi.bindings.sqs.v0._2_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties.
+ *
+ * Its name is reserved for future use.
+ *
+ * Describes SQS server binding.
+ *
+ * @see SQS server binding
+ * @see Amazon SQS
+ * @author Pavel Bodiachevskii
+ * @version 0.2.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@NoArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class SQSServerBinding extends com.asyncapi.bindings.sqs.SQSServerBinding {
+
+ @Override
+ public String getBindingVersion() {
+ return "0.2.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.2.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/STOMPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/STOMPChannelBinding.java
new file mode 100644
index 00000000..bbf5b4ba
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/STOMPChannelBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.stomp;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes STOMP channel binding.
+ *
+ * @see STOMP channel binding
+ * @see STOMP
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.stomp.v0._1_0.channel.STOMPChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.stomp.v0._1_0.channel.STOMPChannelBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class STOMPChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/STOMPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/STOMPMessageBinding.java
new file mode 100644
index 00000000..bdae67cc
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/STOMPMessageBinding.java
@@ -0,0 +1,33 @@
+package com.asyncapi.bindings.stomp;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes STOMP message binding.
+ *
+ * @see STOMP message binding
+ * @see STOMP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.stomp.v0._1_0.message.STOMPMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.stomp.v0._1_0.message.STOMPMessageBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class STOMPMessageBinding extends MessageBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/STOMPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/STOMPOperationBinding.java
new file mode 100644
index 00000000..0f4281b4
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/STOMPOperationBinding.java
@@ -0,0 +1,33 @@
+package com.asyncapi.bindings.stomp;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes STOMP operation binding.
+ *
+ * @see STOMP operation binding
+ * @see STOMP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.stomp.v0._1_0.operation.STOMPOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.stomp.v0._1_0.operation.STOMPOperationBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class STOMPOperationBinding extends OperationBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/STOMPServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/STOMPServerBinding.java
new file mode 100644
index 00000000..2f61c8fd
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/STOMPServerBinding.java
@@ -0,0 +1,33 @@
+package com.asyncapi.bindings.stomp;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes STOMP server binding.
+ *
+ * @see STOMP server binding
+ * @see STOMP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.stomp.v0._1_0.server.STOMPServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.stomp.v0._1_0.server.STOMPServerBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class STOMPServerBinding extends ServerBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/v0/_1_0/channel/STOMPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/v0/_1_0/channel/STOMPChannelBinding.java
new file mode 100644
index 00000000..d02bf091
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/v0/_1_0/channel/STOMPChannelBinding.java
@@ -0,0 +1,38 @@
+package com.asyncapi.bindings.stomp.v0._1_0.channel;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties.
+ *
+ * Its name is reserved for future use.
+ *
+ * Describes STOMP channel binding.
+ *
+ * @see STOMP channel binding
+ * @see STOMP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class STOMPChannelBinding extends com.asyncapi.bindings.stomp.STOMPChannelBinding {
+
+ public STOMPChannelBinding() {
+ this.setBindingVersion("0.1.0");
+ }
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/v0/_1_0/message/STOMPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/v0/_1_0/message/STOMPMessageBinding.java
new file mode 100644
index 00000000..90dbf189
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/v0/_1_0/message/STOMPMessageBinding.java
@@ -0,0 +1,38 @@
+package com.asyncapi.bindings.stomp.v0._1_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties.
+ *
+ * Its name is reserved for future use.
+ *
+ * Describes STOMP message binding.
+ *
+ * @see STOMP message binding
+ * @see STOMP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class STOMPMessageBinding extends com.asyncapi.bindings.stomp.STOMPMessageBinding {
+
+ public STOMPMessageBinding() {
+ this.setBindingVersion("0.1.0");
+ }
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/v0/_1_0/operation/STOMPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/v0/_1_0/operation/STOMPOperationBinding.java
new file mode 100644
index 00000000..7df44cf4
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/v0/_1_0/operation/STOMPOperationBinding.java
@@ -0,0 +1,38 @@
+package com.asyncapi.bindings.stomp.v0._1_0.operation;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties.
+ *
+ * Its name is reserved for future use.
+ *
+ * Describes STOMP operation binding.
+ *
+ * @see STOMP operation binding
+ * @see STOMP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class STOMPOperationBinding extends com.asyncapi.bindings.stomp.STOMPOperationBinding {
+
+ public STOMPOperationBinding() {
+ this.setBindingVersion("0.1.0");
+ }
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/v0/_1_0/server/STOMPServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/v0/_1_0/server/STOMPServerBinding.java
new file mode 100644
index 00000000..51b9e125
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/stomp/v0/_1_0/server/STOMPServerBinding.java
@@ -0,0 +1,38 @@
+package com.asyncapi.bindings.stomp.v0._1_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties.
+ *
+ * Its name is reserved for future use.
+ *
+ * Describes STOMP server binding.
+ *
+ * @see STOMP server binding
+ * @see STOMP
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class STOMPServerBinding extends com.asyncapi.bindings.stomp.STOMPServerBinding {
+
+ public STOMPServerBinding() {
+ this.setBindingVersion("0.1.0");
+ }
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/WebSocketsChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/WebSocketsChannelBinding.java
new file mode 100644
index 00000000..36208b22
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/WebSocketsChannelBinding.java
@@ -0,0 +1,38 @@
+package com.asyncapi.bindings.websockets;
+
+import com.asyncapi.bindings.ChannelBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 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.
+ *
+ * @see WebSockets channel binding
+ * @see MDN WebSockets
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.websockets.v0._1_0.channel.WebSocketsChannelBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.websockets.v0._1_0.channel.WebSocketsChannelBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class WebSocketsChannelBinding extends ChannelBinding {}
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/WebSocketsMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/WebSocketsMessageBinding.java
new file mode 100644
index 00000000..9348a6fa
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/WebSocketsMessageBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.websockets;
+
+import com.asyncapi.bindings.MessageBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes WebSockets message binding.
+ *
+ * @see WebSockets message binding
+ * @see MDN WebSockets
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.websockets.v0._1_0.message.WebSocketsMessageBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.websockets.v0._1_0.message.WebSocketsMessageBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class WebSocketsMessageBinding extends MessageBinding {}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/WebSocketsOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/WebSocketsOperationBinding.java
new file mode 100644
index 00000000..e21f5d7e
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/WebSocketsOperationBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.websockets;
+
+import com.asyncapi.bindings.OperationBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes WebSockets operation binding.
+ *
+ * @see WebSockets operation binding
+ * @see MDN WebSockets
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.websockets.v0._1_0.operation.WebSocketsOperationBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.websockets.v0._1_0.operation.WebSocketsOperationBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class WebSocketsOperationBinding extends OperationBinding {}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/WebSocketsServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/WebSocketsServerBinding.java
new file mode 100644
index 00000000..0e4a8fb4
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/WebSocketsServerBinding.java
@@ -0,0 +1,32 @@
+package com.asyncapi.bindings.websockets;
+
+import com.asyncapi.bindings.ServerBinding;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * Describes WebSockets server binding.
+ *
+ * @see WebSockets server binding
+ * @see MDN WebSockets
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ defaultImpl = com.asyncapi.bindings.websockets.v0._1_0.server.WebSocketsServerBinding.class,
+ property = "bindingVersion",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = com.asyncapi.bindings.websockets.v0._1_0.server.WebSocketsServerBinding.class, names = {
+ "0.1.0",
+ "latest"
+ }),
+})
+@Data
+@EqualsAndHashCode(callSuper = true)
+public abstract class WebSocketsServerBinding extends ServerBinding {}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/channel/WebSocketsChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/channel/WebSocketsChannelBinding.java
new file mode 100644
index 00000000..1edac42d
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/channel/WebSocketsChannelBinding.java
@@ -0,0 +1,136 @@
+package com.asyncapi.bindings.websockets.v0._1_0.channel;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.fasterxml.jackson.annotation.JsonClassDescription;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonPropertyDescription;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * 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.
+ *
+ * @see WebSockets channel binding
+ * @see MDN WebSockets
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+@JsonClassDescription("Describes WebSockets channel binding.")
+public class WebSocketsChannelBinding extends com.asyncapi.bindings.websockets.WebSocketsChannelBinding {
+
+ public WebSocketsChannelBinding() {
+ this.setBindingVersion("0.1.0");
+ }
+
+ public WebSocketsChannelBinding(@NotNull WebSocketsChannelBindingBuilder webSocketsChannelBindingBuilder) {
+ this.method = webSocketsChannelBindingBuilder.method;
+ this.query = webSocketsChannelBindingBuilder.query;
+ this.headers = webSocketsChannelBindingBuilder.headers;
+ this.setBindingVersion("0.1.0");
+ this.extensionFields = webSocketsChannelBindingBuilder.extensionFields;
+ }
+
+ /**
+ * The HTTP method to use when establishing the connection.
+ *
+ * Its value MUST be either GET or POST.
+ */
+ @Nullable
+ @JsonProperty("method")
+ @JsonPropertyDescription("The HTTP method to use when establishing the connection. Its value MUST be either GET or POST.")
+ private WebSocketsChannelMethod method;
+
+ /**
+ * A Schema object containing the definitions for each query parameter.
+ *
+ * This schema MUST be of type object and have a properties key.
+ */
+ @Nullable
+ @JsonProperty("query")
+ @JsonPropertyDescription("A Schema object containing the definitions for each query parameter. This schema MUST be of type object and have a properties key.")
+ private AsyncAPISchema query;
+
+ /**
+ * 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.
+ */
+ @Nullable
+ @JsonProperty("headers")
+ @JsonPropertyDescription("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.")
+ private AsyncAPISchema headers;
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+ public static WebSocketsChannelBindingBuilder builder() {
+ return new WebSocketsChannelBindingBuilder();
+ }
+
+ public static class WebSocketsChannelBindingBuilder {
+
+ @Nullable
+ private WebSocketsChannelMethod method;
+
+ @Nullable
+ private AsyncAPISchema query;
+
+ @Nullable
+ private AsyncAPISchema headers;
+
+ @Nullable
+ private Map extensionFields;
+
+ @NotNull
+ public WebSocketsChannelBindingBuilder method(@Nullable WebSocketsChannelMethod method) {
+ this.method = method;
+ return this;
+ }
+
+ @NotNull
+ public WebSocketsChannelBindingBuilder query(@Nullable AsyncAPISchema query) {
+ this.query = query;
+ return this;
+ }
+
+ @NotNull
+ public WebSocketsChannelBindingBuilder headers(@Nullable AsyncAPISchema headers) {
+ this.headers = headers;
+ return this;
+ }
+
+ @NotNull
+ public WebSocketsChannelBindingBuilder extensionFields(@Nullable Map extensionFields) {
+ this.extensionFields = extensionFields;
+ return this;
+ }
+
+ public WebSocketsChannelBinding build() {
+ return new WebSocketsChannelBinding(this);
+ }
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/channel/WebSocketsChannelMethod.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/channel/WebSocketsChannelMethod.java
new file mode 100644
index 00000000..bb3e4bea
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/channel/WebSocketsChannelMethod.java
@@ -0,0 +1,23 @@
+package com.asyncapi.bindings.websockets.v0._1_0.channel;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * The HTTP method to use when establishing the connection.
+ *
+ * Its value MUST be either GET or POST.
+ *
+ * @see MDN WebSockets
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+public enum WebSocketsChannelMethod {
+
+ @JsonProperty("GET")
+ GET,
+
+ @JsonProperty("POST")
+ POST
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/message/WebSocketsMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/message/WebSocketsMessageBinding.java
new file mode 100644
index 00000000..cba5af7c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/message/WebSocketsMessageBinding.java
@@ -0,0 +1,38 @@
+package com.asyncapi.bindings.websockets.v0._1_0.message;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties.
+ *
+ * Its name is reserved for future use.
+ *
+ * Describes WebSockets message binding.
+ *
+ * @see WebSockets message binding
+ * @see MDN WebSockets
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class WebSocketsMessageBinding extends com.asyncapi.bindings.websockets.WebSocketsMessageBinding {
+
+ public WebSocketsMessageBinding() {
+ this.setBindingVersion("0.1.0");
+ }
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/operation/WebSocketsOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/operation/WebSocketsOperationBinding.java
new file mode 100644
index 00000000..0a81aff5
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/operation/WebSocketsOperationBinding.java
@@ -0,0 +1,38 @@
+package com.asyncapi.bindings.websockets.v0._1_0.operation;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties.
+ *
+ * Its name is reserved for future use.
+ *
+ * Describes WebSockets operation binding.
+ *
+ * @see WebSockets operation binding
+ * @see MDN WebSockets
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class WebSocketsOperationBinding extends com.asyncapi.bindings.websockets.WebSocketsOperationBinding {
+
+ public WebSocketsOperationBinding() {
+ this.setBindingVersion("0.1.0");
+ }
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/server/WebSocketsServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/server/WebSocketsServerBinding.java
new file mode 100644
index 00000000..fc71ccd1
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/bindings/websockets/v0/_1_0/server/WebSocketsServerBinding.java
@@ -0,0 +1,38 @@
+package com.asyncapi.bindings.websockets.v0._1_0.server;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * This class MUST NOT contain any properties.
+ *
+ * Its name is reserved for future use.
+ *
+ * Describes WebSockets server binding.
+ *
+ * @see WebSockets server binding
+ * @see MDN WebSockets
+ * @author Pavel Bodiachevskii
+ * @version 0.1.0
+ * @since 1.0.0-RC2
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class WebSocketsServerBinding extends com.asyncapi.bindings.websockets.WebSocketsServerBinding {
+
+ public WebSocketsServerBinding() {
+ this.setBindingVersion("0.1.0");
+ }
+
+ @Override
+ public String getBindingVersion() {
+ return "0.1.0";
+ }
+
+ @Override
+ public void setBindingVersion(@Nullable String bindingVersion) {
+ super.setBindingVersion("0.1.0");
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/Type.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/Type.java
new file mode 100644
index 00000000..288cdce0
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/Type.java
@@ -0,0 +1,18 @@
+package com.asyncapi.schemas;
+
+/**
+ * Json Schema type.
+ *
+ * @author Pavel Bodiachevskii
+ */
+public class Type {
+
+ public final static String NULL = "null";
+ public final static String BOOLEAN = "boolean";
+ public final static String OBJECT = "object";
+ public final static String ARRAY = "array";
+ public final static String NUMBER = "number";
+ public final static String STRING = "string";
+ public final static String INTEGER = "integer";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/AsyncAPISchema.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/AsyncAPISchema.java
similarity index 98%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/AsyncAPISchema.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/AsyncAPISchema.java
index 888b5994..de15caf6 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/AsyncAPISchema.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/AsyncAPISchema.java
@@ -1,15 +1,18 @@
-package com.asyncapi.v3.schema;
+package com.asyncapi.schemas.asyncapi;
-import com.asyncapi.v3.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.multiformat.MultiFormatSchema;
+import com.asyncapi.schemas.serde.asyncapi.AsyncAPISchemaAdditionalPropertiesDeserializer;
+import com.asyncapi.schemas.serde.asyncapi.AsyncAPISchemaAnyValueDeserializer;
+import com.asyncapi.schemas.serde.asyncapi.AsyncAPISchemaItemsDeserializer;
import com.asyncapi.v3._0_0.jackson.model.ExternalDocumentationDeserializer;
-import com.asyncapi.v3.jackson.schema.AsyncAPISchemaAdditionalPropertiesDeserializer;
-import com.asyncapi.v3.jackson.schema.AsyncAPISchemaAnyValueDeserializer;
-import com.asyncapi.v3.jackson.schema.AsyncAPISchemaItemsDeserializer;
-import com.asyncapi.v3.schema.multiformat.MultiFormatSchema;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import lombok.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
import org.jetbrains.annotations.Nullable;
import javax.validation.constraints.Min;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/ExtendableObject.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/ExtendableObject.java
new file mode 100644
index 00000000..3aa7773e
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/ExtendableObject.java
@@ -0,0 +1,56 @@
+package com.asyncapi.schemas.asyncapi;
+
+import com.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.fasterxml.jackson.annotation.JsonAnySetter;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+
+/**
+ * While the AsyncAPI Specification tries to accommodate most use cases,
+ * additional data can be added to extend the specification at certain points.
+ *
+ * The extensions properties are implemented as patterned fields that are always prefixed by "x-".
+ *
+ * The extensions may or may not be supported by the available tooling, but those may be extended as
+ * well to add requested support (if tools are internal or open-sourced).
+ *
+ * @see Specification Extensions
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonIgnoreProperties({"extensionFields"})
+public class ExtendableObject {
+
+ public static final Pattern extensionPropertyNamePattern = Pattern.compile("^x-[\\w.\\x2d_]+$");
+
+ /**
+ * Extension fields in the form x-extension-field-name for the exposed API.
+ */
+ @Nullable
+ @JsonAnyGetter
+ protected Map extensionFields;
+
+ @JsonAnySetter
+ protected final void readExtensionProperty(String name, Object value) {
+ if (extensionPropertyNamePattern.matcher(name).matches()) {
+ if (extensionFields == null) {
+ extensionFields = new HashMap<>();
+ }
+
+ extensionFields.put(name, value);
+ } else {
+ throw new IllegalArgumentException(String.format("\"%s\" is not valid extension property", name));
+ }
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/Reference.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/Reference.java
new file mode 100644
index 00000000..17cb8490
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/Reference.java
@@ -0,0 +1,40 @@
+package com.asyncapi.schemas.asyncapi;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * A simple object to allow referencing other components in the specification, internally and externally.
+ *
+ * The Reference Object is defined by JSON Reference and follows the same structure, behavior and rules.
+ * A JSON Reference SHALL only be used to refer to a schema that is formatted in either JSON or YAML.
+ * In the case of a YAML-formatted Schema, the JSON Reference SHALL be applied to the JSON representation of
+ * that schema. The JSON representation SHALL be made by applying the conversion described here .
+ *
+ * For this specification, reference resolution is done as defined by the JSON Reference specification and not by
+ * the JSON Schema specification.
+ *
+ * This object cannot be extended with additional properties and any properties added SHALL be ignored.
+ *
+ * @see Reference
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class Reference {
+
+ /**
+ * Required .
+ *
+ * The reference string.
+ */
+ @NotNull
+ @JsonProperty(value = "$ref")
+ private String ref = "";
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/AsyncAPIFormatSchema.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/AsyncAPIFormatSchema.java
similarity index 94%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/AsyncAPIFormatSchema.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/AsyncAPIFormatSchema.java
index cb3fdb15..d0166596 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/AsyncAPIFormatSchema.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/AsyncAPIFormatSchema.java
@@ -1,6 +1,6 @@
-package com.asyncapi.v3.schema.multiformat;
+package com.asyncapi.schemas.asyncapi.multiformat;
-import com.asyncapi.v3.schema.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.EqualsAndHashCode;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/AvroFormatSchema.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/AvroFormatSchema.java
similarity index 77%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/AvroFormatSchema.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/AvroFormatSchema.java
index 8ef1618c..029a0728 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/AvroFormatSchema.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/AvroFormatSchema.java
@@ -1,7 +1,10 @@
-package com.asyncapi.v3.schema.multiformat;
+package com.asyncapi.schemas.asyncapi.multiformat;
-import com.asyncapi.v3.schema.AsyncAPISchema;
-import com.asyncapi.v3.schema.avro.v1._9_0.jackson.AvroSchemaDeserializer;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.schemas.avro.v1._9_0.AvroSchema;
+import com.asyncapi.schemas.avro.v1._9_0.AvroSchemaUnion;
+import com.asyncapi.schemas.avro.v1._9_0.serde.AvroSchemaDeserializer;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
@@ -36,9 +39,9 @@ public AvroFormatSchema(
/**
* Schema MUST be one of:
*
- * {@link com.asyncapi.v3.schema.avro.v1._9_0.AvroSchema}
- * {@link com.asyncapi.v3.schema.avro.v1._9_0.AvroSchemaUnion}
- * {@link com.asyncapi.v3.Reference}
+ * {@link AvroSchema}
+ * {@link AvroSchemaUnion}
+ * {@link Reference}
*
*
* @param schema Avro Schema or Reference
@@ -51,9 +54,9 @@ public void setSchema(@NotNull Object schema) {
/**
* Schema:
*
- * {@link com.asyncapi.v3.schema.avro.v1._9_0.AvroSchema}
- * {@link com.asyncapi.v3.schema.avro.v1._9_0.AvroSchemaUnion}
- * {@link com.asyncapi.v3.Reference}
+ * {@link AvroSchema}
+ * {@link AvroSchemaUnion}
+ * {@link Reference}
*
*/
@NotNull
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/JsonFormatSchema.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/JsonFormatSchema.java
similarity index 90%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/JsonFormatSchema.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/JsonFormatSchema.java
index 8165167f..565b135b 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/JsonFormatSchema.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/JsonFormatSchema.java
@@ -1,7 +1,7 @@
-package com.asyncapi.v3.schema.multiformat;
+package com.asyncapi.schemas.asyncapi.multiformat;
-import com.asyncapi.v3.schema.AsyncAPISchema;
-import com.asyncapi.v3.schema.JsonSchema;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.json.JsonSchema;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.EqualsAndHashCode;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/MultiFormatSchema.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/MultiFormatSchema.java
similarity index 94%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/MultiFormatSchema.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/MultiFormatSchema.java
index f8aab37b..6a6e1cb9 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/MultiFormatSchema.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/MultiFormatSchema.java
@@ -1,7 +1,8 @@
-package com.asyncapi.v3.schema.multiformat;
+package com.asyncapi.schemas.asyncapi.multiformat;
-import com.asyncapi.v3.ExtendableObject;
-import com.asyncapi.v3.schema.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
@@ -13,6 +14,7 @@
* The Multi Format Schema Object represents a schema definition. It differs from the {@link AsyncAPISchema} in that it supports
* multiple schema formats or languages (e.g., JSON Schema, Avro, etc.).
*
+ * @param schema to use
* @see Multi Format Schema
* @see Schema
* @author Pavel Bodiachevskii
@@ -124,7 +126,7 @@ public MultiFormatSchema(
*
* In such a case, this would make the Multi Format Schema Object equivalent to the {@link AsyncAPISchema}.
*
- * When using {@link com.asyncapi.v3.Reference} within the {@link #getSchema()}, the schemaFormat of the resource being referenced MUST match
+ * When using {@link Reference} within the {@link #getSchema()}, the schemaFormat of the resource being referenced MUST match
* the schemaFormat of the {@link #getSchema()} that contains the initial reference.
*
* For example, if you reference Avro schema, then schemaFormat of referencing resource and the resource being reference MUST match.
@@ -135,7 +137,7 @@ public MultiFormatSchema(
* A custom value MUST NOT refer to one of the schema formats listed in the table.
*
*
- * When using {@link com.asyncapi.v3.Reference} within the {@link #getSchema()}, the schemaFormat of the referenced resource MUST
+ * When using {@link Reference} within the {@link #getSchema()}, the schemaFormat of the referenced resource MUST
* match the schemaFormat of the schema containing the reference.
*
* @see Schema formats table
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/OpenAPIFormatSchema.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/OpenAPIFormatSchema.java
similarity index 89%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/OpenAPIFormatSchema.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/OpenAPIFormatSchema.java
index 3f1f4bc9..c75dc7bd 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/multiformat/OpenAPIFormatSchema.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/multiformat/OpenAPIFormatSchema.java
@@ -1,7 +1,7 @@
-package com.asyncapi.v3.schema.multiformat;
+package com.asyncapi.schemas.asyncapi.multiformat;
-import com.asyncapi.v3.schema.AsyncAPISchema;
-import com.asyncapi.v3.schema.openapi.v3._0_0.OpenAPISchema;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.openapi.v3._0_0.OpenAPISchema;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.EqualsAndHashCode;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/package-info.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/package-info.java
new file mode 100644
index 00000000..3f4ffce1
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/package-info.java
@@ -0,0 +1,8 @@
+/**
+ * This module provide security schemas, used in AsyncAPI.
+ *
+ * @see Security Scheme
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+package com.asyncapi.schemas.asyncapi.security;
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/ApiKeySecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/ApiKeySecurityScheme.java
new file mode 100644
index 00000000..2e24c424
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/ApiKeySecurityScheme.java
@@ -0,0 +1,49 @@
+package com.asyncapi.schemas.asyncapi.security.v2;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * API Key Security Scheme
+ *
+ * @version 2.6.0
+ * @see SecurityScheme
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class ApiKeySecurityScheme extends SecurityScheme {
+
+ /**
+ * REQUIRED.
+ *
+ * The location of the API key.
+ */
+ @NotNull
+ private ApiKeyLocation in = ApiKeyLocation.USER;
+
+ @Builder(builderMethodName = "apiKeyBuilder")
+ public ApiKeySecurityScheme(@Nullable String description,
+ @NotNull ApiKeyLocation in) {
+ super(Type.API_KEY, description);
+ this.in = in;
+ }
+
+ public enum ApiKeyLocation {
+
+ @JsonProperty("user")
+ USER,
+ @JsonProperty("password")
+ PASSWORD
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/OpenIdConnectSecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/OpenIdConnectSecurityScheme.java
new file mode 100644
index 00000000..cc48d0e9
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/OpenIdConnectSecurityScheme.java
@@ -0,0 +1,39 @@
+package com.asyncapi.schemas.asyncapi.security.v2;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * OpenID Connect Security Scheme
+ *
+ * @version 2.6.0
+ * @see SecurityScheme
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class OpenIdConnectSecurityScheme extends SecurityScheme {
+
+ /**
+ * REQUIRED.
+ *
+ * OpenId Connect URL to discover OAuth2 configuration values. This MUST be in the form of a URL.
+ */
+ @NotNull
+ private String openIdConnectUrl = "";
+
+ @Builder(builderMethodName = "openIdBuilder")
+ public OpenIdConnectSecurityScheme(@Nullable String description,
+ @NotNull String openIdConnectUrl) {
+ super(Type.OPENID_CONNECT, description);
+ this.openIdConnectUrl = openIdConnectUrl;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/SecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/SecurityScheme.java
new file mode 100644
index 00000000..70d96608
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/SecurityScheme.java
@@ -0,0 +1,123 @@
+package com.asyncapi.schemas.asyncapi.security.v2;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.security.v2.http.HttpApiKeySecurityScheme;
+import com.asyncapi.schemas.asyncapi.security.v2.http.HttpSecurityScheme;
+import com.asyncapi.schemas.asyncapi.security.v2.oauth2.OAuth2SecurityScheme;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Defines a security scheme that can be used by the operations. Supported schemes are:
+ *
+ * User/Password.
+ * API key (either as user or as password).
+ * X.509 certificate.
+ * End-to-end encryption (either symmetric or asymmetric).
+ * HTTP authentication.
+ * HTTP API key.
+ * OAuth2’s common flows (Implicit, Resource Owner Protected Credentials, Client Credentials and Authorization Code) as defined in RFC6749 .
+ * OpenID Connect Discovery.
+ * SASL (Simple Authentication and Security Layer) as defined in RFC4422 .
+ *
+ *
+ * This object MAY be extended with Specification Extensions .
+ *
+ * @version 2.6.0
+ * @see Security Scheme Object
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ property = "type",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "userPassword"),
+ @JsonSubTypes.Type(value = ApiKeySecurityScheme.class, name = "apiKey"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "X509"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "symmetricEncryption"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "asymmetricEncryption"),
+ @JsonSubTypes.Type(value = HttpApiKeySecurityScheme.class, name = "httpApiKey"),
+ @JsonSubTypes.Type(value = HttpSecurityScheme.class, name = "http"),
+ @JsonSubTypes.Type(value = OAuth2SecurityScheme.class, name = "oauth2"),
+ @JsonSubTypes.Type(value = OpenIdConnectSecurityScheme.class, name = "openIdConnect"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "plain"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "scramSha256"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "scramSha512"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "gssapi"),
+})
+@EqualsAndHashCode(callSuper = true)
+public class SecurityScheme extends ExtendableObject {
+
+ /**
+ * REQUIRED.
+ *
+ * The type of the security scheme. Valid values are:
+ *
+ * userPassword
+ * apiKey
+ * X509
+ * symmetricEncryption
+ * asymmetricEncryption
+ * httpApiKey
+ * http
+ * oauth2
+ * openIdConnect
+ *
+ */
+ @NotNull
+ @Builder.Default
+ private Type type = Type.USER_PASSWORD;
+
+ /**
+ * A short description for security scheme. CommonMark syntax MAY be used for rich text representation.
+ */
+ @Nullable
+ private String description;
+
+ public enum Type {
+
+ @JsonProperty("userPassword")
+ USER_PASSWORD,
+ @JsonProperty("apiKey")
+ API_KEY,
+ @JsonProperty("X509")
+ X509,
+ @JsonProperty("symmetricEncryption")
+ SYMMETRIC_ENCRYPTION,
+ @JsonProperty("asymmetricEncryption")
+ ASYMMETRIC_ENCRYPTION,
+ @JsonProperty("httpApiKey")
+ HTTP_API_KEY,
+ @JsonProperty("http")
+ HTTP,
+ @JsonProperty("oauth2")
+ OAUTH2,
+ @JsonProperty("openIdConnect")
+ OPENID_CONNECT,
+ @JsonProperty("plain")
+ PLAIN,
+ @JsonProperty("scramSha256")
+ SCRAM_SHA256,
+ @JsonProperty("scramSha512")
+ SCRAM_SHA512,
+ @JsonProperty("gssapi")
+ GSSAPI
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/http/HttpApiKeySecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/http/HttpApiKeySecurityScheme.java
new file mode 100644
index 00000000..3518a078
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/http/HttpApiKeySecurityScheme.java
@@ -0,0 +1,62 @@
+package com.asyncapi.schemas.asyncapi.security.v2.http;
+
+import com.asyncapi.schemas.asyncapi.security.v2.SecurityScheme;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * HTTP API Key Security Scheme
+ *
+ * @version 2.6.0
+ * @see SecurityScheme
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HttpApiKeySecurityScheme extends SecurityScheme {
+
+ /**
+ * REQUIRED.
+ *
+ * The name of the header, query or cookie parameter to be used.
+ */
+ @NotNull
+ private String name = "";
+
+ /**
+ * REQUIRED.
+ *
+ * The location of the API key.
+ */
+ @Nullable
+ private ApiKeyLocation in;
+
+ @Builder(builderMethodName = "httpApiKeyBuilder")
+ public HttpApiKeySecurityScheme(@Nullable String description,
+ @NotNull String name,
+ @Nullable ApiKeyLocation in) {
+ super(Type.HTTP_API_KEY, description);
+ this.name = name;
+ this.in = in;
+ }
+
+ public enum ApiKeyLocation {
+
+ @JsonProperty("query")
+ QUERY,
+ @JsonProperty("header")
+ HEADER,
+ @JsonProperty("cookie")
+ COOKIE
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/http/HttpSecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/http/HttpSecurityScheme.java
new file mode 100644
index 00000000..9f755132
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/http/HttpSecurityScheme.java
@@ -0,0 +1,49 @@
+package com.asyncapi.schemas.asyncapi.security.v2.http;
+
+import com.asyncapi.schemas.asyncapi.security.v2.SecurityScheme;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * HTTP Security Scheme
+ *
+ * @version 2.6.0
+ * @see SecurityScheme
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HttpSecurityScheme extends SecurityScheme {
+
+ /**
+ * REQUIRED.
+ *
+ * The name of the HTTP Authorization scheme to be used in the Authorization header as defined in RFC7235 .
+ */
+ @NotNull
+ private String scheme = "";
+
+ /**
+ * A hint to the client to identify how the bearer token is formatted. Bearer tokens are usually generated
+ * by an authorization server, so this information is primarily for documentation purposes.
+ */
+ @Nullable
+ private String bearerFormat;
+
+ @Builder(builderMethodName = "httpBuilder")
+ public HttpSecurityScheme(@Nullable String description,
+ @NotNull String scheme,
+ @Nullable String bearerFormat) {
+ super(Type.HTTP, description);
+ this.scheme = scheme;
+ this.bearerFormat = bearerFormat;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/OAuth2SecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/OAuth2SecurityScheme.java
new file mode 100644
index 00000000..124ab78d
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/OAuth2SecurityScheme.java
@@ -0,0 +1,40 @@
+package com.asyncapi.schemas.asyncapi.security.v2.oauth2;
+
+import com.asyncapi.schemas.asyncapi.security.v2.SecurityScheme;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * OAuth2 Security Scheme
+ *
+ * @version 2.6.0
+ * @see SecurityScheme
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class OAuth2SecurityScheme extends SecurityScheme {
+
+ /**
+ * REQUIRED.
+ *
+ * An object containing configuration information for the flow types supported.
+ */
+ @NotNull
+ private OAuthFlows flows = new OAuthFlows();
+
+ @Builder(builderMethodName = "oauth2Builder")
+ public OAuth2SecurityScheme(@Nullable String description,
+ @NotNull OAuthFlows flows) {
+ super(Type.OAUTH2, description);
+ this.flows = flows;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/OAuthFlows.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/OAuthFlows.java
new file mode 100644
index 00000000..595859ea
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/OAuthFlows.java
@@ -0,0 +1,55 @@
+package com.asyncapi.schemas.asyncapi.security.v2.oauth2;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.security.v2.oauth2.flow.AuthorizationCodeOAuthFlow;
+import com.asyncapi.schemas.asyncapi.security.v2.oauth2.flow.ClientCredentialsOAuthFlow;
+import com.asyncapi.schemas.asyncapi.security.v2.oauth2.flow.ImplicitOAuthFlow;
+import com.asyncapi.schemas.asyncapi.security.v2.oauth2.flow.PasswordOAuthFlow;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Allows configuration of the supported OAuth Flows.
+ *
+ * This object MAY be extended with Specification Extensions .
+ *
+ * @version 2.6.0
+ * @see OAuth Flows Object
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class OAuthFlows extends ExtendableObject {
+
+ /**
+ * Configuration for the OAuth Implicit flow
+ */
+ @Nullable
+ private ImplicitOAuthFlow implicit;
+
+ /**
+ * Configuration for the OAuth Resource Owner Protected Credentials flow
+ */
+ @Nullable
+ private PasswordOAuthFlow password;
+
+ /**
+ * Configuration for the OAuth Client Credentials flow.
+ */
+ @Nullable
+ private ClientCredentialsOAuthFlow clientCredentials;
+
+ /**
+ * Configuration for the OAuth Authorization Code flow
+ */
+ @Nullable
+ private AuthorizationCodeOAuthFlow authorizationCode;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/AuthorizationCodeOAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/AuthorizationCodeOAuthFlow.java
new file mode 100644
index 00000000..1e61ee81
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/AuthorizationCodeOAuthFlow.java
@@ -0,0 +1,52 @@
+package com.asyncapi.schemas.asyncapi.security.v2.oauth2.flow;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * This object MAY be extended with Specification Extensions .
+ *
+ * @version 2.6.0
+ * @see OAuth Flow Object
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AuthorizationCodeOAuthFlow extends OAuthFlow {
+
+ /**
+ * REQUIRED.
+ *
+ * The authorization URL to be used for this flow. This MUST be in the form of an absolute URL.
+ */
+ @NotNull
+ private String authorizationUrl = "";
+
+ /**
+ * REQUIRED.
+ *
+ * The token URL to be used for this flow. This MUST be in the form of an absolute URL.
+ */
+ @NotNull
+ private String tokenUrl = "";
+
+ @Builder(builderMethodName = "authorizationCodeBuilder")
+ public AuthorizationCodeOAuthFlow(@Nullable String refreshUrl,
+ @NotNull Map scopes,
+ @NotNull String authorizationUrl,
+ @NotNull String tokenUrl) {
+ super(refreshUrl, scopes);
+ this.authorizationUrl = authorizationUrl;
+ this.tokenUrl = tokenUrl;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/ClientCredentialsOAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/ClientCredentialsOAuthFlow.java
new file mode 100644
index 00000000..b0c63ce9
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/ClientCredentialsOAuthFlow.java
@@ -0,0 +1,45 @@
+package com.asyncapi.schemas.asyncapi.security.v2.oauth2.flow;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * Configuration for the OAuth Client Credentials flow
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @version 2.6.0
+ * @see OAuth Flow Object
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class ClientCredentialsOAuthFlow extends OAuthFlow {
+
+ /**
+ * REQUIRED.
+ *
+ * The token URL to be used for this flow. This MUST be in the form of a URL.
+ */
+ @NotNull
+ private String tokenUrl = "";
+
+ @Builder(builderMethodName = "clientCredentialsBuilder")
+ public ClientCredentialsOAuthFlow(@Nullable String refreshUrl,
+ @NotNull Map scopes,
+ @NotNull String tokenUrl) {
+ super(refreshUrl, scopes);
+ this.tokenUrl = tokenUrl;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/ImplicitOAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/ImplicitOAuthFlow.java
new file mode 100644
index 00000000..98ce95c2
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/ImplicitOAuthFlow.java
@@ -0,0 +1,45 @@
+package com.asyncapi.schemas.asyncapi.security.v2.oauth2.flow;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * Configuration for the OAuth Implicit flow
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @version 2.6.0
+ * @see OAuth Flow Object
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class ImplicitOAuthFlow extends OAuthFlow {
+
+ /**
+ * REQUIRED.
+ *
+ * The authorization URL to be used for this flow. This MUST be in the form of a URL
+ */
+ @NotNull
+ private String authorizationUrl = "";
+
+ @Builder(builderMethodName = "implicitBuilder")
+ public ImplicitOAuthFlow(@Nullable String refreshUrl,
+ @NotNull Map scopes,
+ @NotNull String authorizationUrl) {
+ super(refreshUrl, scopes);
+ this.authorizationUrl = authorizationUrl;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/OAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/OAuthFlow.java
new file mode 100644
index 00000000..2b19ded0
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/OAuthFlow.java
@@ -0,0 +1,47 @@
+package com.asyncapi.schemas.asyncapi.security.v2.oauth2.flow;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Configuration details for a supported OAuth Flow
+ *
+ * This object MAY be extended with Specification Extensions .
+ *
+ * @version 2.6.0
+ * @see OAuth Flow Object
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class OAuthFlow extends ExtendableObject {
+
+ /**
+ * The URL to be used for obtaining refresh tokens. This MUST be in the form of an absolute URL.
+ */
+ @Nullable
+ @Builder.Default
+ private String refreshUrl = "";
+
+ /**
+ * REQUIRED.
+ *
+ * The available scopes for the OAuth2 security scheme. A map between the scope name and a short description for it.
+ */
+ @NotNull
+ @Builder.Default
+ private Map scopes = new HashMap<>();
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/PasswordOAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/PasswordOAuthFlow.java
new file mode 100644
index 00000000..cdca7f33
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v2/oauth2/flow/PasswordOAuthFlow.java
@@ -0,0 +1,45 @@
+package com.asyncapi.schemas.asyncapi.security.v2.oauth2.flow;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * Configuration for the OAuth Resource Owner Protected Credentials flow
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @version 2.6.0
+ * @see OAuth Flow Object
+ * @author Pavel Bodiachevskii
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class PasswordOAuthFlow extends OAuthFlow {
+
+ /**
+ * REQUIRED.
+ *
+ * The token URL to be used for this flow. This MUST be in the form of a URL.
+ */
+ @NotNull
+ private String tokenUrl = "";
+
+ @Builder(builderMethodName = "passwordBuilder")
+ public PasswordOAuthFlow(@Nullable String refreshUrl,
+ @NotNull Map scopes,
+ @NotNull String tokenUrl) {
+ super(refreshUrl, scopes);
+ this.tokenUrl = tokenUrl;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/ApiKeySecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/ApiKeySecurityScheme.java
new file mode 100644
index 00000000..7297efd2
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/ApiKeySecurityScheme.java
@@ -0,0 +1,49 @@
+package com.asyncapi.schemas.asyncapi.security.v3;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * API Key Security Scheme
+ *
+ * @see SecurityScheme
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class ApiKeySecurityScheme extends SecurityScheme {
+
+ /**
+ * REQUIRED .
+ *
+ * The location of the API key.
+ */
+ @NotNull
+ private ApiKeyLocation in = ApiKeyLocation.USER;
+
+ @Builder(builderMethodName = "apiKeyBuilder")
+ public ApiKeySecurityScheme(@Nullable String description,
+ @NotNull ApiKeyLocation in) {
+ super(Type.API_KEY, description);
+ this.in = in;
+ }
+
+ public enum ApiKeyLocation {
+
+ @JsonProperty("user")
+ USER,
+ @JsonProperty("password")
+ PASSWORD
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/OpenIdConnectSecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/OpenIdConnectSecurityScheme.java
new file mode 100644
index 00000000..00d29367
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/OpenIdConnectSecurityScheme.java
@@ -0,0 +1,49 @@
+package com.asyncapi.schemas.asyncapi.security.v3;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * OpenID Connect Security Scheme
+ *
+ * @see SecurityScheme
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class OpenIdConnectSecurityScheme extends SecurityScheme {
+
+ /**
+ * REQUIRED .
+ *
+ * OpenId Connect URL to discover OAuth2 configuration values. This MUST be in the form of an absolute URL.
+ */
+ @NotNull
+ private String openIdConnectUrl = "";
+
+ /**
+ * List of the needed scope names. An empty array means no scopes are needed.
+ */
+ @Nullable
+ private List scopes;
+
+ @Builder(builderMethodName = "openIdBuilder")
+ public OpenIdConnectSecurityScheme(@Nullable String description,
+ @NotNull String openIdConnectUrl,
+ @Nullable List scopes) {
+ super(Type.OPENID_CONNECT, description);
+ this.openIdConnectUrl = openIdConnectUrl;
+ this.scopes = scopes;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/SecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/SecurityScheme.java
new file mode 100644
index 00000000..26ff8cfe
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/SecurityScheme.java
@@ -0,0 +1,124 @@
+package com.asyncapi.schemas.asyncapi.security.v3;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.security.v3.http.HttpApiKeySecurityScheme;
+import com.asyncapi.schemas.asyncapi.security.v3.http.HttpSecurityScheme;
+import com.asyncapi.schemas.asyncapi.security.v3.oauth2.OAuth2SecurityScheme;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonSubTypes;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Defines a security scheme that can be used by the operations. Supported schemes are:
+ *
+ * User/Password.
+ * API key (either as user or as password).
+ * X.509 certificate.
+ * End-to-end encryption (either symmetric or asymmetric).
+ * HTTP authentication.
+ * HTTP API key.
+ * OAuth2’s common flows (Implicit, Resource Owner Protected Credentials, Client Credentials and Authorization Code) as defined in RFC6749 .
+ * OpenID Connect Discovery.
+ * SASL (Simple Authentication and Security Layer) as defined in RFC4422 .
+ *
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @see Specification Extensions
+ * @see Security Scheme
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@JsonTypeInfo(
+ use = JsonTypeInfo.Id.NAME,
+ include = JsonTypeInfo.As.EXISTING_PROPERTY,
+ property = "type",
+ visible = true
+)
+@JsonSubTypes({
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "userPassword"),
+ @JsonSubTypes.Type(value = ApiKeySecurityScheme.class, name = "apiKey"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "X509"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "symmetricEncryption"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "asymmetricEncryption"),
+ @JsonSubTypes.Type(value = HttpApiKeySecurityScheme.class, name = "httpApiKey"),
+ @JsonSubTypes.Type(value = HttpSecurityScheme.class, name = "http"),
+ @JsonSubTypes.Type(value = OAuth2SecurityScheme.class, name = "oauth2"),
+ @JsonSubTypes.Type(value = OpenIdConnectSecurityScheme.class, name = "openIdConnect"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "plain"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "scramSha256"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "scramSha512"),
+ @JsonSubTypes.Type(value = SecurityScheme.class, name = "gssapi"),
+})
+@EqualsAndHashCode(callSuper = true)
+public class SecurityScheme extends ExtendableObject {
+
+ /**
+ * REQUIRED .
+ *
+ * The type of the security scheme. Valid values are:
+ *
+ * userPassword
+ * apiKey
+ * X509
+ * symmetricEncryption
+ * asymmetricEncryption
+ * httpApiKey
+ * http
+ * oauth2
+ * openIdConnect
+ *
+ */
+ @NotNull
+ @Builder.Default
+ private Type type = Type.USER_PASSWORD;
+
+ /**
+ * A short description for security scheme. CommonMark syntax MAY be used for rich text representation.
+ */
+ @Nullable
+ private String description;
+
+ public enum Type {
+
+ @JsonProperty("userPassword")
+ USER_PASSWORD,
+ @JsonProperty("apiKey")
+ API_KEY,
+ @JsonProperty("X509")
+ X509,
+ @JsonProperty("symmetricEncryption")
+ SYMMETRIC_ENCRYPTION,
+ @JsonProperty("asymmetricEncryption")
+ ASYMMETRIC_ENCRYPTION,
+ @JsonProperty("httpApiKey")
+ HTTP_API_KEY,
+ @JsonProperty("http")
+ HTTP,
+ @JsonProperty("oauth2")
+ OAUTH2,
+ @JsonProperty("openIdConnect")
+ OPENID_CONNECT,
+ @JsonProperty("plain")
+ PLAIN,
+ @JsonProperty("scramSha256")
+ SCRAM_SHA256,
+ @JsonProperty("scramSha512")
+ SCRAM_SHA512,
+ @JsonProperty("gssapi")
+ GSSAPI
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/http/HttpApiKeySecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/http/HttpApiKeySecurityScheme.java
new file mode 100644
index 00000000..6c96ebbb
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/http/HttpApiKeySecurityScheme.java
@@ -0,0 +1,62 @@
+package com.asyncapi.schemas.asyncapi.security.v3.http;
+
+import com.asyncapi.schemas.asyncapi.security.v3.SecurityScheme;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * HTTP API Key Security Scheme
+ *
+ * @see SecurityScheme
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HttpApiKeySecurityScheme extends SecurityScheme {
+
+ /**
+ * REQUIRED .
+ *
+ * The name of the header, query or cookie parameter to be used.
+ */
+ @NotNull
+ private String name = "";
+
+ /**
+ * REQUIRED .
+ *
+ * The location of the API key.
+ */
+ @Nullable
+ private ApiKeyLocation in;
+
+ @Builder(builderMethodName = "httpApiKeyBuilder")
+ public HttpApiKeySecurityScheme(@Nullable String description,
+ @NotNull String name,
+ @Nullable ApiKeyLocation in) {
+ super(Type.HTTP_API_KEY, description);
+ this.name = name;
+ this.in = in;
+ }
+
+ public enum ApiKeyLocation {
+
+ @JsonProperty("query")
+ QUERY,
+ @JsonProperty("header")
+ HEADER,
+ @JsonProperty("cookie")
+ COOKIE
+
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/http/HttpSecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/http/HttpSecurityScheme.java
new file mode 100644
index 00000000..2a7ab5cb
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/http/HttpSecurityScheme.java
@@ -0,0 +1,49 @@
+package com.asyncapi.schemas.asyncapi.security.v3.http;
+
+import com.asyncapi.schemas.asyncapi.security.v3.SecurityScheme;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * HTTP Security Scheme
+ *
+ * @see SecurityScheme
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class HttpSecurityScheme extends SecurityScheme {
+
+ /**
+ * REQUIRED .
+ *
+ * The name of the HTTP Authorization scheme to be used in the Authorization header as defined in RFC7235 .
+ */
+ @NotNull
+ private String scheme = "";
+
+ /**
+ * A hint to the client to identify how the bearer token is formatted. Bearer tokens are usually generated
+ * by an authorization server, so this information is primarily for documentation purposes.
+ */
+ @Nullable
+ private String bearerFormat;
+
+ @Builder(builderMethodName = "httpBuilder")
+ public HttpSecurityScheme(@Nullable String description,
+ @NotNull String scheme,
+ @Nullable String bearerFormat) {
+ super(Type.HTTP, description);
+ this.scheme = scheme;
+ this.bearerFormat = bearerFormat;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/OAuth2SecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/OAuth2SecurityScheme.java
new file mode 100644
index 00000000..cce42f84
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/OAuth2SecurityScheme.java
@@ -0,0 +1,50 @@
+package com.asyncapi.schemas.asyncapi.security.v3.oauth2;
+
+import com.asyncapi.schemas.asyncapi.security.v3.SecurityScheme;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+/**
+ * OAuth2 Security Scheme
+ *
+ * @see SecurityScheme
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class OAuth2SecurityScheme extends SecurityScheme {
+
+ /**
+ * REQUIRED .
+ *
+ * An object containing configuration information for the flow types supported.
+ */
+ @NotNull
+ private OAuthFlows flows = new OAuthFlows();
+
+ /**
+ * List of the needed scope names.
+ */
+ @Nullable
+ private List scopes;
+
+ @Builder(builderMethodName = "oauth2Builder")
+ public OAuth2SecurityScheme(@Nullable String description,
+ @NotNull OAuthFlows flows,
+ @Nullable List scopes) {
+ super(Type.OAUTH2, description);
+ this.flows = flows;
+ this.scopes = scopes;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/OAuthFlows.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/OAuthFlows.java
new file mode 100644
index 00000000..4eb8e6cb
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/OAuthFlows.java
@@ -0,0 +1,56 @@
+package com.asyncapi.schemas.asyncapi.security.v3.oauth2;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.security.v3.oauth2.flow.AuthorizationCodeOAuthFlow;
+import com.asyncapi.schemas.asyncapi.security.v3.oauth2.flow.ClientCredentialsOAuthFlow;
+import com.asyncapi.schemas.asyncapi.security.v3.oauth2.flow.ImplicitOAuthFlow;
+import com.asyncapi.schemas.asyncapi.security.v3.oauth2.flow.PasswordOAuthFlow;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * Allows configuration of the supported OAuth Flows.
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @see OAuth Flows
+ * @see Security Scheme
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class OAuthFlows extends ExtendableObject {
+
+ /**
+ * Configuration for the OAuth Implicit flow
+ */
+ @Nullable
+ private ImplicitOAuthFlow implicit;
+
+ /**
+ * Configuration for the OAuth Resource Owner Protected Credentials flow
+ */
+ @Nullable
+ private PasswordOAuthFlow password;
+
+ /**
+ * Configuration for the OAuth Client Credentials flow.
+ */
+ @Nullable
+ private ClientCredentialsOAuthFlow clientCredentials;
+
+ /**
+ * Configuration for the OAuth Authorization Code flow
+ */
+ @Nullable
+ private AuthorizationCodeOAuthFlow authorizationCode;
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/AuthorizationCodeOAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/AuthorizationCodeOAuthFlow.java
new file mode 100644
index 00000000..92169159
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/AuthorizationCodeOAuthFlow.java
@@ -0,0 +1,54 @@
+package com.asyncapi.schemas.asyncapi.security.v3.oauth2.flow;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * Configuration for the OAuth Authorization Code flow
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @see OAuth Flow
+ * @see Specification Extensions
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class AuthorizationCodeOAuthFlow extends OAuthFlow {
+
+ /**
+ * REQUIRED .
+ *
+ * The authorization URL to be used for this flow. This MUST be in the form of an absolute URL.
+ */
+ @NotNull
+ private String authorizationUrl = "";
+
+ /**
+ * The token URL to be used for this flow. This MUST be in the form of an absolute URL.
+ */
+ @Nullable
+ private String tokenUrl = "";
+
+ @Builder(builderMethodName = "authorizationCodeBuilder")
+ public AuthorizationCodeOAuthFlow(@Nullable String refreshUrl,
+ @NotNull Map availableScopes,
+ @NotNull String authorizationUrl,
+ @Nullable String tokenUrl) {
+ super(refreshUrl, availableScopes);
+ this.authorizationUrl = authorizationUrl;
+ this.tokenUrl = tokenUrl;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/ClientCredentialsOAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/ClientCredentialsOAuthFlow.java
new file mode 100644
index 00000000..3658133a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/ClientCredentialsOAuthFlow.java
@@ -0,0 +1,46 @@
+package com.asyncapi.schemas.asyncapi.security.v3.oauth2.flow;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * Configuration for the OAuth Client Credentials flow
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @see OAuth Flow
+ * @see Specification Extensions
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class ClientCredentialsOAuthFlow extends OAuthFlow {
+
+ /**
+ * REQUIRED .
+ *
+ * The token URL to be used for this flow. This MUST be in the form of a URL.
+ */
+ @NotNull
+ private String tokenUrl = "";
+
+ @Builder(builderMethodName = "clientCredentialsBuilder")
+ public ClientCredentialsOAuthFlow(@Nullable String refreshUrl,
+ @NotNull Map availableScopes,
+ @NotNull String tokenUrl) {
+ super(refreshUrl, availableScopes);
+ this.tokenUrl = tokenUrl;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/ImplicitOAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/ImplicitOAuthFlow.java
new file mode 100644
index 00000000..e17cbcf8
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/ImplicitOAuthFlow.java
@@ -0,0 +1,46 @@
+package com.asyncapi.schemas.asyncapi.security.v3.oauth2.flow;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * Configuration for the OAuth Implicit flow
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @see OAuth Flow
+ * @see Specification Extensions
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class ImplicitOAuthFlow extends OAuthFlow {
+
+ /**
+ * REQUIRED .
+ *
+ * The authorization URL to be used for this flow. This MUST be in the form of a URL
+ */
+ @NotNull
+ private String authorizationUrl = "";
+
+ @Builder(builderMethodName = "implicitBuilder")
+ public ImplicitOAuthFlow(@Nullable String refreshUrl,
+ @NotNull Map scopes,
+ @NotNull String authorizationUrl) {
+ super(refreshUrl, scopes);
+ this.authorizationUrl = authorizationUrl;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/OAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/OAuthFlow.java
new file mode 100644
index 00000000..ec3d492f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/OAuthFlow.java
@@ -0,0 +1,48 @@
+package com.asyncapi.schemas.asyncapi.security.v3.oauth2.flow;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Configuration details for a supported OAuth Flow
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @see OAuth Flow
+ * @see Specification Extensions
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class OAuthFlow extends ExtendableObject {
+
+ /**
+ * The URL to be used for obtaining refresh tokens. This MUST be in the form of an absolute URL.
+ */
+ @Nullable
+ @Builder.Default
+ private String refreshUrl = "";
+
+ /**
+ * REQUIRED .
+ *
+ * The available scopes for the OAuth2 security scheme. A map between the scope name and a short description for it.
+ */
+ @NotNull
+ @Builder.Default
+ private Map availableScopes = new HashMap<>();
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/PasswordOAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/PasswordOAuthFlow.java
new file mode 100644
index 00000000..3ce24c18
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/asyncapi/security/v3/oauth2/flow/PasswordOAuthFlow.java
@@ -0,0 +1,46 @@
+package com.asyncapi.schemas.asyncapi.security.v3.oauth2.flow;
+
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Map;
+
+/**
+ * Configuration for the OAuth Resource Owner Protected Credentials flow
+ *
+ * This object MAY be extended with {@link ExtendableObject}.
+ *
+ * @see OAuth Flow
+ * @see Specification Extensions
+ * @author Pavel Bodiachevskii
+ * @version 3.0.0
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@EqualsAndHashCode(callSuper = true)
+public class PasswordOAuthFlow extends OAuthFlow {
+
+ /**
+ * REQUIRED .
+ *
+ * The token URL to be used for this flow. This MUST be in the form of a URL.
+ */
+ @NotNull
+ private String tokenUrl = "";
+
+ @Builder(builderMethodName = "passwordBuilder")
+ public PasswordOAuthFlow(@Nullable String refreshUrl,
+ @NotNull Map scopes,
+ @NotNull String tokenUrl) {
+ super(refreshUrl, scopes);
+ this.tokenUrl = tokenUrl;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchema.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchema.java
similarity index 99%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchema.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchema.java
index df2d7734..1f5b6607 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchema.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchema.java
@@ -1,4 +1,4 @@
-package com.asyncapi.v3.schema.avro.v1._9_0;
+package com.asyncapi.schemas.avro.v1._9_0;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSubTypes;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaArray.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaArray.java
similarity index 95%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaArray.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaArray.java
index a51a1c4e..107103eb 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaArray.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaArray.java
@@ -1,6 +1,6 @@
-package com.asyncapi.v3.schema.avro.v1._9_0;
+package com.asyncapi.schemas.avro.v1._9_0;
-import com.asyncapi.v3.schema.avro.v1._9_0.jackson.AvroTypeDeserializer;
+import com.asyncapi.schemas.avro.v1._9_0.serde.AvroTypeDeserializer;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.Data;
@@ -13,6 +13,8 @@
import java.util.Map;
/**
+ * Avro Array Schema
+ *
* @see Arrays
*/
@Data
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaEnum.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaEnum.java
similarity index 97%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaEnum.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaEnum.java
index 965239d8..6d3b308b 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaEnum.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaEnum.java
@@ -1,6 +1,6 @@
-package com.asyncapi.v3.schema.avro.v1._9_0;
+package com.asyncapi.schemas.avro.v1._9_0;
-import com.asyncapi.v3.schema.avro.v1._9_0.jackson.AvroTypeDeserializer;
+import com.asyncapi.schemas.avro.v1._9_0.serde.AvroTypeDeserializer;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaFixed.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaFixed.java
similarity index 97%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaFixed.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaFixed.java
index 18e8abc9..5ea938ec 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaFixed.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaFixed.java
@@ -1,4 +1,4 @@
-package com.asyncapi.v3.schema.avro.v1._9_0;
+package com.asyncapi.schemas.avro.v1._9_0;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
@@ -10,6 +10,8 @@
import java.util.Map;
/**
+ * Avro Fixed Schema
+ *
* @see Arrays
*/
@Data
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaLogicalType.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaLogicalType.java
similarity index 91%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaLogicalType.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaLogicalType.java
index 98f4dd8f..bfeebed6 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaLogicalType.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaLogicalType.java
@@ -1,7 +1,10 @@
-package com.asyncapi.v3.schema.avro.v1._9_0;
+package com.asyncapi.schemas.avro.v1._9_0;
import com.fasterxml.jackson.annotation.JsonProperty;
+/**
+ * Avro Schema logical types
+ */
public class AvroSchemaLogicalType {
@JsonProperty("decimal")
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaMap.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaMap.java
similarity index 94%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaMap.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaMap.java
index 1ab2667f..ca200cec 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaMap.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaMap.java
@@ -1,6 +1,6 @@
-package com.asyncapi.v3.schema.avro.v1._9_0;
+package com.asyncapi.schemas.avro.v1._9_0;
-import com.asyncapi.v3.schema.avro.v1._9_0.jackson.AvroTypeDeserializer;
+import com.asyncapi.schemas.avro.v1._9_0.serde.AvroTypeDeserializer;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.Data;
@@ -12,6 +12,8 @@
import java.util.Map;
/**
+ * Avro Map Schema
+ *
* @see Maps
*/
@Data
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaMetadata.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaMetadata.java
similarity index 91%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaMetadata.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaMetadata.java
index 0299cf7c..14dc038f 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaMetadata.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaMetadata.java
@@ -1,4 +1,4 @@
-package com.asyncapi.v3.schema.avro.v1._9_0;
+package com.asyncapi.schemas.avro.v1._9_0;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
@@ -9,6 +9,9 @@
import java.util.HashMap;
import java.util.Map;
+/**
+ * Avro Schema metadata
+ */
@Data
@JsonIgnoreProperties({"metadata"})
public class AvroSchemaMetadata {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaRecord.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaRecord.java
similarity index 98%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaRecord.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaRecord.java
index 684742e6..55d9e762 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaRecord.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaRecord.java
@@ -1,4 +1,4 @@
-package com.asyncapi.v3.schema.avro.v1._9_0;
+package com.asyncapi.schemas.avro.v1._9_0;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaRecordField.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaRecordField.java
similarity index 98%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaRecordField.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaRecordField.java
index c07d97e0..7171c53a 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaRecordField.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaRecordField.java
@@ -1,6 +1,6 @@
-package com.asyncapi.v3.schema.avro.v1._9_0;
+package com.asyncapi.schemas.avro.v1._9_0;
-import com.asyncapi.v3.schema.avro.v1._9_0.jackson.AvroTypeDeserializer;
+import com.asyncapi.schemas.avro.v1._9_0.serde.AvroTypeDeserializer;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaType.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaType.java
similarity index 97%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaType.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaType.java
index 4b0f77a3..27bcb8a9 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaType.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaType.java
@@ -1,4 +1,4 @@
-package com.asyncapi.v3.schema.avro.v1._9_0;
+package com.asyncapi.schemas.avro.v1._9_0;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaUnion.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaUnion.java
similarity index 93%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaUnion.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaUnion.java
index 671a4645..64568a1b 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/AvroSchemaUnion.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/AvroSchemaUnion.java
@@ -1,6 +1,6 @@
-package com.asyncapi.v3.schema.avro.v1._9_0;
+package com.asyncapi.schemas.avro.v1._9_0;
-import com.asyncapi.v3.schema.avro.v1._9_0.jackson.AvroTypeDeserializer;
+import com.asyncapi.schemas.avro.v1._9_0.serde.AvroTypeDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import org.jetbrains.annotations.NotNull;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/jackson/AvroSchemaDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/serde/AvroSchemaDeserializer.java
similarity index 92%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/jackson/AvroSchemaDeserializer.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/serde/AvroSchemaDeserializer.java
index 40e94f64..64441238 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/jackson/AvroSchemaDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/serde/AvroSchemaDeserializer.java
@@ -1,8 +1,8 @@
-package com.asyncapi.v3.schema.avro.v1._9_0.jackson;
+package com.asyncapi.schemas.avro.v1._9_0.serde;
-import com.asyncapi.v3.Reference;
-import com.asyncapi.v3.schema.avro.v1._9_0.AvroSchema;
-import com.asyncapi.v3.schema.avro.v1._9_0.AvroSchemaUnion;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.schemas.avro.v1._9_0.AvroSchema;
+import com.asyncapi.schemas.avro.v1._9_0.AvroSchemaUnion;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/jackson/AvroTypeDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/serde/AvroTypeDeserializer.java
similarity index 92%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/jackson/AvroTypeDeserializer.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/serde/AvroTypeDeserializer.java
index 0673d418..13f692e4 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/avro/v1/_9_0/jackson/AvroTypeDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/avro/v1/_9_0/serde/AvroTypeDeserializer.java
@@ -1,7 +1,7 @@
-package com.asyncapi.v3.schema.avro.v1._9_0.jackson;
+package com.asyncapi.schemas.avro.v1._9_0.serde;
-import com.asyncapi.v3.schema.avro.v1._9_0.AvroSchema;
-import com.asyncapi.v3.schema.avro.v1._9_0.AvroSchemaUnion;
+import com.asyncapi.schemas.avro.v1._9_0.AvroSchema;
+import com.asyncapi.schemas.avro.v1._9_0.AvroSchemaUnion;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/JsonSchema.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/json/JsonSchema.java
similarity index 99%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/JsonSchema.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/json/JsonSchema.java
index 71eba2b0..c6ee1db8 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/JsonSchema.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/json/JsonSchema.java
@@ -1,8 +1,8 @@
-package com.asyncapi.v3.schema;
+package com.asyncapi.schemas.json;
-import com.asyncapi.v3.jackson.schema.JsonSchemaAnyValueDeserializer;
-import com.asyncapi.v3.jackson.schema.JsonSchemaItemsDeserializer;
-import com.asyncapi.v3.jackson.schema.JsonSchemaPropertiesDeserializer;
+import com.asyncapi.schemas.serde.json.JsonSchemaAnyValueDeserializer;
+import com.asyncapi.schemas.serde.json.JsonSchemaItemsDeserializer;
+import com.asyncapi.schemas.serde.json.JsonSchemaPropertiesDeserializer;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/OpenAPISchema.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/OpenAPISchema.java
similarity index 97%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/OpenAPISchema.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/OpenAPISchema.java
index 97f365d3..b805632f 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/OpenAPISchema.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/OpenAPISchema.java
@@ -1,14 +1,18 @@
-package com.asyncapi.v3.schema.openapi.v3._0_0;
-
-import com.asyncapi.v3.jackson.schema.openapi.OpenAPISchemaAdditionalPropertiesDeserializer;
-import com.asyncapi.v3.jackson.schema.openapi.OpenAPISchemaAnyValueDeserializer;
-import com.asyncapi.v3.schema.openapi.v3._0_0.properties.Discriminator;
-import com.asyncapi.v3.schema.openapi.v3._0_0.properties.Extensions;
-import com.asyncapi.v3.schema.openapi.v3._0_0.properties.ExternalDocumentation;
-import com.asyncapi.v3.schema.openapi.v3._0_0.properties.XML;
+package com.asyncapi.schemas.openapi.v3._0_0;
+
+import com.asyncapi.schemas.openapi.v3._0_0.properties.Discriminator;
+import com.asyncapi.schemas.openapi.v3._0_0.properties.Extensions;
+import com.asyncapi.schemas.openapi.v3._0_0.properties.ExternalDocumentation;
+import com.asyncapi.schemas.openapi.v3._0_0.properties.XML;
+import com.asyncapi.schemas.serde.openapi.OpenAPISchemaAdditionalPropertiesDeserializer;
+import com.asyncapi.schemas.serde.openapi.OpenAPISchemaAnyValueDeserializer;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import lombok.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
import org.jetbrains.annotations.Nullable;
import java.math.BigDecimal;
@@ -109,7 +113,7 @@ public class OpenAPISchema extends Extensions {
/**
* The word “exclusive” in {@link #exclusiveMinimum} and {@link #exclusiveMaximum} means the corresponding boundary is excluded:
- *
+ *
*
* Keyword
* Description
@@ -166,7 +170,7 @@ public class OpenAPISchema extends Extensions {
/**
* The word “exclusive” in {@link #exclusiveMinimum} and {@link #exclusiveMaximum} means the corresponding boundary is excluded:
- *
+ *
*
* Keyword
* Description
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/properties/Discriminator.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/properties/Discriminator.java
similarity index 97%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/properties/Discriminator.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/properties/Discriminator.java
index fc12e2ae..bc7ff05c 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/properties/Discriminator.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/properties/Discriminator.java
@@ -1,4 +1,4 @@
-package com.asyncapi.v3.schema.openapi.v3._0_0.properties;
+package com.asyncapi.schemas.openapi.v3._0_0.properties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/properties/Extensions.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/properties/Extensions.java
similarity index 92%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/properties/Extensions.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/properties/Extensions.java
index b243003f..7f779166 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/properties/Extensions.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/properties/Extensions.java
@@ -1,4 +1,4 @@
-package com.asyncapi.v3.schema.openapi.v3._0_0.properties;
+package com.asyncapi.schemas.openapi.v3._0_0.properties;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
@@ -13,6 +13,8 @@
import java.util.regex.Pattern;
/**
+ * Allows to extend AsyncAPI specification
+ *
* @see Specification Extensions
*/
@Data
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/properties/ExternalDocumentation.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/properties/ExternalDocumentation.java
similarity index 87%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/properties/ExternalDocumentation.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/properties/ExternalDocumentation.java
index 7289f546..63b3ab6b 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/properties/ExternalDocumentation.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/properties/ExternalDocumentation.java
@@ -1,8 +1,12 @@
-package com.asyncapi.v3.schema.openapi.v3._0_0.properties;
+package com.asyncapi.schemas.openapi.v3._0_0.properties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/properties/XML.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/properties/XML.java
similarity index 93%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/properties/XML.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/properties/XML.java
index 7739011f..4a8cf72e 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/schema/openapi/v3/_0_0/properties/XML.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/openapi/v3/_0_0/properties/XML.java
@@ -1,8 +1,12 @@
-package com.asyncapi.v3.schema.openapi.v3._0_0.properties;
+package com.asyncapi.schemas.openapi.v3._0_0.properties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.*;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
import org.jetbrains.annotations.Nullable;
/**
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/package-info.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/package-info.java
new file mode 100644
index 00000000..56f3945d
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/package-info.java
@@ -0,0 +1,7 @@
+/**
+ * This module provide schemas, used in AsyncAPI.
+ *
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+package com.asyncapi.schemas;
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/jackson/schema/SchemaAnyValueDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/SchemaAnyValueDeserializer.java
similarity index 94%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/jackson/schema/SchemaAnyValueDeserializer.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/serde/SchemaAnyValueDeserializer.java
index 09ca14d0..37c0e958 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/jackson/schema/SchemaAnyValueDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/SchemaAnyValueDeserializer.java
@@ -1,4 +1,4 @@
-package com.asyncapi.v3.jackson.schema;
+package com.asyncapi.schemas.serde;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
@@ -14,6 +14,9 @@
import java.util.List;
/**
+ * Abstract Schema any value deserializer
+ *
+ * @param schema to deserialize
* @author Pavel Bodiachevskii
*/
public abstract class SchemaAnyValueDeserializer extends JsonDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/jackson/schema/AsyncAPISchemaAdditionalPropertiesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/AsyncAPISchemaAdditionalPropertiesDeserializer.java
similarity index 88%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/jackson/schema/AsyncAPISchemaAdditionalPropertiesDeserializer.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/AsyncAPISchemaAdditionalPropertiesDeserializer.java
index 0e751265..364cdc87 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/jackson/schema/AsyncAPISchemaAdditionalPropertiesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/AsyncAPISchemaAdditionalPropertiesDeserializer.java
@@ -1,6 +1,6 @@
-package com.asyncapi.v3.jackson.schema;
+package com.asyncapi.schemas.serde.asyncapi;
-import com.asyncapi.v3.schema.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
@@ -11,6 +11,8 @@
import java.io.IOException;
/**
+ * AsyncAPI Schema additional properties deserializer
+ *
* @author Guillaume LAMIRAND (guillaume.lamirand at graviteesource.com)
* @author GraviteeSource Team
*/
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/AsyncAPISchemaAnyValueDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/AsyncAPISchemaAnyValueDeserializer.java
new file mode 100644
index 00000000..3741150f
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/AsyncAPISchemaAnyValueDeserializer.java
@@ -0,0 +1,18 @@
+package com.asyncapi.schemas.serde.asyncapi;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.serde.SchemaAnyValueDeserializer;
+
+/**
+ * AsyncAPI Schema any value deserializer
+ *
+ * @author Pavel Bodiachevskii
+ */
+public class AsyncAPISchemaAnyValueDeserializer extends SchemaAnyValueDeserializer {
+
+ @Override
+ public Class schemaClass() {
+ return AsyncAPISchema.class;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/AsyncAPISchemaItemsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/AsyncAPISchemaItemsDeserializer.java
new file mode 100644
index 00000000..04bda181
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/AsyncAPISchemaItemsDeserializer.java
@@ -0,0 +1,15 @@
+package com.asyncapi.schemas.serde.asyncapi;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.serde.SchemaItemsDeserializer;
+
+/**
+ * AsyncAPI Schema items deserializer
+ */
+public class AsyncAPISchemaItemsDeserializer extends SchemaItemsDeserializer {
+
+ public Class schemaClass() {
+ return AsyncAPISchema.class;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/ReferenceOrAsyncAPISchemaOrNumberDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/ReferenceOrAsyncAPISchemaOrNumberDeserializer.java
new file mode 100644
index 00000000..8e50d691
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/ReferenceOrAsyncAPISchemaOrNumberDeserializer.java
@@ -0,0 +1,41 @@
+package com.asyncapi.schemas.serde.asyncapi;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.fasterxml.jackson.core.JacksonException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+import org.jetbrains.annotations.Nullable;
+
+import java.io.IOException;
+
+public class ReferenceOrAsyncAPISchemaOrNumberDeserializer extends JsonDeserializer {
+
+ @Override
+ public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException {
+ ObjectCodec objectCodec = p.getCodec();
+ JsonNode node = objectCodec.readTree(p);
+
+ JsonNode jsonNode = node.get("$ref");
+ Object parsedNode;
+ try (JsonParser jsonParser = node.traverse(objectCodec)) {
+ if (node.isNumber()) {
+ parsedNode = jsonParser.readValueAs(Number.class);
+ } else if (isReference(jsonNode)) {
+ parsedNode = jsonParser.readValueAs(Reference.class);
+ } else {
+ parsedNode = jsonParser.readValueAs(AsyncAPISchema.class);
+ }
+ }
+
+ return parsedNode;
+ }
+
+ private boolean isReference(@Nullable JsonNode jsonNode) {
+ return jsonNode != null && jsonNode.properties().size() == 1 && jsonNode.get("$ref") != null;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/ReferenceOrAsyncAPISchemaOrStringDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/ReferenceOrAsyncAPISchemaOrStringDeserializer.java
new file mode 100644
index 00000000..c3293d1c
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/ReferenceOrAsyncAPISchemaOrStringDeserializer.java
@@ -0,0 +1,41 @@
+package com.asyncapi.schemas.serde.asyncapi;
+
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.fasterxml.jackson.core.JacksonException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+import org.jetbrains.annotations.Nullable;
+
+import java.io.IOException;
+
+public class ReferenceOrAsyncAPISchemaOrStringDeserializer extends JsonDeserializer {
+
+ @Override
+ public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException {
+ ObjectCodec objectCodec = p.getCodec();
+ JsonNode node = objectCodec.readTree(p);
+
+ JsonNode jsonNode = node.get("$ref");
+ Object parsedNode;
+ try (JsonParser jsonParser = node.traverse(objectCodec)) {
+ if (node.isTextual()) {
+ parsedNode = node.asText();
+ } else if (isReference(jsonNode)) {
+ parsedNode = jsonParser.readValueAs(Reference.class);
+ } else {
+ parsedNode = jsonParser.readValueAs(AsyncAPISchema.class);
+ }
+ }
+
+ return parsedNode;
+ }
+
+ private boolean isReference(@Nullable JsonNode jsonNode) {
+ return jsonNode != null && jsonNode.properties().size() == 1 && jsonNode.get("$ref") != null;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/security/v3/SecuritySchemesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/security/v3/SecuritySchemesDeserializer.java
new file mode 100644
index 00000000..3f8285d0
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/asyncapi/security/v3/SecuritySchemesDeserializer.java
@@ -0,0 +1,24 @@
+package com.asyncapi.schemas.serde.asyncapi.security.v3;
+
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.serde.ListOfReferencesOrObjectsDeserializer;
+import com.asyncapi.schemas.asyncapi.security.v3.SecurityScheme;
+
+/**
+ * Deserializes security schemes.
+ *
+ * @author Pavel Bodiachevskii
+ */
+public class SecuritySchemesDeserializer extends ListOfReferencesOrObjectsDeserializer {
+
+ @Override
+ public Class objectTypeClass() {
+ return SecurityScheme.class;
+ }
+
+ @Override
+ public Class> referenceClass() {
+ return Reference.class;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/json/JsonSchemaAnyValueDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/json/JsonSchemaAnyValueDeserializer.java
new file mode 100644
index 00000000..2a858cab
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/json/JsonSchemaAnyValueDeserializer.java
@@ -0,0 +1,18 @@
+package com.asyncapi.schemas.serde.json;
+
+import com.asyncapi.schemas.json.JsonSchema;
+import com.asyncapi.schemas.serde.SchemaAnyValueDeserializer;
+
+/**
+ * Json Schema any value deserializer
+ *
+ * @author Pavel Bodiachevskii
+ */
+public class JsonSchemaAnyValueDeserializer extends SchemaAnyValueDeserializer {
+
+ @Override
+ public Class schemaClass() {
+ return JsonSchema.class;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/json/JsonSchemaItemsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/json/JsonSchemaItemsDeserializer.java
new file mode 100644
index 00000000..4cff6df8
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/json/JsonSchemaItemsDeserializer.java
@@ -0,0 +1,15 @@
+package com.asyncapi.schemas.serde.json;
+
+import com.asyncapi.schemas.json.JsonSchema;
+import com.asyncapi.serde.SchemaItemsDeserializer;
+
+/**
+ * Json Schema items deserializer
+ */
+public class JsonSchemaItemsDeserializer extends SchemaItemsDeserializer {
+
+ public Class schemaClass() {
+ return JsonSchema.class;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/jackson/schema/JsonSchemaPropertiesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/json/JsonSchemaPropertiesDeserializer.java
similarity index 90%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/jackson/schema/JsonSchemaPropertiesDeserializer.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/serde/json/JsonSchemaPropertiesDeserializer.java
index 71402943..b4e5d32e 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/jackson/schema/JsonSchemaPropertiesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/json/JsonSchemaPropertiesDeserializer.java
@@ -1,6 +1,6 @@
-package com.asyncapi.v3.jackson.schema;
+package com.asyncapi.schemas.serde.json;
-import com.asyncapi.v3.schema.JsonSchema;
+import com.asyncapi.schemas.json.JsonSchema;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
@@ -11,6 +11,8 @@
import java.io.IOException;
/**
+ * Json Schema properties deserializer.
+ *
* @author Guillaume LAMIRAND (guillaume.lamirand at graviteesource.com)
* @author GraviteeSource Team
*/
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/jackson/schema/openapi/OpenAPISchemaAdditionalPropertiesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/openapi/OpenAPISchemaAdditionalPropertiesDeserializer.java
similarity index 88%
rename from asyncapi-core/src/main/java/com/asyncapi/v3/jackson/schema/openapi/OpenAPISchemaAdditionalPropertiesDeserializer.java
rename to asyncapi-core/src/main/java/com/asyncapi/schemas/serde/openapi/OpenAPISchemaAdditionalPropertiesDeserializer.java
index faa5c83b..1dda0475 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/jackson/schema/openapi/OpenAPISchemaAdditionalPropertiesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/openapi/OpenAPISchemaAdditionalPropertiesDeserializer.java
@@ -1,6 +1,6 @@
-package com.asyncapi.v3.jackson.schema.openapi;
+package com.asyncapi.schemas.serde.openapi;
-import com.asyncapi.v3.schema.openapi.v3._0_0.OpenAPISchema;
+import com.asyncapi.schemas.openapi.v3._0_0.OpenAPISchema;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
@@ -11,6 +11,8 @@
import java.io.IOException;
/**
+ * OpenAPI Schema additional properties deserializer
+ *
* @author Pavel Bodiachevskii
* @version 3.0.0
*/
diff --git a/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/openapi/OpenAPISchemaAnyValueDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/openapi/OpenAPISchemaAnyValueDeserializer.java
new file mode 100644
index 00000000..b93b381b
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/schemas/serde/openapi/OpenAPISchemaAnyValueDeserializer.java
@@ -0,0 +1,18 @@
+package com.asyncapi.schemas.serde.openapi;
+
+import com.asyncapi.schemas.openapi.v3._0_0.OpenAPISchema;
+import com.asyncapi.schemas.serde.SchemaAnyValueDeserializer;
+
+/**
+ * OpenAPI Schema any value deserializer
+ *
+ * @author Pavel Bodiachevskii
+ */
+public class OpenAPISchemaAnyValueDeserializer extends SchemaAnyValueDeserializer {
+
+ @Override
+ public Class schemaClass() {
+ return OpenAPISchema.class;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/serde/ListOfReferencesOrObjectsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/serde/ListOfReferencesOrObjectsDeserializer.java
new file mode 100644
index 00000000..c84193e7
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/serde/ListOfReferencesOrObjectsDeserializer.java
@@ -0,0 +1,51 @@
+package com.asyncapi.serde;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class ListOfReferencesOrObjectsDeserializer extends JsonDeserializer> {
+
+ abstract public Class objectTypeClass();
+
+ abstract public Class> referenceClass();
+
+ @Override
+ public List deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
+ ObjectCodec objectCodec = p.getCodec();
+ JsonNode node = objectCodec.readTree(p);
+
+ List traits = new ArrayList<>();
+
+ node.forEach(
+ traitsValue -> {
+ try {
+ traits.add(chooseKnownPojo(traitsValue, objectCodec));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ );
+
+ return traits;
+ }
+
+ private Object chooseKnownPojo(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
+ JsonNode ref = jsonNode.get("$ref");
+ try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
+ if (ref != null) {
+ return jsonParser.readValueAs(referenceClass());
+ } else {
+ return jsonParser.readValueAs(objectTypeClass());
+ }
+ }
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/serde/MapOfReferencesOrObjectsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/serde/MapOfReferencesOrObjectsDeserializer.java
new file mode 100644
index 00000000..d7aec3fb
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/serde/MapOfReferencesOrObjectsDeserializer.java
@@ -0,0 +1,80 @@
+package com.asyncapi.serde;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Deserializes AsyncAPI map of parameters
+ * @param object
+ */
+public abstract class MapOfReferencesOrObjectsDeserializer extends JsonDeserializer> {
+
+ abstract public Class objectTypeClass();
+
+ abstract public Class> referenceClass();
+
+ @Override
+ public Map deserialize(JsonParser jsonParser,
+ DeserializationContext deserializationContext
+ ) throws IOException, JsonProcessingException {
+ ObjectCodec objectCodec = jsonParser.getCodec();
+ JsonNode map = objectCodec.readTree(jsonParser);
+
+ Map parameters = new HashMap<>();
+
+ map.fieldNames().forEachRemaining(
+ fieldName -> {
+ /*
+ Problem:
+ Both, Reference class and Schema class have $ref field.
+ So, this is only reason why I receive next exception:
+ "com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
+ Unrecognized field "title" (class com.asyncapi.v2._6_0.model.Reference),
+ not marked as ignorable (one known property: "$ref"])"
+ in case when Schema contains $ref.
+ Solution:
+ Try to deserialize reference. In case of exception, try to deserialize it as given ObjectType. In case of
+ one more exception, throw it.
+ TODO: Think how to improve.
+ */
+ try {
+ parameters.put(fieldName, chooseKnownPojo(map.get(fieldName), objectCodec));
+ } catch (IOException ignore) {
+ try {
+ parameters.put(fieldName, readAsObject(map.get(fieldName), objectCodec));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ );
+
+ return parameters;
+ }
+
+ private Object chooseKnownPojo(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
+ JsonNode ref = jsonNode.get("$ref");
+ try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
+ if (ref != null) {
+ return jsonParser.readValueAs(referenceClass());
+ } else {
+ return jsonParser.readValueAs(objectTypeClass());
+ }
+ }
+ }
+
+ private Object readAsObject(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
+ try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
+ return jsonParser.readValueAs(objectTypeClass());
+ }
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/ObjectDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/serde/ObjectDeserializer.java
similarity index 96%
rename from asyncapi-core/src/main/java/com/asyncapi/v2/jackson/ObjectDeserializer.java
rename to asyncapi-core/src/main/java/com/asyncapi/serde/ObjectDeserializer.java
index 553750ac..43b10540 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/ObjectDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/serde/ObjectDeserializer.java
@@ -1,4 +1,4 @@
-package com.asyncapi.v2.jackson;
+package com.asyncapi.serde;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/serde/ReferenceOrObjectDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/serde/ReferenceOrObjectDeserializer.java
new file mode 100644
index 00000000..1afed6d5
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/serde/ReferenceOrObjectDeserializer.java
@@ -0,0 +1,61 @@
+package com.asyncapi.serde;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException;
+
+import java.io.IOException;
+
+public abstract class ReferenceOrObjectDeserializer extends JsonDeserializer {
+
+ abstract public Class objectTypeClass();
+
+ abstract public Class> referenceClass();
+
+ @Override
+ public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
+ ObjectCodec objectCodec = p.getCodec();
+ JsonNode node = objectCodec.readTree(p);
+
+ /*
+ Problem:
+ Both, Reference class and Schema class have $ref field.
+ So, this is only reason why I receive next exception:
+ "com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
+ Unrecognized field "title" (class com.asyncapi.v2._6_0.model.Reference),
+ not marked as ignorable (one known property: "$ref"])"
+ in case when Schema contains $ref.
+ Solution:
+ Try to deserialize reference. In case of exception, try to deserialize it as given ObjectType. In case of
+ one more exception, throw it.
+ TODO: Think how to improve.
+ */
+ try {
+ return chooseKnownPojo(node, objectCodec);
+ } catch (UnrecognizedPropertyException unrecognizedPropertyException) {
+ return readAsObject(node, objectCodec);
+ }
+ }
+
+ private Object chooseKnownPojo(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
+ JsonNode ref = jsonNode.get("$ref");
+ try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
+ if (ref != null) {
+ return jsonParser.readValueAs(referenceClass());
+ } else {
+ return jsonParser.readValueAs(objectTypeClass());
+ }
+ }
+ }
+
+ private Object readAsObject(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
+ try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
+ return jsonParser.readValueAs(objectTypeClass());
+ }
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/serde/SchemaItemsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/serde/SchemaItemsDeserializer.java
new file mode 100644
index 00000000..c55fd719
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/serde/SchemaItemsDeserializer.java
@@ -0,0 +1,52 @@
+package com.asyncapi.serde;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.JsonNodeType;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class SchemaItemsDeserializer extends JsonDeserializer {
+
+ abstract public Class schemaClass();
+
+ @Override
+ public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
+ ObjectCodec objectCodec = jsonParser.getCodec();
+ JsonNode node = objectCodec.readTree(jsonParser);
+ JsonNodeType nodeType = node.getNodeType();
+ if (nodeType == JsonNodeType.OBJECT) {
+ return readAsSchema(node, objectCodec);
+ }
+ if (nodeType == JsonNodeType.ARRAY) {
+ return readAsListOfSchemas((ArrayNode) node, objectCodec);
+ }
+ return readAsObject(node, objectCodec);
+ }
+
+ private List readAsListOfSchemas(ArrayNode arrayNode, ObjectCodec objectCodec) throws IOException {
+ List schemaList = new ArrayList<>();
+ for (JsonNode childNode : arrayNode) {
+ schemaList.add(readAsSchema(childNode, objectCodec));
+ }
+ return schemaList;
+ }
+
+ private Schema readAsSchema(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
+ try (JsonParser parser = jsonNode.traverse(objectCodec)) {
+ return parser.readValueAs(schemaClass());
+ }
+ }
+
+ private Object readAsObject(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
+ try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
+ return jsonParser.readValueAs(Object.class);
+ }
+ }
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/serde/package-info.java b/asyncapi-core/src/main/java/com/asyncapi/serde/package-info.java
new file mode 100644
index 00000000..60293814
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/serde/package-info.java
@@ -0,0 +1,7 @@
+/**
+ * Provides common classes for Serialization or Deserialization of AsyncAPI and it's components.
+ *
+ * @author Pavel Bodiachevskii
+ * @since 1.0.0-RC2
+ */
+package com.asyncapi.serde;
\ No newline at end of file
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/ExtendableObject.java b/asyncapi-core/src/main/java/com/asyncapi/v2/ExtendableObject.java
deleted file mode 100644
index 534b4eb2..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/ExtendableObject.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.asyncapi.v2;
-
-import com.fasterxml.jackson.annotation.JsonAnyGetter;
-import com.fasterxml.jackson.annotation.JsonAnySetter;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@JsonIgnoreProperties({"extensionFields"})
-public class ExtendableObject {
-
- private static final Pattern extensionPropertyNamePattern = Pattern.compile("^x-[\\w\\d\\-\\_]+$");
-
- /**
- * Extension fields in the form x-extension-field-name for the exposed API.
- */
- @Nullable
- @JsonAnyGetter
- protected Map extensionFields;
-
- @JsonAnySetter
- protected final void readExtensionProperty(String name, Object value) {
- if (extensionPropertyNamePattern.matcher(name).matches()) {
- if (extensionFields == null) {
- extensionFields = new HashMap<>();
- }
-
- extensionFields.put(name, value);
- } else {
- throw new IllegalArgumentException(String.format("\"%s\" is not valid extension property", name));
- }
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/Reference.java b/asyncapi-core/src/main/java/com/asyncapi/v2/Reference.java
deleted file mode 100644
index d7b447b2..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/Reference.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.asyncapi.v2;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * A simple object to allow referencing other components in the specification, internally and externally.
- *
- * The Reference Object is defined by JSON Reference and follows the same structure, behavior and rules.
- * A JSON Reference SHALL only be used to refer to a schema that is formatted in either JSON or YAML.
- * In the case of a YAML-formatted Schema, the JSON Reference SHALL be applied to the JSON representation of
- * that schema. The JSON representation SHALL be made by applying the conversion described here .
- *
- * For this specification, reference resolution is done as defined by the JSON Reference specification and not by
- * the JSON Schema specification.
- *
- * @version 2.6.0
- * @see Reference
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class Reference {
-
- /**
- * Required.
- *
- * The reference string.
- */
- @NotNull
- @JsonProperty(value = "$ref")
- private String ref = "";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/ChannelParametersDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/ChannelParametersDeserializer.java
index c702a0ca..a3a1fccf 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/ChannelParametersDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/ChannelParametersDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._0_0.jackson.model.channel;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._0_0.model.channel.Parameter;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
/**
* Serializes channel parameters map.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessageCorrelationIdDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessageCorrelationIdDeserializer.java
index b5dbd0ff..c57f6cfe 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessageCorrelationIdDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessageCorrelationIdDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._0_0.jackson.model.channel.message;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._0_0.model.channel.message.CorrelationId;
-import com.asyncapi.v2.jackson.ReferenceOrObjectDeserializer;
+import com.asyncapi.serde.ReferenceOrObjectDeserializer;
/**
* Serializes message traits list.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessageHeadersDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessageHeadersDeserializer.java
index e7b62788..31922958 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessageHeadersDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessageHeadersDeserializer.java
@@ -1,19 +1,19 @@
package com.asyncapi.v2._0_0.jackson.model.channel.message;
-import com.asyncapi.v2.Reference;
-import com.asyncapi.v2.schema.Schema;
-import com.asyncapi.v2.jackson.ReferenceOrObjectDeserializer;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.serde.ReferenceOrObjectDeserializer;
/**
* Serializes message traits list.
*
* @author Pavel Bodiachevskii
*/
-public class MessageHeadersDeserializer extends ReferenceOrObjectDeserializer {
+public class MessageHeadersDeserializer extends ReferenceOrObjectDeserializer {
@Override
- public Class objectTypeClass() {
- return Schema.class;
+ public Class objectTypeClass() {
+ return AsyncAPISchema.class;
}
public Class> referenceClass() {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessagePayloadDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessagePayloadDeserializer.java
index 8bba0769..ee65c8b2 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessagePayloadDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessagePayloadDeserializer.java
@@ -1,18 +1,18 @@
package com.asyncapi.v2._0_0.jackson.model.channel.message;
-import com.asyncapi.v2.schema.Schema;
-import com.asyncapi.v2.jackson.ObjectDeserializer;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.serde.ObjectDeserializer;
/**
* Serializes message traits list.
*
* @author Pavel Bodiachevskii
*/
-public class MessagePayloadDeserializer extends ObjectDeserializer {
+public class MessagePayloadDeserializer extends ObjectDeserializer {
@Override
- public Class objectTypeClass() {
- return Schema.class;
+ public Class objectTypeClass() {
+ return AsyncAPISchema.class;
}
}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessageTraitsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessageTraitsDeserializer.java
index e80a6148..21340269 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessageTraitsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/message/MessageTraitsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._0_0.jackson.model.channel.message;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._0_0.model.channel.message.MessageTrait;
-import com.asyncapi.v2.jackson.ListOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.ListOfReferencesOrObjectsDeserializer;
/**
* Serializes message traits list.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/operation/OperationMessageDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/operation/OperationMessageDeserializer.java
index 8f59c963..c6b619ed 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/operation/OperationMessageDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/operation/OperationMessageDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._0_0.jackson.model.channel.operation;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._0_0.model.channel.message.Message;
-import com.asyncapi.v2.jackson.ReferenceOrObjectDeserializer;
+import com.asyncapi.serde.ReferenceOrObjectDeserializer;
/**
* Serializes operation message list.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/operation/OperationTraitsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/operation/OperationTraitsDeserializer.java
index 185e271f..f0e57f5d 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/operation/OperationTraitsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/channel/operation/OperationTraitsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._0_0.jackson.model.channel.operation;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._0_0.model.channel.operation.OperationTrait;
-import com.asyncapi.v2.jackson.ListOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.ListOfReferencesOrObjectsDeserializer;
/**
* Serializes operation traits list.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsMessagesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsMessagesDeserializer.java
index 06783ee3..e1f4b209 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsMessagesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsMessagesDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._0_0.jackson.model.component;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._0_0.model.channel.message.Message;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
/**
* Serializes component security schemes map.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsParametersDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsParametersDeserializer.java
index 1471ce0c..b1c112af 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsParametersDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsParametersDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._0_0.jackson.model.component;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._0_0.model.channel.Parameter;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
/**
* Serializes channel parameters map.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsSchemasDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsSchemasDeserializer.java
index 168d7dd1..9317979a 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsSchemasDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsSchemasDeserializer.java
@@ -1,19 +1,19 @@
package com.asyncapi.v2._0_0.jackson.model.component;
-import com.asyncapi.v2.Reference;
-import com.asyncapi.v2.schema.Schema;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
/**
* Serializes component schemas map.
*
* @author Pavel Bodiachevskii
*/
-public class ComponentsSchemasDeserializer extends MapOfReferencesOrObjectsDeserializer {
+public class ComponentsSchemasDeserializer extends MapOfReferencesOrObjectsDeserializer {
@Override
- public Class objectTypeClass() {
- return Schema.class;
+ public Class objectTypeClass() {
+ return AsyncAPISchema.class;
}
@Override
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsSecuritySchemesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsSecuritySchemesDeserializer.java
index 91c7d16e..46ac1a33 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsSecuritySchemesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/component/ComponentsSecuritySchemesDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._0_0.jackson.model.component;
-import com.asyncapi.v2.Reference;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
-import com.asyncapi.v2.security_scheme.SecurityScheme;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.schemas.asyncapi.security.v2.SecurityScheme;
/**
* Serializes component security schemes map.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/schema/SchemasAdditionalPropertiesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/schema/SchemasAdditionalPropertiesDeserializer.java
deleted file mode 100644
index a02e585e..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/jackson/model/schema/SchemasAdditionalPropertiesDeserializer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.asyncapi.v2._0_0.jackson.model.schema;
-
-import com.asyncapi.v2.schema.Schema;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonNode;
-
-import java.io.IOException;
-
-/**
- * @author Guillaume LAMIRAND (guillaume.lamirand at graviteesource.com)
- * @author GraviteeSource Team
- */
-public class SchemasAdditionalPropertiesDeserializer extends JsonDeserializer {
-
- @Override
- public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
- ObjectCodec objectCodec = p.getCodec();
- JsonNode node = objectCodec.readTree(p);
-
- return chooseKnownPojo(node, objectCodec);
- }
-
- private Object chooseKnownPojo(JsonNode jsonNode, final ObjectCodec objectCodec) throws IOException {
- try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
- if (jsonNode.isBoolean()) {
- return jsonNode.asBoolean();
- } else {
- return jsonParser.readValueAs(Schema.class);
- }
- }
- }
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/AsyncAPI.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/AsyncAPI.java
index 790ef520..c2baf499 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/AsyncAPI.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/AsyncAPI.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._0_0.model;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import com.asyncapi.v2._0_0.model.channel.ChannelItem;
import com.asyncapi.v2._0_0.model.component.Components;
import com.asyncapi.v2._0_0.model.info.Info;
@@ -46,7 +46,7 @@ public class AsyncAPI extends ExtendableObject {
*/
@NotNull
@Builder.Default
- private final String asyncapi = "2.0.0";
+ private String asyncapi = "2.0.0";
/**
* Identifier of the application the AsyncAPI document is defining.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/ExternalDocumentation.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/ExternalDocumentation.java
index 271780a7..f40dff4a 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/ExternalDocumentation.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/ExternalDocumentation.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._0_0.model;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/Tag.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/Tag.java
index 536a3d2a..3df58fcf 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/Tag.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/Tag.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._0_0.model;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/ChannelItem.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/ChannelItem.java
index 369c4980..618af41a 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/ChannelItem.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/ChannelItem.java
@@ -1,11 +1,11 @@
package com.asyncapi.v2._0_0.model.channel;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import com.asyncapi.v2._0_0.jackson.model.channel.ChannelParametersDeserializer;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._0_0.model.channel.operation.Operation;
-import com.asyncapi.v2.binding.channel.ChannelBinding;
-import com.asyncapi.v2.jackson.binding.channel.ChannelBindingsDeserializer;
+import com.asyncapi.bindings.ChannelBinding;
+import com.asyncapi.bindings.ChannelBindingsDeserializer;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/Parameter.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/Parameter.java
index 2b5e192f..e877534a 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/Parameter.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/Parameter.java
@@ -1,7 +1,7 @@
package com.asyncapi.v2._0_0.model.channel;
-import com.asyncapi.v2.ExtendableObject;
-import com.asyncapi.v2.schema.Schema;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -36,7 +36,7 @@ public class Parameter extends ExtendableObject {
*/
@JsonProperty
@Nullable
- private Schema schema;
+ private AsyncAPISchema schema;
/**
* A runtime expression that specifies the location of the parameter value.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/message/CorrelationId.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/message/CorrelationId.java
index 56f008a7..04445a1e 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/message/CorrelationId.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/message/CorrelationId.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._0_0.model.channel.message;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/message/Message.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/message/Message.java
index 7f68d20b..1268160e 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/message/Message.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/message/Message.java
@@ -1,16 +1,16 @@
package com.asyncapi.v2._0_0.model.channel.message;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import com.asyncapi.v2._0_0.jackson.model.channel.message.MessageCorrelationIdDeserializer;
import com.asyncapi.v2._0_0.jackson.model.channel.message.MessageHeadersDeserializer;
import com.asyncapi.v2._0_0.jackson.model.channel.message.MessagePayloadDeserializer;
import com.asyncapi.v2._0_0.jackson.model.channel.message.MessageTraitsDeserializer;
import com.asyncapi.v2._0_0.model.ExternalDocumentation;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._0_0.model.Tag;
-import com.asyncapi.v2.schema.Schema;
-import com.asyncapi.v2.binding.message.MessageBinding;
-import com.asyncapi.v2.jackson.binding.message.MessageBindingsDeserializer;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.bindings.MessageBinding;
+import com.asyncapi.bindings.MessageBindingsDeserializer;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
@@ -43,7 +43,7 @@ public class Message extends ExtendableObject {
*
* MUST BE:
*
- * {@link Schema}
+ * {@link AsyncAPISchema}
* {@link Reference}
*
*/
@@ -56,7 +56,7 @@ public class Message extends ExtendableObject {
*
* WILL BE:
*
- * {@link Schema}
+ * {@link AsyncAPISchema}
* {@link com.fasterxml.jackson.databind.JsonNode}
*
*/
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/message/MessageTrait.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/message/MessageTrait.java
index a762936a..aa4d7dc1 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/message/MessageTrait.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/message/MessageTrait.java
@@ -1,15 +1,15 @@
package com.asyncapi.v2._0_0.model.channel.message;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import com.asyncapi.v2._0_0.jackson.model.channel.message.MessageCorrelationIdDeserializer;
import com.asyncapi.v2._0_0.jackson.model.channel.message.MessageHeadersDeserializer;
import com.asyncapi.v2._0_0.model.ExternalDocumentation;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._0_0.model.Tag;
import com.asyncapi.v2._0_0.model.channel.operation.OperationTrait;
-import com.asyncapi.v2.schema.Schema;
-import com.asyncapi.v2.binding.message.MessageBinding;
-import com.asyncapi.v2.jackson.binding.message.MessageBindingsDeserializer;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.bindings.MessageBinding;
+import com.asyncapi.bindings.MessageBindingsDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -47,7 +47,7 @@ public class MessageTrait extends ExtendableObject {
*
* MUST BE:
*
- * {@link Schema}
+ * {@link AsyncAPISchema}
* {@link Reference}
*
*/
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/operation/Operation.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/operation/Operation.java
index 1a243f9d..b0816162 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/operation/Operation.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/operation/Operation.java
@@ -1,14 +1,14 @@
package com.asyncapi.v2._0_0.model.channel.operation;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import com.asyncapi.v2._0_0.jackson.model.channel.operation.OperationMessageDeserializer;
import com.asyncapi.v2._0_0.jackson.model.channel.operation.OperationTraitsDeserializer;
import com.asyncapi.v2._0_0.model.ExternalDocumentation;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._0_0.model.Tag;
import com.asyncapi.v2._0_0.model.channel.message.Message;
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import com.asyncapi.v2.jackson.binding.operation.OperationBindingsDeserializer;
+import com.asyncapi.bindings.OperationBinding;
+import com.asyncapi.bindings.OperationBindingsDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/operation/OperationTrait.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/operation/OperationTrait.java
index d66d74e3..e48f7c0b 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/operation/OperationTrait.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/channel/operation/OperationTrait.java
@@ -1,11 +1,11 @@
package com.asyncapi.v2._0_0.model.channel.operation;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import com.asyncapi.v2._0_0.model.ExternalDocumentation;
import com.asyncapi.v2._0_0.model.Tag;
import com.asyncapi.v2._0_0.model.channel.message.MessageTrait;
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import com.asyncapi.v2.jackson.binding.operation.OperationBindingsDeserializer;
+import com.asyncapi.bindings.OperationBinding;
+import com.asyncapi.bindings.OperationBindingsDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/component/Components.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/component/Components.java
index c6f4660d..de5cdab8 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/component/Components.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/component/Components.java
@@ -1,26 +1,26 @@
package com.asyncapi.v2._0_0.model.component;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import com.asyncapi.v2._0_0.jackson.model.component.ComponentsMessagesDeserializer;
import com.asyncapi.v2._0_0.jackson.model.component.ComponentsParametersDeserializer;
import com.asyncapi.v2._0_0.jackson.model.component.ComponentsSchemasDeserializer;
import com.asyncapi.v2._0_0.jackson.model.component.ComponentsSecuritySchemesDeserializer;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._0_0.model.channel.Parameter;
import com.asyncapi.v2._0_0.model.channel.message.CorrelationId;
import com.asyncapi.v2._0_0.model.channel.message.Message;
import com.asyncapi.v2._0_0.model.channel.message.MessageTrait;
import com.asyncapi.v2._0_0.model.channel.operation.OperationTrait;
-import com.asyncapi.v2.schema.Schema;
-import com.asyncapi.v2.binding.channel.ChannelBinding;
-import com.asyncapi.v2.binding.message.MessageBinding;
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import com.asyncapi.v2.binding.server.ServerBinding;
-import com.asyncapi.v2.jackson.binding.channel.ChannelBindingsDeserializer;
-import com.asyncapi.v2.jackson.binding.message.MessageBindingsDeserializer;
-import com.asyncapi.v2.jackson.binding.operation.OperationBindingsDeserializer;
-import com.asyncapi.v2.jackson.binding.server.ServerBindingsDeserializer;
-import com.asyncapi.v2.security_scheme.SecurityScheme;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.bindings.ChannelBinding;
+import com.asyncapi.bindings.MessageBinding;
+import com.asyncapi.bindings.OperationBinding;
+import com.asyncapi.bindings.ServerBinding;
+import com.asyncapi.bindings.ChannelBindingsDeserializer;
+import com.asyncapi.bindings.MessageBindingsDeserializer;
+import com.asyncapi.bindings.OperationBindingsDeserializer;
+import com.asyncapi.bindings.ServerBindingsDeserializer;
+import com.asyncapi.schemas.asyncapi.security.v2.SecurityScheme;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -52,7 +52,7 @@ public class Components extends ExtendableObject {
*
* MUST BE:
*
- * {@link Schema}
+ * {@link AsyncAPISchema}
* {@link Reference}
*
*/
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/info/Contact.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/info/Contact.java
index 648c91da..542fcb01 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/info/Contact.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/info/Contact.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._0_0.model.info;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/info/Info.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/info/Info.java
index 61a5a338..93392a7e 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/info/Info.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/info/Info.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._0_0.model.info;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/info/License.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/info/License.java
index dfb6c6c4..4ec84e93 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/info/License.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/info/License.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._0_0.model.info;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/server/Server.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/server/Server.java
index 4d707b5a..2de5657b 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/server/Server.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/server/Server.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._0_0.model.server;
-import com.asyncapi.v2.ExtendableObject;
-import com.asyncapi.v2.binding.server.ServerBinding;
-import com.asyncapi.v2.jackson.binding.server.ServerBindingsDeserializer;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.bindings.ServerBinding;
+import com.asyncapi.bindings.ServerBindingsDeserializer;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/server/ServerVariable.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/server/ServerVariable.java
index 5b1d233c..9d75835f 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/server/ServerVariable.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_0_0/model/server/ServerVariable.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._0_0.model.server;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/ChannelParametersDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/ChannelParametersDeserializer.java
index 9bdc2bad..c6a2037b 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/ChannelParametersDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/ChannelParametersDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.channel;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.channel.Parameter;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
/**
* Serializes channel parameters map.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageCorrelationIdDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageCorrelationIdDeserializer.java
index 03003e13..43109fb8 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageCorrelationIdDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageCorrelationIdDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.channel.message;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.channel.message.CorrelationId;
-import com.asyncapi.v2.jackson.ReferenceOrObjectDeserializer;
+import com.asyncapi.serde.ReferenceOrObjectDeserializer;
/**
* Serializes message correlation id.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageDeserializer.java
new file mode 100644
index 00000000..7997c79a
--- /dev/null
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageDeserializer.java
@@ -0,0 +1,298 @@
+package com.asyncapi.v2._6_0.jackson.model.channel.message;
+
+import com.asyncapi.bindings.MessageBindingsDeserializer;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.json.JsonSchema;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.schemas.avro.v1._9_0.AvroSchema;
+import com.asyncapi.schemas.openapi.v3._0_0.OpenAPISchema;
+import com.asyncapi.v2._6_0.model.ExternalDocumentation;
+import com.asyncapi.v2._6_0.model.Tag;
+import com.asyncapi.v2._6_0.model.channel.message.Message;
+import com.asyncapi.v2._6_0.model.channel.message.MessageExample;
+import com.fasterxml.jackson.core.JacksonException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.*;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.JsonNodeType;
+
+import java.io.IOException;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Deserializes Message
+ *
+ * TODO: Fix this
+ */
+public class MessageDeserializer extends JsonDeserializer {
+
+ private static final List propertiesToIgnore = Arrays.asList(
+ "messageId",
+ "headers",
+ "payload",
+ "correlationId",
+ "schemaFormat",
+ "contentType",
+ "name",
+ "title",
+ "summary",
+ "description",
+ "tags",
+ "externalDocs",
+ "bindings",
+ "tags",
+ "examples",
+ "traits"
+ );
+
+ private String string(JsonNode node, ObjectCodec objectCodec) throws IOException {
+ if (node == null) {
+ return null;
+ }
+
+ try (JsonParser jsonParser = node.traverse(objectCodec)) {
+ return jsonParser.readValueAs(String.class);
+ }
+ }
+
+ private Object headers(JsonNode node, ObjectCodec objectCodec, DeserializationContext deserializationContext) throws IOException {
+ if (node == null) {
+ return null;
+ }
+
+ try (JsonParser jsonParser = node.traverse(objectCodec)) {
+ MessageHeadersDeserializer deserializer = new MessageHeadersDeserializer();
+
+ return deserializer.deserialize(jsonParser, deserializationContext);
+ }
+ }
+
+ private Object correlationId(JsonNode node, ObjectCodec objectCodec, DeserializationContext deserializationContext) throws IOException {
+ if (node == null) {
+ return null;
+ }
+
+ try (JsonParser jsonParser = node.traverse(objectCodec)) {
+ MessageCorrelationIdDeserializer deserializer = new MessageCorrelationIdDeserializer();
+
+ return deserializer.deserialize(jsonParser, deserializationContext);
+ }
+ }
+
+ private List tags(JsonNode node, ObjectCodec objectCodec) throws IOException {
+ if (node == null) {
+ return null;
+ }
+
+ try (JsonParser jsonParser = node.traverse(objectCodec)) {
+ return jsonParser.readValueAs(new TypeReference>() {});
+ }
+ }
+
+ private ExternalDocumentation externalDocs(JsonNode node, ObjectCodec objectCodec) throws IOException {
+ if (node == null) {
+ return null;
+ }
+
+ try (JsonParser jsonParser = node.traverse(objectCodec)) {
+ return jsonParser.readValueAs(ExternalDocumentation.class);
+ }
+ }
+
+ private Map bindings(JsonNode node, ObjectCodec objectCodec, DeserializationContext deserializationContext) throws IOException {
+ if (node == null) {
+ return null;
+ }
+
+ try (JsonParser jsonParser = node.traverse(objectCodec)) {
+ MessageBindingsDeserializer deserializer = new MessageBindingsDeserializer();
+
+ return deserializer.deserialize(jsonParser, deserializationContext);
+ }
+ }
+
+ private List examples(JsonNode node, ObjectCodec objectCodec) throws IOException {
+ if (node == null) {
+ return null;
+ }
+
+ try (JsonParser jsonParser = node.traverse(objectCodec)) {
+ return jsonParser.readValueAs(new TypeReference>() {});
+ }
+ }
+
+ private List traits(JsonNode node, ObjectCodec objectCodec, DeserializationContext deserializationContext) throws IOException {
+ if (node == null) {
+ return null;
+ }
+
+ try (JsonParser jsonParser = node.traverse(objectCodec)) {
+ MessageTraitsDeserializer deserializer = new MessageTraitsDeserializer();
+
+ return deserializer.deserialize(jsonParser, deserializationContext);
+ }
+ }
+
+ private Object payload(JsonNode messageNode, ObjectCodec objectCodec) throws IOException {
+ JsonNode payloadNode = messageNode.get("payload");
+ if (payloadNode == null) {
+ return null;
+ }
+
+ try (JsonParser jsonParser = payloadNode.traverse(objectCodec)) {
+ if (payloadNode.properties().size() == 1 && payloadNode.get("$ref") != null) {
+ return jsonParser.readValueAs(Reference.class);
+ }
+
+ JsonNode schemaFormatNode = messageNode.findValue("schemaFormat");
+ if (schemaFormatNode == null) {
+ return jsonParser.readValueAs(AsyncAPISchema.class);
+ }
+
+ Class> messageToDeserializeTo = AsyncAPISchema.class;
+ switch (schemaFormatNode.textValue()) {
+ case "application/schema+json;version=draft-07":
+ case "application/schema+yaml;version=draft-07": {
+ messageToDeserializeTo = JsonSchema.class;
+ break;
+ }
+ case "application/vnd.oai.openapi;version=3.0.0":
+ case "application/vnd.oai.openapi+json;version=3.0.0":
+ case "application/vnd.oai.openapi+yaml;version=3.0.0":
+ case "application/vnd.oai.openapi;version=3.0.1":
+ case "application/vnd.oai.openapi+json;version=3.0.1":
+ case "application/vnd.oai.openapi+yaml;version=3.0.1":
+ case "application/vnd.oai.openapi;version=3.0.2":
+ case "application/vnd.oai.openapi+json;version=3.0.2":
+ case "application/vnd.oai.openapi+yaml;version=3.0.2":
+ case "application/vnd.oai.openapi;version=3.0.3":
+ case "application/vnd.oai.openapi+json;version=3.0.3":
+ case "application/vnd.oai.openapi+yaml;version=3.0.3": {
+ messageToDeserializeTo = OpenAPISchema.class;
+ break;
+ }
+ case "application/vnd.apache.avro;version=1.9.0":
+ case "application/vnd.apache.avro+json;version=1.9.0":
+ case "application/vnd.apache.avro+yaml;version=1.9.0":
+ case "application/vnd.apache.avro;version=1.9.1":
+ case "application/vnd.apache.avro+json;version=1.9.1":
+ case "application/vnd.apache.avro+yaml;version=1.9.1":
+ case "application/vnd.apache.avro;version=1.9.2":
+ case "application/vnd.apache.avro+json;version=1.9.2":
+ case "application/vnd.apache.avro+yaml;version=1.9.2":
+ case "application/vnd.apache.avro;version=1.10.0":
+ case "application/vnd.apache.avro+json;version=1.10.0":
+ case "application/vnd.apache.avro+yaml;version=1.10.0":
+ case "application/vnd.apache.avro;version=1.10.1":
+ case "application/vnd.apache.avro+json;version=1.10.1":
+ case "application/vnd.apache.avro+yaml;version=1.10.1":
+ case "application/vnd.apache.avro;version=1.10.2":
+ case "application/vnd.apache.avro+json;version=1.10.2":
+ case "application/vnd.apache.avro+yaml;version=1.10.2":
+ case "application/vnd.apache.avro;version=1.11.0":
+ case "application/vnd.apache.avro+json;version=1.11.0":
+ case "application/vnd.apache.avro+yaml;version=1.11.0":
+ case "application/vnd.apache.avro;version=1.11.1":
+ case "application/vnd.apache.avro+json;version=1.11.1":
+ case "application/vnd.apache.avro+yaml;version=1.11.1": {
+ messageToDeserializeTo = AvroSchema.class;
+ break;
+ }
+ }
+
+ return jsonParser.readValueAs(messageToDeserializeTo);
+ }
+ }
+
+ private Object chooseKnownPojo(JsonNode jsonNode, final ObjectCodec objectCodec) throws IOException {
+ try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
+ JsonNodeType nodeType = jsonNode.getNodeType();
+
+ switch (nodeType) {
+ case ARRAY:
+ return readAsList((ArrayNode) jsonNode, objectCodec);
+ case BOOLEAN:
+ return jsonNode.asBoolean();
+ case NUMBER:
+ return jsonParser.readValueAs(Number.class);
+ case OBJECT:
+ return jsonParser.readValueAs(Object.class);
+ case STRING:
+ return jsonParser.readValueAs(String.class);
+ case BINARY:
+ case POJO:
+ case MISSING:
+ case NULL:
+ return null;
+ }
+
+ return null;
+ }
+ }
+
+ private List readAsList(ArrayNode arrayNode, ObjectCodec objectCodec) throws IOException {
+ List list = new ArrayList<>();
+ for (JsonNode childNode : arrayNode) {
+ list.add(chooseKnownPojo(childNode, objectCodec));
+ }
+
+ return list;
+ }
+
+ private Map extensionFields(JsonNode messageNode, ObjectCodec objectCodec) throws IOException {
+ if (messageNode == null) {
+ return null;
+ }
+
+ Map extensionFields = new HashMap<>();
+ List> unknownProperties = messageNode.properties().stream()
+ .filter(property -> !propertiesToIgnore.contains(property.getKey()))
+ .collect(Collectors.toList());
+
+ for (Map.Entry property: unknownProperties) {
+ if (ExtendableObject.extensionPropertyNamePattern.matcher(property.getKey()).matches()) {
+ extensionFields.put(property.getKey(), chooseKnownPojo(property.getValue(), objectCodec));
+ } else {
+ throw new JsonMappingException(String.format("\"%s\" is not valid extension property (through reference chain: com.asyncapi.v2._6_0.model.channel.message.Message[\"%s\"])", property.getKey(), property.getKey()));
+ }
+ }
+
+ if (extensionFields.isEmpty()) {
+ return null;
+ }
+
+ return extensionFields;
+ }
+
+ @Override
+ public Message deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JacksonException {
+ ObjectCodec objectCodec = jsonParser.getCodec();
+ JsonNode messageNode = objectCodec.readTree(jsonParser);
+
+ Message message = Message.builder()
+ .messageId(string(messageNode.get("messageId"), objectCodec))
+ .headers(headers(messageNode.get("headers"), objectCodec, deserializationContext))
+ .payload(payload(messageNode, objectCodec))
+ .correlationId(correlationId(messageNode.get("correlationId"), objectCodec, deserializationContext))
+ .schemaFormat(string(messageNode.get("schemaFormat"), objectCodec))
+ .contentType(string(messageNode.get("contentType"), objectCodec))
+ .name(string(messageNode.get("name"), objectCodec))
+ .title(string(messageNode.get("title"), objectCodec))
+ .summary(string(messageNode.get("summary"), objectCodec))
+ .description(string(messageNode.get("description"), objectCodec))
+ .tags(tags(messageNode.get("tags"), objectCodec))
+ .externalDocs(externalDocs(messageNode.get("externalDocs"), objectCodec))
+ .bindings(bindings(messageNode.get("bindings"), objectCodec, deserializationContext))
+ .examples(examples(messageNode.get("examples"), objectCodec))
+ .traits(traits(messageNode.get("traits"), objectCodec, deserializationContext))
+ .build();
+
+ message.setExtensionFields(extensionFields(messageNode, objectCodec));
+ return message;
+ }
+
+}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageHeadersDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageHeadersDeserializer.java
index 0fa2e91a..c4c2627a 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageHeadersDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageHeadersDeserializer.java
@@ -1,19 +1,19 @@
package com.asyncapi.v2._6_0.jackson.model.channel.message;
-import com.asyncapi.v2.Reference;
-import com.asyncapi.v2.schema.Schema;
-import com.asyncapi.v2.jackson.ReferenceOrObjectDeserializer;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.serde.ReferenceOrObjectDeserializer;
/**
* Serializes message traits list.
*
* @author Pavel Bodiachevskii
*/
-public class MessageHeadersDeserializer extends ReferenceOrObjectDeserializer {
+public class MessageHeadersDeserializer extends ReferenceOrObjectDeserializer {
@Override
- public Class objectTypeClass() {
- return Schema.class;
+ public Class objectTypeClass() {
+ return AsyncAPISchema.class;
}
public Class> referenceClass() {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessagePayloadDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessagePayloadDeserializer.java
deleted file mode 100644
index f1cdec13..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessagePayloadDeserializer.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.asyncapi.v2._6_0.jackson.model.channel.message;
-
-import com.asyncapi.v2.schema.Schema;
-import com.asyncapi.v2.jackson.ObjectDeserializer;
-
-/**
- * Serializes message traits list.
- *
- * @author Pavel Bodiachevskii
- */
-public class MessagePayloadDeserializer extends ObjectDeserializer {
-
- @Override
- public Class objectTypeClass() {
- return Schema.class;
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageTraitsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageTraitsDeserializer.java
index 14099ba2..fb969fc3 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageTraitsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessageTraitsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.channel.message;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.channel.message.MessageTrait;
-import com.asyncapi.v2.jackson.ListOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.ListOfReferencesOrObjectsDeserializer;
/**
* Serializes message traits list.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessagesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessagesDeserializer.java
index 12643960..1cbe7c27 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessagesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/message/MessagesDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.channel.message;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.channel.message.Message;
-import com.asyncapi.v2.jackson.ListOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.ListOfReferencesOrObjectsDeserializer;
/**
* Serializes messages list.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/operation/OperationMessageDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/operation/OperationMessageDeserializer.java
index cccadb79..c603c6cc 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/operation/OperationMessageDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/operation/OperationMessageDeserializer.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._6_0.jackson.model.channel.operation;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.channel.message.Message;
import com.asyncapi.v2._6_0.model.channel.message.OneOfMessages;
import com.fasterxml.jackson.core.JsonParser;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/operation/OperationTraitsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/operation/OperationTraitsDeserializer.java
index 73df461f..4c11a6d4 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/operation/OperationTraitsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/channel/operation/OperationTraitsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.channel.operation;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.channel.operation.OperationTrait;
-import com.asyncapi.v2.jackson.ListOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.ListOfReferencesOrObjectsDeserializer;
/**
* Serializes operation traits list.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsCorrelationIdsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsCorrelationIdsDeserializer.java
index 8a371a57..840876e3 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsCorrelationIdsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsCorrelationIdsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.component;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.channel.message.CorrelationId;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsCorrelationIdsDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsMessageTraitsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsMessageTraitsDeserializer.java
index 4b74a8f7..46d2b5d9 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsMessageTraitsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsMessageTraitsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.component;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.channel.message.MessageTrait;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsMessageTraitsDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsMessagesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsMessagesDeserializer.java
index 17e779e2..c3e56b49 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsMessagesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsMessagesDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.component;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.channel.message.Message;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsMessagesDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsOperationTraitsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsOperationTraitsDeserializer.java
index f9f33397..e6cf90da 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsOperationTraitsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsOperationTraitsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.component;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.channel.operation.OperationTrait;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsOperationTraitsDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsParametersDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsParametersDeserializer.java
index e11cc46f..b6ea590a 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsParametersDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsParametersDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.component;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.channel.Parameter;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsParametersDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsSchemasDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsSchemasDeserializer.java
index d6dd235c..e24fc30e 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsSchemasDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsSchemasDeserializer.java
@@ -1,19 +1,95 @@
package com.asyncapi.v2._6_0.jackson.model.component;
-import com.asyncapi.v2.Reference;
-import com.asyncapi.v2.schema.Schema;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.schemas.asyncapi.multiformat.MultiFormatSchema;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.ObjectCodec;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonNode;
+import org.jetbrains.annotations.NotNull;
-public class ComponentsSchemasDeserializer extends MapOfReferencesOrObjectsDeserializer {
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
- @Override
- public Class objectTypeClass() {
- return Schema.class;
+public class ComponentsSchemasDeserializer extends JsonDeserializer {
+
+ public Class objectTypeClass() {
+ return AsyncAPISchema.class;
}
- @Override
public Class> referenceClass() {
return Reference.class;
}
+ @Override
+ public Map deserialize(JsonParser jsonParser,
+ DeserializationContext deserializationContext
+ ) throws IOException, JsonProcessingException {
+ ObjectCodec objectCodec = jsonParser.getCodec();
+ JsonNode map = objectCodec.readTree(jsonParser);
+
+ Map parameters = new HashMap<>();
+
+ map.fieldNames().forEachRemaining(
+ fieldName -> {
+ /*
+ Problem:
+ Both, Reference class and Schema class have $ref field.
+ So, this is only reason why I receive next exception:
+ "com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
+ Unrecognized field "title" (class com.asyncapi.v2._6_0.model.Reference),
+ not marked as ignorable (one known property: "$ref"])"
+ in case when Schema contains $ref.
+ Solution:
+ Try to deserialize reference. In case of exception, try to deserialize it as given ObjectType. In case of
+ one more exception, throw it.
+ TODO: Think how to improve.
+ */
+ try {
+ parameters.put(fieldName, chooseKnownPojo(map.get(fieldName), objectCodec));
+ } catch (IOException ignore) {
+ try {
+ parameters.put(fieldName, readAsObject(map.get(fieldName), objectCodec));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ );
+
+ return parameters;
+ }
+
+ private Object chooseKnownPojo(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
+ JsonNode ref = jsonNode.get("$ref");
+ try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
+ if (isMultiFormatSchema(jsonNode)) {
+ return jsonParser.readValueAs(MultiFormatSchema.class);
+ }
+
+ if (ref != null) {
+ return jsonParser.readValueAs(referenceClass());
+ } else {
+ return jsonParser.readValueAs(objectTypeClass());
+ }
+ }
+ }
+
+ private Object readAsObject(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
+ try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
+ return jsonParser.readValueAs(objectTypeClass());
+ }
+ }
+
+ private boolean isMultiFormatSchema(@NotNull JsonNode jsonNode) {
+ JsonNode schemaFormat = jsonNode.get("schemaFormat");
+ JsonNode schema = jsonNode.get("schema");
+
+ return (schemaFormat != null) && (schema != null);
+ }
+
}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsSecuritySchemesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsSecuritySchemesDeserializer.java
index 8b045902..363e63c8 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsSecuritySchemesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsSecuritySchemesDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.component;
-import com.asyncapi.v2.Reference;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
-import com.asyncapi.v2.security_scheme.SecurityScheme;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.schemas.asyncapi.security.v2.SecurityScheme;
public class ComponentsSecuritySchemesDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsServerVariablesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsServerVariablesDeserializer.java
index 1b056b6f..b13030af 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsServerVariablesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsServerVariablesDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.component;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.server.ServerVariable;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsServerVariablesDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsServersDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsServersDeserializer.java
index b7a7c2fc..4e1bedb4 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsServersDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/component/ComponentsServersDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.component;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.server.Server;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsServersDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/schema/SchemaDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/schema/SchemaDeserializer.java
index 81940260..ab926508 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/schema/SchemaDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/schema/SchemaDeserializer.java
@@ -1,19 +1,19 @@
package com.asyncapi.v2._6_0.jackson.model.schema;
-import com.asyncapi.v2.Reference;
-import com.asyncapi.v2.schema.Schema;
-import com.asyncapi.v2.jackson.ReferenceOrObjectDeserializer;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.serde.ReferenceOrObjectDeserializer;
/**
* Serializes component servers map.
*
* @author Pavel Bodiachevskii
*/
-public class SchemaDeserializer extends ReferenceOrObjectDeserializer {
+public class SchemaDeserializer extends ReferenceOrObjectDeserializer {
@Override
- public Class objectTypeClass() {
- return Schema.class;
+ public Class objectTypeClass() {
+ return AsyncAPISchema.class;
}
public Class> referenceClass() {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/schema/SchemasAdditionalPropertiesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/schema/SchemasAdditionalPropertiesDeserializer.java
deleted file mode 100644
index 8cc6e9ec..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/schema/SchemasAdditionalPropertiesDeserializer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.asyncapi.v2._6_0.jackson.model.schema;
-
-import com.asyncapi.v2.schema.Schema;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonNode;
-
-import java.io.IOException;
-
-/**
- * @author Guillaume LAMIRAND (guillaume.lamirand at graviteesource.com)
- * @author GraviteeSource Team
- */
-public class SchemasAdditionalPropertiesDeserializer extends JsonDeserializer {
-
- @Override
- public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
- ObjectCodec objectCodec = p.getCodec();
- JsonNode node = objectCodec.readTree(p);
-
- return chooseKnownPojo(node, objectCodec);
- }
-
- private Object chooseKnownPojo(JsonNode jsonNode, final ObjectCodec objectCodec) throws IOException {
- try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
- if (jsonNode.isBoolean()) {
- return jsonNode.asBoolean();
- } else {
- return jsonParser.readValueAs(Schema.class);
- }
- }
- }
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/server/ServerVariablesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/server/ServerVariablesDeserializer.java
index 9611dfad..2c0789e9 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/server/ServerVariablesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/server/ServerVariablesDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.server;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.server.ServerVariable;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
/**
* Serializes {@link com.asyncapi.v2._6_0.model.server.Server} variables map.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/server/ServersDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/server/ServersDeserializer.java
index 17053961..7db29e83 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/server/ServersDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/jackson/model/server/ServersDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v2._6_0.jackson.model.server;
-import com.asyncapi.v2.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.server.Server;
-import com.asyncapi.v2.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
/**
* Serializes component servers map.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/AsyncAPI.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/AsyncAPI.java
index 017409dd..3fbe507a 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/AsyncAPI.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/AsyncAPI.java
@@ -1,6 +1,7 @@
package com.asyncapi.v2._6_0.model;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.jackson.model.server.ServersDeserializer;
import com.asyncapi.v2._6_0.model.channel.ChannelItem;
import com.asyncapi.v2._6_0.model.component.Components;
@@ -48,7 +49,7 @@ public class AsyncAPI extends ExtendableObject {
*/
@NotNull
@Builder.Default
- private final String asyncapi = "2.6.0";
+ private String asyncapi = "2.6.0";
/**
* Identifier of the application the AsyncAPI document is defining.
@@ -76,7 +77,7 @@ public class AsyncAPI extends ExtendableObject {
* MUST BE:
*
* {@link Server}
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
*
*/
@Nullable
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/ExternalDocumentation.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/ExternalDocumentation.java
index d9023f23..70f8248e 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/ExternalDocumentation.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/ExternalDocumentation.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._6_0.model;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/Tag.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/Tag.java
index f441e6ab..69f4ee51 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/Tag.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/Tag.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._6_0.model;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
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
index 57fcad88..f5f6873a 100644
--- 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
@@ -1,10 +1,11 @@
package com.asyncapi.v2._6_0.model.channel;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.jackson.model.channel.ChannelParametersDeserializer;
import com.asyncapi.v2._6_0.model.channel.operation.Operation;
-import com.asyncapi.v2.binding.channel.ChannelBinding;
-import com.asyncapi.v2.jackson.binding.channel.ChannelBindingsDeserializer;
+import com.asyncapi.bindings.ChannelBinding;
+import com.asyncapi.bindings.ChannelBindingsDeserializer;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
@@ -73,7 +74,7 @@ public class ChannelItem extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link com.asyncapi.v2._6_0.model.channel.Parameter}
*
*/
@@ -86,7 +87,7 @@ public class ChannelItem extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link ChannelBinding}
*
*/
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/Parameter.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/Parameter.java
index e14cc2d9..d97e901d 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/Parameter.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/Parameter.java
@@ -1,6 +1,8 @@
package com.asyncapi.v2._6_0.model.channel;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
import com.asyncapi.v2._6_0.jackson.model.schema.SchemaDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
@@ -35,8 +37,8 @@ public class Parameter extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
- * {@link com.asyncapi.v2.schema.Schema}
+ * {@link Reference}
+ * {@link AsyncAPISchema}
*
*/
@Nullable
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/CorrelationId.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/CorrelationId.java
index c88a7415..3cf82e4b 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/CorrelationId.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/CorrelationId.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._6_0.model.channel.message;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/Message.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/Message.java
index 6db494a8..b41da3c0 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/Message.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/Message.java
@@ -1,20 +1,18 @@
package com.asyncapi.v2._6_0.model.channel.message;
-import com.asyncapi.v2.ExtendableObject;
-import com.asyncapi.v2._6_0.jackson.model.channel.message.MessageCorrelationIdDeserializer;
-import com.asyncapi.v2._6_0.jackson.model.channel.message.MessageHeadersDeserializer;
-import com.asyncapi.v2._6_0.jackson.model.channel.message.MessagePayloadDeserializer;
-import com.asyncapi.v2._6_0.jackson.model.channel.message.MessageTraitsDeserializer;
+import com.asyncapi.bindings.MessageBinding;
+import com.asyncapi.bindings.MessageBindingsDeserializer;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.json.JsonSchema;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.schemas.avro.v1._9_0.AvroSchema;
+import com.asyncapi.schemas.openapi.v3._0_0.OpenAPISchema;
+import com.asyncapi.v2._6_0.jackson.model.channel.message.*;
import com.asyncapi.v2._6_0.model.ExternalDocumentation;
import com.asyncapi.v2._6_0.model.Tag;
-import com.asyncapi.v2.binding.message.MessageBinding;
-import com.asyncapi.v2.jackson.binding.message.MessageBindingsDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
+import lombok.*;
import org.jetbrains.annotations.Nullable;
import java.util.List;
@@ -32,6 +30,7 @@
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
+@JsonDeserialize(using = MessageDeserializer.class)
public class Message extends ExtendableObject {
/**
@@ -50,8 +49,8 @@ public class Message extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.schema.Schema}
- * {@link com.asyncapi.v2.Reference}
+ * {@link AsyncAPISchema}
+ * {@link Reference}
*
*/
@Nullable
@@ -63,13 +62,16 @@ public class Message extends ExtendableObject {
* It must match the schema format, including encoding type - e.g Avro should be inlined as either a YAML or JSON object
* NOT a string to be parsed as YAML or JSON.
*
- * WILL BE:
+ * MUST BE:
*
- * {@link com.asyncapi.v2.schema.Schema}
+ * {@link AsyncAPISchema}
+ * {@link OpenAPISchema}
+ * {@link JsonSchema}
+ * {@link AvroSchema}
+ * {@link Reference}
*
*/
@Nullable
- @JsonDeserialize(using = MessagePayloadDeserializer.class)
private Object payload;
/**
@@ -78,7 +80,7 @@ public class Message extends ExtendableObject {
* MUST BE:
*
* {@link com.asyncapi.v2._6_0.model.channel.message.CorrelationId}
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
*
*/
@Nullable
@@ -87,7 +89,7 @@ public class Message extends ExtendableObject {
/**
* A string containing the name of the schema format used to define the message payload.
- * If omitted, implementations should parse the payload as a {@link com.asyncapi.v2.schema.Schema} object. When the payload is defined using a
+ * If omitted, implementations should parse the payload as a {@link AsyncAPISchema} object. When the payload is defined using a
* $ref to a remote file, it is RECOMMENDED the schema format includes the file encoding type to allow implementations
* to parse the file correctly. E.g., adding +yaml if content type is application/vnd.apache.avro results in
* application/vnd.apache.avro+yaml.
@@ -149,7 +151,7 @@ public class Message extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link MessageBinding}
*
*/
@@ -170,7 +172,7 @@ public class Message extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link com.asyncapi.v2._6_0.model.channel.message.MessageTrait}
*
*/
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/MessageExample.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/MessageExample.java
index 9d461a0a..04a66349 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/MessageExample.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/MessageExample.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._6_0.model.channel.message;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/MessageTrait.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/MessageTrait.java
index e4fba669..2cda480b 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/MessageTrait.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/MessageTrait.java
@@ -1,12 +1,14 @@
package com.asyncapi.v2._6_0.model.channel.message;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.jackson.model.channel.message.MessageCorrelationIdDeserializer;
import com.asyncapi.v2._6_0.jackson.model.channel.message.MessageHeadersDeserializer;
import com.asyncapi.v2._6_0.model.ExternalDocumentation;
import com.asyncapi.v2._6_0.model.Tag;
-import com.asyncapi.v2.binding.message.MessageBinding;
-import com.asyncapi.v2.jackson.binding.message.MessageBindingsDeserializer;
+import com.asyncapi.bindings.MessageBinding;
+import com.asyncapi.bindings.MessageBindingsDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -54,8 +56,8 @@ public class MessageTrait extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.schema.Schema}
- * {@link com.asyncapi.v2.Reference}
+ * {@link AsyncAPISchema}
+ * {@link Reference}
*
*/
@Nullable
@@ -68,7 +70,7 @@ public class MessageTrait extends ExtendableObject {
* MUST BE:
*
* {@link com.asyncapi.v2._6_0.model.channel.message.CorrelationId}
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
*
*/
@Nullable
@@ -77,7 +79,7 @@ public class MessageTrait extends ExtendableObject {
/**
* A string containing the name of the schema format used to define the message payload.
- * If omitted, implementations should parse the payload as a {@link com.asyncapi.v2.schema.Schema} object. When the payload is defined using a
+ * If omitted, implementations should parse the payload as a {@link AsyncAPISchema} object. When the payload is defined using a
* $ref to a remote file, it is RECOMMENDED the schema format includes the file encoding type to allow implementations
* to parse the file correctly. E.g., adding +yaml if content type is application/vnd.apache.avro results in
* application/vnd.apache.avro+yaml.
@@ -139,7 +141,7 @@ public class MessageTrait extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link MessageBinding}
*
*/
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/OneOfMessages.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/OneOfMessages.java
index 4261338f..8a7eb3cc 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/OneOfMessages.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/message/OneOfMessages.java
@@ -1,5 +1,6 @@
package com.asyncapi.v2._6_0.model.channel.message;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.jackson.model.channel.message.MessagesDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
@@ -26,7 +27,7 @@ public class OneOfMessages {
* Given message MUST be one of provided messages.
*
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link com.asyncapi.v2._6_0.model.channel.message.Message}
*
*/
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/operation/Operation.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/operation/Operation.java
index 0a94bdb7..d9d891c2 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/operation/Operation.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/operation/Operation.java
@@ -1,12 +1,13 @@
package com.asyncapi.v2._6_0.model.channel.operation;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.jackson.model.channel.operation.OperationMessageDeserializer;
import com.asyncapi.v2._6_0.jackson.model.channel.operation.OperationTraitsDeserializer;
import com.asyncapi.v2._6_0.model.ExternalDocumentation;
import com.asyncapi.v2._6_0.model.Tag;
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import com.asyncapi.v2.jackson.binding.operation.OperationBindingsDeserializer;
+import com.asyncapi.bindings.OperationBinding;
+import com.asyncapi.bindings.OperationBindingsDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -87,7 +88,7 @@ public class Operation extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link OperationBinding}
*
*/
@@ -101,7 +102,7 @@ public class Operation extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link com.asyncapi.v2._6_0.model.channel.operation.OperationTrait}
*
*/
@@ -116,7 +117,7 @@ public class Operation extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link com.asyncapi.v2._6_0.model.channel.message.Message}
* {@link com.asyncapi.v2._6_0.model.channel.message.OneOfMessages}
*
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/operation/OperationTrait.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/operation/OperationTrait.java
index aee233b5..b231ac53 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/operation/OperationTrait.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/channel/operation/OperationTrait.java
@@ -1,10 +1,11 @@
package com.asyncapi.v2._6_0.model.channel.operation;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.model.ExternalDocumentation;
import com.asyncapi.v2._6_0.model.Tag;
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import com.asyncapi.v2.jackson.binding.operation.OperationBindingsDeserializer;
+import com.asyncapi.bindings.OperationBinding;
+import com.asyncapi.bindings.OperationBindingsDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -92,7 +93,7 @@ public class OperationTrait extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link OperationBinding}
*
*/
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/component/Components.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/component/Components.java
index 99b5ec1a..d032f645 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/component/Components.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/component/Components.java
@@ -1,6 +1,9 @@
package com.asyncapi.v2._6_0.model.component;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.schemas.asyncapi.multiformat.MultiFormatSchema;
import com.asyncapi.v2._6_0.jackson.model.component.ComponentsCorrelationIdsDeserializer;
import com.asyncapi.v2._6_0.jackson.model.component.ComponentsMessageTraitsDeserializer;
import com.asyncapi.v2._6_0.jackson.model.component.ComponentsMessagesDeserializer;
@@ -11,15 +14,15 @@
import com.asyncapi.v2._6_0.jackson.model.component.ComponentsServerVariablesDeserializer;
import com.asyncapi.v2._6_0.jackson.model.component.ComponentsServersDeserializer;
import com.asyncapi.v2._6_0.model.channel.ChannelItem;
-import com.asyncapi.v2.binding.channel.ChannelBinding;
-import com.asyncapi.v2.binding.message.MessageBinding;
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import com.asyncapi.v2.binding.server.ServerBinding;
-import com.asyncapi.v2.jackson.binding.channel.ChannelBindingsDeserializer;
-import com.asyncapi.v2.jackson.binding.message.MessageBindingsDeserializer;
-import com.asyncapi.v2.jackson.binding.operation.OperationBindingsDeserializer;
-import com.asyncapi.v2.jackson.binding.server.ServerBindingsDeserializer;
-import com.asyncapi.v2.security_scheme.SecurityScheme;
+import com.asyncapi.bindings.ChannelBinding;
+import com.asyncapi.bindings.MessageBinding;
+import com.asyncapi.bindings.OperationBinding;
+import com.asyncapi.bindings.ServerBinding;
+import com.asyncapi.bindings.ChannelBindingsDeserializer;
+import com.asyncapi.bindings.MessageBindingsDeserializer;
+import com.asyncapi.bindings.OperationBindingsDeserializer;
+import com.asyncapi.bindings.ServerBindingsDeserializer;
+import com.asyncapi.schemas.asyncapi.security.v2.SecurityScheme;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -51,8 +54,9 @@ public class Components extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.schema.Schema}
- * {@link com.asyncapi.v2.Reference}
+ * {@link AsyncAPISchema}
+ * {@link MultiFormatSchema}
+ * {@link Reference}
*
*/
@Nullable
@@ -65,7 +69,7 @@ public class Components extends ExtendableObject {
* MUST BE:
*
* {@link com.asyncapi.v2._6_0.model.server.Server}
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
*
*/
@Nullable
@@ -78,7 +82,7 @@ public class Components extends ExtendableObject {
* MUST BE:
*
* {@link com.asyncapi.v2._6_0.model.server.ServerVariable}
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
*
*/
@Nullable
@@ -96,7 +100,7 @@ public class Components extends ExtendableObject {
* MUST BE:
*
* {@link com.asyncapi.v2._6_0.model.channel.message.Message}
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
*
*/
@Nullable
@@ -109,7 +113,7 @@ public class Components extends ExtendableObject {
* MUST BE:
*
* {@link SecurityScheme}
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
*
*/
@Nullable
@@ -121,7 +125,7 @@ public class Components extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link com.asyncapi.v2._6_0.model.channel.Parameter}
*
*/
@@ -134,7 +138,7 @@ public class Components extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link com.asyncapi.v2._6_0.model.channel.message.CorrelationId}
*
*/
@@ -147,7 +151,7 @@ public class Components extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link com.asyncapi.v2._6_0.model.channel.operation.OperationTrait}
*
*/
@@ -160,7 +164,7 @@ public class Components extends ExtendableObject {
*
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link com.asyncapi.v2._6_0.model.channel.message.MessageTrait}
*
*/
@@ -172,7 +176,7 @@ public class Components extends ExtendableObject {
* An object to hold reusable {@link ServerBinding} Objects.
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link ServerBinding}
*
*/
@@ -184,7 +188,7 @@ public class Components extends ExtendableObject {
* An object to hold reusable {@link ChannelBinding} Objects.
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link ChannelBinding}
*
*/
@@ -196,7 +200,7 @@ public class Components extends ExtendableObject {
* An object to hold reusable {@link OperationBinding} Objects.
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link OperationBinding}
*
*/
@@ -208,7 +212,7 @@ public class Components extends ExtendableObject {
* An object to hold reusable {@link MessageBinding} Objects.
* MUST BE:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link MessageBinding}
*
*/
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/info/Contact.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/info/Contact.java
index 0967dc56..67805e12 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/info/Contact.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/info/Contact.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._6_0.model.info;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/info/Info.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/info/Info.java
index 0d659fa6..c9d54c76 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/info/Info.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/info/Info.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._6_0.model.info;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/info/License.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/info/License.java
index aa38568a..21c5cd63 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/info/License.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/info/License.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._6_0.model.info;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/server/Server.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/server/Server.java
index 21e2ad1e..a29f727b 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/server/Server.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/server/Server.java
@@ -1,10 +1,11 @@
package com.asyncapi.v2._6_0.model.server;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v2._6_0.jackson.model.server.ServerVariablesDeserializer;
import com.asyncapi.v2._6_0.model.Tag;
-import com.asyncapi.v2.binding.server.ServerBinding;
-import com.asyncapi.v2.jackson.binding.server.ServerBindingsDeserializer;
+import com.asyncapi.bindings.ServerBinding;
+import com.asyncapi.bindings.ServerBindingsDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
@@ -73,7 +74,7 @@ public class Server extends ExtendableObject {
*
* MUST be one of:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link com.asyncapi.v2._6_0.model.server.ServerVariable}
*
*/
@@ -107,7 +108,7 @@ public class Server extends ExtendableObject {
*
* MUST be one of:
*
- * {@link com.asyncapi.v2.Reference}
+ * {@link Reference}
* {@link ServerBinding}
*
*/
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/server/ServerVariable.java b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/server/ServerVariable.java
index 368b7a0f..b63eb655 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/server/ServerVariable.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v2/_6_0/model/server/ServerVariable.java
@@ -1,6 +1,6 @@
package com.asyncapi.v2._6_0.model.server;
-import com.asyncapi.v2.ExtendableObject;
+import com.asyncapi.schemas.asyncapi.ExtendableObject;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ChannelBinding.java
deleted file mode 100644
index 90d9c6fc..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ChannelBinding.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.asyncapi.v2.binding.channel;
-
-import com.asyncapi.v2.ExtendableObject;
-import lombok.EqualsAndHashCode;
-
-/**
- * Describes AsyncAPI channel binding.
- *
- * @author Pavel Bodiachevskii
- */
-@EqualsAndHashCode(callSuper = true)
-public class ChannelBinding extends ExtendableObject {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/AMQPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/AMQPChannelBinding.java
deleted file mode 100644
index 616b92ba..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/AMQPChannelBinding.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.asyncapi.v2.binding.channel.amqp;
-
-import com.asyncapi.v2.binding.channel.ChannelBinding;
-import com.asyncapi.v2.binding.channel.amqp.exchange.AMQPChannelExchangeProperties;
-import com.asyncapi.v2.binding.channel.amqp.queue.AMQPChannelQueueProperties;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * 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)
-@JsonClassDescription("Describes AMQP 0-9-1 channel binding.")
-public class AMQPChannelBinding extends ChannelBinding {
-
- /**
- * Defines what type of channel is it. Can be either queue or routingKey (default).
- */
- @NotNull
- @Builder.Default
- @javax.validation.constraints.NotNull
- @JsonProperty(value = "is", required = true, defaultValue = "routingKey")
- @JsonPropertyDescription("Defines what type of channel is it. Can be either queue or routingKey (default).")
- private AMQPChannelType is = AMQPChannelType.ROUTING_KEY;
-
- /**
- * When is=routingKey, this object defines the exchange properties.
- */
- @Nullable
- @JsonProperty("exchange")
- @JsonPropertyDescription("When is=routingKey, this object defines the exchange properties.")
- private AMQPChannelExchangeProperties exchange;
-
- /**
- * When is=queue, this object defines the queue properties.
- */
- @Nullable
- @JsonProperty("queue")
- @JsonPropertyDescription("When is=queue, this object defines the queue properties.")
- private AMQPChannelQueueProperties queue;
-
- @Nullable
- @Builder.Default
- @JsonProperty(value = "bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private final String bindingVersion = "0.2.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/AMQPChannelType.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/AMQPChannelType.java
deleted file mode 100644
index 82d13019..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/AMQPChannelType.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.asyncapi.v2.binding.channel.amqp;
-
-import com.fasterxml.jackson.annotation.JsonAlias;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-/**
- * Describes AMQP 0-9-1 channel type.
- *
- * Contains information about the type of channel in AMQP.
- *
- * @version 0.2.0
- * @see AMQP channel binding
- * @author Pavel Bodiachevskii
- */
-public enum AMQPChannelType {
-
- @JsonProperty("queue")
- QUEUE,
-
- @JsonProperty("routingKey")
- @JsonAlias("routingKey")
- ROUTING_KEY
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/exchange/AMQPChannelExchangeProperties.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/exchange/AMQPChannelExchangeProperties.java
deleted file mode 100644
index 6b07844d..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/exchange/AMQPChannelExchangeProperties.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.asyncapi.v2.binding.channel.amqp.exchange;
-
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes AMQP 0-9-1 channel exchange properties.
- *
- * Contains information about the channel exchange properties in AMQP.
- *
- * @version 0.2.0
- * @see AMQP channel binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode
-@JsonClassDescription("Describes AMQP 0-9-1 channel exchange properties.")
-public class AMQPChannelExchangeProperties {
-
- /**
- * The name of the exchange. It MUST NOT exceed 255 characters long.
- */
- @Nullable
- @javax.validation.constraints.Size(
- max = 255,
- message = "Exchange name must not exceed 255 characters long."
- )
- @JsonProperty("name")
- @JsonPropertyDescription("The name of the exchange. It MUST NOT exceed 255 characters long.")
- private String name;
-
- /**
- * The type of the exchange. Can be either topic, direct, fanout, default or headers.
- */
- @Nullable
- @JsonProperty("type")
- @JsonPropertyDescription("The type of the exchange. Can be either topic, direct, fanout, default or headers.")
- private AMQPChannelExchangeType type;
-
- /**
- * Whether the exchange should survive broker restarts or not.
- */
- @Nullable
- @JsonProperty("durable")
- @JsonPropertyDescription("Whether the exchange should survive broker restarts or not.")
- private Boolean durable;
-
- /**
- * Whether the exchange should be deleted when the last queue is unbound from it.
- */
- @Nullable
- @JsonProperty("autoDelete")
- @JsonPropertyDescription("Whether the exchange should be deleted when the last queue is unbound from it.")
- private Boolean autoDelete;
-
- /**
- * The virtual host of the exchange. Defaults to /.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "vhost", defaultValue = "/")
- @JsonPropertyDescription("The virtual host of the exchange. Defaults to /.")
- private String vhost = "/";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/exchange/AMQPChannelExchangeType.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/exchange/AMQPChannelExchangeType.java
deleted file mode 100644
index 373cff20..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/exchange/AMQPChannelExchangeType.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.asyncapi.v2.binding.channel.amqp.exchange;
-
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-/**
- * Describes AMQP 0-9-1 channel exchange type.
- *
- * Contains information about the channel exchange type in AMQP.
- *
- * @version 0.2.0
- * @see AMQP channel binding
- * @author Pavel Bodiachevskii
- */
-@JsonClassDescription("Describes AMQP 0-9-1 channel exchange type.")
-public enum AMQPChannelExchangeType {
-
- @JsonProperty("topic")
- TOPIC,
-
- @JsonProperty("direct")
- DIRECT,
-
- @JsonProperty("fanout")
- FANOUT,
-
- @JsonProperty("default")
- DEFAULT,
-
- @JsonProperty("headers")
- HEADERS
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/queue/AMQPChannelQueueProperties.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/queue/AMQPChannelQueueProperties.java
deleted file mode 100644
index f3a1e09c..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp/queue/AMQPChannelQueueProperties.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package com.asyncapi.v2.binding.channel.amqp.queue;
-
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes AMQP 0-9-1 channel queue properties.
- *
- * Contains information about the queue exchange properties in AMQP.
- *
- * @version 0.2.0
- * @see AMQP channel binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode
-@JsonClassDescription("Describes AMQP 0-9-1 channel queue properties.")
-public class AMQPChannelQueueProperties {
-
- /**
- * The name of the queue. It MUST NOT exceed 255 characters long.
- */
- @Nullable
- @javax.validation.constraints.Size(
- max = 255,
- message = "Queue name must not exceed 255 characters long."
- )
- @JsonProperty("name")
- @JsonPropertyDescription("The name of the queue. It MUST NOT exceed 255 characters long.")
- private String name;
-
- /**
- * Whether the queue should survive broker restarts or not.
- */
- @Nullable
- @JsonProperty("durable")
- @JsonPropertyDescription("Whether the queue should survive broker restarts or not.")
- private Boolean durable;
-
- /**
- * Whether the queue should be used only by one connection or not.
- */
- @Nullable
- @JsonProperty("exclusive")
- @JsonPropertyDescription("Whether the queue should be used only by one connection or not.")
- private Boolean exclusive;
-
- /**
- * Whether the queue should be deleted when the last consumer unsubscribes.
- */
- @Nullable
- @JsonProperty("autoDelete")
- @JsonPropertyDescription("Whether the queue should be deleted when the last consumer unsubscribes.")
- private Boolean autoDelete;
-
- /**
- * The virtual host of the queue. Defaults to /.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "vhost", defaultValue = "/")
- @JsonPropertyDescription("The virtual host of the queue. Defaults to /.")
- private String vhost = "/";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp1/AMQP1ChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp1/AMQP1ChannelBinding.java
deleted file mode 100644
index c214aa4a..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/amqp1/AMQP1ChannelBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.channel.amqp1;
-
-import com.asyncapi.v2.binding.channel.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 1.0 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/binding/channel/anypointmq/AnypointMQChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/anypointmq/AnypointMQChannelBinding.java
deleted file mode 100644
index 790ef4c0..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/anypointmq/AnypointMQChannelBinding.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.asyncapi.v2.binding.channel.anypointmq;
-
-import com.asyncapi.v2.binding.channel.ChannelBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes Anypoint MQ channel binding.
- *
- * @version 0.0.1
- * @see Anypoint MQ channel binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes Anypoint MQ channel binding.")
-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.
- */
- @Nullable
- @JsonProperty("destination")
- @JsonPropertyDescription("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.")
- 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.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "destinationType", defaultValue = "queue")
- @JsonPropertyDescription("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.")
- private AnypointMQChannelDestinationType destinationType = AnypointMQChannelDestinationType.QUEUE;
-
- /**
- * The version of this binding.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.0.1";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/anypointmq/AnypointMQChannelDestinationType.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/anypointmq/AnypointMQChannelDestinationType.java
deleted file mode 100644
index 0571f156..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/anypointmq/AnypointMQChannelDestinationType.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.asyncapi.v2.binding.channel.anypointmq;
-
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-/**
- * Describes Anypoint MQ channel destination type.
- *
- * @version 0.0.1
- * @see Anypoint MQ channel binding
- * @author Pavel Bodiachevskii
- */
-@JsonClassDescription("Describes Anypoint MQ channel destination type.")
-public enum AnypointMQChannelDestinationType {
-
- @JsonProperty("exchange")
- EXCHANGE,
-
- @JsonProperty("queue")
- QUEUE,
-
- @JsonProperty("fifo-queue")
- FIFO_QUEUE
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/googlepubsub/GooglePubSubChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/googlepubsub/GooglePubSubChannelBinding.java
deleted file mode 100644
index 896a88b6..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/googlepubsub/GooglePubSubChannelBinding.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package com.asyncapi.v2.binding.channel.googlepubsub;
-
-import com.asyncapi.v2.binding.channel.ChannelBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Map;
-
-/**
- * Describes Google Cloud Pub/Sub channel binding.
- *
- * The Channel Bindings Object is used to describe the Google Cloud Pub/Sub specific Topic details with AsyncAPI.
- *
- * @version 0.1.0
- * @see Google Cloud Pub/Sub channel binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes Google Cloud Pub/Sub channel binding.")
-public class GooglePubSubChannelBinding extends ChannelBinding {
-
- /**
- * The Google Cloud Pub/Sub Topic name.
- */
- @NotNull
- @Builder.Default
- @javax.validation.constraints.NotNull
- @JsonProperty(value = "topic", required = true)
- @JsonPropertyDescription("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.)
- */
- @Nullable
- @JsonProperty("labels")
- @JsonPropertyDescription("An object of key-value pairs (These are used to categorize Cloud Resources like Cloud Pub/Sub Topics.)")
- private Map labels;
-
- /**
- * Indicates the minimum duration to retain a message after it is published to the topic (Must be a valid Duration .)
- */
- @Nullable
- @JsonProperty("messageRetentionDuration")
- @JsonPropertyDescription("Indicates the minimum duration to retain a message after it is published to the topic (Must be a valid https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#google.protobuf.Duration.)")
- private String messageRetentionDuration;
-
- /**
- * Policy constraining the set of Google Cloud Platform regions where messages published to the topic may be stored
- */
- @Nullable
- @JsonProperty("messageStoragePolicy")
- @JsonPropertyDescription("Policy constraining the set of Google Cloud Platform regions where messages published to the topic may be stored")
- private GooglePubSubChannelMessageStoragePolicy messageStoragePolicy;
-
- /**
- * Settings for validating messages published against a schema
- */
- @NotNull
- @Builder.Default
- @javax.validation.constraints.NotNull
- @JsonProperty(value = "schemaSettings", required = true)
- @JsonPropertyDescription("Settings for validating messages published against a schema")
- private GooglePubSubChannelSchemaSettings schemaSettings = new GooglePubSubChannelSchemaSettings();
-
- /**
- * The version of this binding.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/googlepubsub/GooglePubSubChannelMessageStoragePolicy.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/googlepubsub/GooglePubSubChannelMessageStoragePolicy.java
deleted file mode 100644
index 9e988335..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/googlepubsub/GooglePubSubChannelMessageStoragePolicy.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.asyncapi.v2.binding.channel.googlepubsub;
-
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.List;
-
-/**
- * Describes Google Cloud Pub/Sub MessageStoragePolicy.
- *
- * The Message Storage Policy Object is used to describe the Google Cloud Pub/Sub MessageStoragePolicy Object with AsyncAPI.
- *
- * @version 0.1.0
- * @see Google Cloud Pub/Sub channel binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode
-@JsonClassDescription("Describe the Google Cloud Pub/Sub MessageStoragePolicy")
-public class GooglePubSubChannelMessageStoragePolicy {
-
- /**
- * A list of IDs of GCP regions where messages that are published to the topic may be persisted in storage
- */
- @Nullable
- @JsonProperty("allowedPersistenceRegions")
- @JsonPropertyDescription("A list of IDs of GCP regions where messages that are published to the topic may be persisted in storage")
- private List allowedPersistenceRegions;
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/googlepubsub/GooglePubSubChannelSchemaSettings.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/googlepubsub/GooglePubSubChannelSchemaSettings.java
deleted file mode 100644
index 76e0fa79..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/googlepubsub/GooglePubSubChannelSchemaSettings.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package com.asyncapi.v2.binding.channel.googlepubsub;
-
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes Google Cloud Pub/Sub SchemaSettings.
- *
- * The Schema Settings Object is used to describe the Google Cloud Pub/Sub SchemaSettings Object with AsyncAPI.
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode
-@JsonClassDescription("Describe the Google Cloud Pub/Sub SchemaSettings")
-public class GooglePubSubChannelSchemaSettings {
-
- /**
- * The encoding of the message (Must be one of the possible Encoding values.)
- */
- @NotNull
- @Builder.Default
- @javax.validation.constraints.NotNull
- @JsonProperty(value = "encoding", required = true)
- @JsonPropertyDescription("The encoding of the message (Must be one of the possible https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics#encoding values.)")
- private String encoding = "";
-
- /**
- * The minimum (inclusive) revision allowed for validating messages
- */
- @Nullable
- @JsonProperty("firstRevisionId")
- @JsonPropertyDescription("The minimum (inclusive) revision allowed for validating messages")
- private String firstRevisionId;
-
- /**
- * The maximum (inclusive) revision allowed for validating messages
- */
- @Nullable
- @JsonProperty("lastRevisionId")
- @JsonPropertyDescription("The maximum (inclusive) revision allowed for validating messages")
- private String lastRevisionId;
-
- /**
- * The name of the schema that messages published should be validated against (The format is projects/{project}/schemas/{schema}.)
- */
- @NotNull
- @Builder.Default
- @javax.validation.constraints.NotNull
- @JsonProperty(value = "name", required = true)
- @JsonPropertyDescription("The name of the schema that messages published should be validated against (The format is projects/{project}/schemas/{schema}.)")
- private String name = "";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/http/HTTPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/http/HTTPChannelBinding.java
deleted file mode 100644
index 11465c10..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/http/HTTPChannelBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.channel.http;
-
-import com.asyncapi.v2.binding.channel.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 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/binding/channel/ibmmq/IBMMQChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ibmmq/IBMMQChannelBinding.java
deleted file mode 100644
index 47d14e4f..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ibmmq/IBMMQChannelBinding.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package com.asyncapi.v2.binding.channel.ibmmq;
-
-import com.asyncapi.v2.binding.channel.ChannelBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * 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 IBM MQ channel binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes IBM MQ channel binding.")
-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.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "destinationType", defaultValue = "topic")
- @JsonPropertyDescription("Defines the type of AsyncAPI channel.")
- private IBMMQChannelDestinationType destinationType = IBMMQChannelDestinationType.TOPIC;
-
- /**
- * REQUIRED if destinationType = queue
- *
- * queue and topic fields MUST NOT coexist within a channel binding
- */
- @Nullable
- @JsonProperty("queue")
- @JsonPropertyDescription("Defines the properties of a queue.")
- private IBMMQChannelQueueProperties queue;
-
- /**
- * Defines the properties of a topic.
- *
- * OPTIONAL if destinationType = topic
- *
- * queue and topic fields MUST NOT coexist within a channel binding.
- */
- @Nullable
- @JsonProperty("topic")
- @JsonPropertyDescription("Defines the properties of a topic.")
- private IBMMQChannelTopicProperties 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).
- */
- @Nullable
- @javax.validation.constraints.Min(
- value = 0,
- message = "Maximum length of the physical message (in bytes) must be greater or equals to 0"
- )
- @javax.validation.constraints.Max(
- value = 104857600,
- message = "Maximum length of the physical message (in bytes) must be lower or equals to 104857600"
- )
- @JsonProperty("maxMsgLength")
- @JsonPropertyDescription("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](https://www.ibm.com/support/knowledgecenter/SSFKSJ_latest/com.ibm.mq.ref.dev.doc/q097520_.html) in the IBM MQ Knowledge Center.")
- private Integer maxMsgLength;
-
- /**
- * The version of this binding.
- */
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ibmmq/IBMMQChannelDestinationType.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ibmmq/IBMMQChannelDestinationType.java
deleted file mode 100644
index 7b0d7058..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ibmmq/IBMMQChannelDestinationType.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.asyncapi.v2.binding.channel.ibmmq;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-/**
- * Describes IBM MQ channel destination type.
- *
- * @version 0.1.0
- * @see IBM MQ channel binding
- * @author Pavel Bodiachevskii
- */
-public enum IBMMQChannelDestinationType {
-
- @JsonProperty("topic")
- TOPIC,
-
- @JsonProperty("queue")
- QUEUE
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ibmmq/IBMMQChannelQueueProperties.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ibmmq/IBMMQChannelQueueProperties.java
deleted file mode 100644
index fa06b6a2..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ibmmq/IBMMQChannelQueueProperties.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.asyncapi.v2.binding.channel.ibmmq;
-
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes IBM MQ channel queue properties.
- *
- * @version 0.1.0
- * @see IBM MQ channel binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode
-@JsonClassDescription("Describes IBM MQ channel queue properties.")
-public class IBMMQChannelQueueProperties {
-
- /**
- * 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
- */
- @NotNull
- @javax.validation.constraints.NotNull
- @javax.validation.constraints.Size(
- max = 48,
- message = "Name of the IBM MQ queue must be less or equals to 48"
- )
- @Builder.Default
- @JsonProperty("objectName")
- @JsonPropertyDescription("Defines the name of the IBM MQ queue associated with the channel.")
- 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.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "isPartitioned", defaultValue = "false")
- @JsonPropertyDescription("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.")
- private Boolean isPartitioned = false;
-
- /**
- * Specifies if it is recommended to open the queue exclusively.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "exclusive", defaultValue = "false")
- @JsonPropertyDescription("Specifies if it is recommended to open the queue exclusively.")
- private Boolean exclusive = false;
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ibmmq/IBMMQChannelTopicProperties.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ibmmq/IBMMQChannelTopicProperties.java
deleted file mode 100644
index 7d3b54b4..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ibmmq/IBMMQChannelTopicProperties.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.asyncapi.v2.binding.channel.ibmmq;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes IBM MQ channel topic properties.
- *
- * @version 0.1.0
- * @see IBM MQ channel binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode
-public class IBMMQChannelTopicProperties {
-
- /**
- * 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
- */
- @Nullable
- @javax.validation.constraints.Max(
- value = 10240,
- message = "Maximum length of topic string must be lower or equals to 10240"
- )
- @JsonProperty("string")
- @JsonPropertyDescription("The value of the IBM MQ topic string to be used.")
- 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
- */
- @Nullable
- @javax.validation.constraints.Max(
- value = 48,
- message = "Maximum length of topic name must be lower or equals to 48"
- )
- @JsonProperty("objectName")
- @JsonPropertyDescription("The name of the IBM MQ topic object.")
- private String objectName;
-
- /**
- * Defines if the subscription may be durable.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "durablePermitted", defaultValue = "true")
- @JsonPropertyDescription("Defines if the subscription may be durable.")
- private Boolean durablePermitted = true;
-
- /**
- * Defines if the last message published will be made available to new subscriptions.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "lastMsgRetained", defaultValue = "false")
- @JsonPropertyDescription("Defines if the last message published will be made available to new subscriptions.")
- private Boolean lastMsgRetained = false;
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/jms/JMSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/jms/JMSChannelBinding.java
deleted file mode 100644
index f1fa217f..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/jms/JMSChannelBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.channel.jms;
-
-import com.asyncapi.v2.binding.channel.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/binding/channel/kafka/KafkaChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/kafka/KafkaChannelBinding.java
deleted file mode 100644
index 2408566b..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/kafka/KafkaChannelBinding.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.asyncapi.v2.binding.channel.kafka;
-
-import com.asyncapi.v2.binding.channel.ChannelBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes Kafka channel binding.
- *
- * @version 0.4.0
- * @see Kafka channel binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes Kafka channel binding.")
-public class KafkaChannelBinding extends ChannelBinding {
-
- /**
- * Kafka topic name if different from channel name.
- */
- @Nullable
- @JsonProperty("topic")
- @JsonPropertyDescription("Kafka topic name if different from channel name.")
- private String topic;
-
- /**
- * Number of partitions configured on this topic (useful to know how many parallel consumers you may run).
- *
- * MUST be positive.
- */
- @Nullable
- @javax.validation.constraints.Min(
- value = 1,
- message = "Number of partitions must be greater or equals to 1"
- )
- @JsonProperty("partitions")
- @JsonPropertyDescription("Number of partitions configured on this topic (useful to know how many parallel consumers you may run).")
- private Integer partitions;
-
- /**
- * Number of replicas configured on this topic.
- *
- * MUST be positive.
- */
- @Nullable
- @javax.validation.constraints.Min(
- value = 1,
- message = "Number of replicas must be greater or equals to 1"
- )
- @JsonProperty("replicas")
- @JsonPropertyDescription("Number of replicas configured on this topic.")
- private Integer replicas;
-
- /**
- * Topic configuration properties that are relevant for the API.
- */
- @Nullable
- @JsonProperty("topicConfiguration")
- @JsonPropertyDescription("Topic configuration properties that are relevant for the API.")
- private KafkaChannelTopicConfiguration topicConfiguration;
-
- /**
- * The version of this binding. If omitted, "latest" MUST be assumed.
- */
- @Nullable
- @Builder.Default
- private String bindingVersion = "0.4.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/kafka/KafkaChannelTopicCleanupPolicy.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/kafka/KafkaChannelTopicCleanupPolicy.java
deleted file mode 100644
index 06fe5aa2..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/kafka/KafkaChannelTopicCleanupPolicy.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.asyncapi.v2.binding.channel.kafka;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public enum KafkaChannelTopicCleanupPolicy {
-
- @JsonProperty("compact")
- COMPACT,
-
- @JsonProperty("delete")
- DELETE
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/kafka/KafkaChannelTopicConfiguration.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/kafka/KafkaChannelTopicConfiguration.java
deleted file mode 100644
index 0e49c527..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/kafka/KafkaChannelTopicConfiguration.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.asyncapi.v2.binding.channel.kafka;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.List;
-
-/**
- * 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 class KafkaChannelTopicConfiguration {
-
- /**
- * The cleanup.policy configuration option.
- *
- * array may only contain delete and/or compact
- */
- @Nullable
- @JsonProperty("cleanup.policy")
- private List cleanupPolicy;
-
- /**
- * The retention.ms configuration option.
- */
- @Nullable
- @javax.validation.constraints.Min(
- value = -1,
- message = "retention.ms must be greater or equals to -1"
- )
- @JsonProperty("retention.ms")
- @JsonPropertyDescription("The [`retention.ms`](https://kafka.apache.org/documentation/#topicconfigs_retention.ms) configuration option.")
- private Integer retentionMs;
-
- /**
- * The retention.bytes configuration option.
- */
- @Nullable
- @javax.validation.constraints.Min(
- value = -1,
- message = "retention.bytes must be greater or equals to -1"
- )
- @JsonProperty("retention.bytes")
- @JsonPropertyDescription("The [`retention.bytes`](https://kafka.apache.org/documentation/#topicconfigs_retention.bytes) configuration option.")
- private Integer retentionBytes;
-
- /**
- * The delete.retention.ms configuration option.
- */
- @Nullable
- @javax.validation.constraints.Min(
- value = 0,
- message = "delete.retention.ms must be greater or equals to 0"
- )
- @JsonProperty("delete.retention.ms")
- @JsonPropertyDescription("The [`delete.retention.ms`](https://kafka.apache.org/documentation/#topicconfigs_delete.retention.ms) configuration option.")
- private Integer deleteRetentionMs;
-
- /**
- * The max.message.bytes configuration option.
- */
- @Nullable
- @javax.validation.constraints.Min(
- value = 0,
- message = "max.message.bytes must be greater or equals to 0"
- )
- @JsonProperty("max.message.bytes")
- @JsonPropertyDescription("The [`max.message.bytes`](https://kafka.apache.org/documentation/#topicconfigs_max.message.bytes) configuration option.")
- private Integer maxMessageBytes;
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/mercure/MercureChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/mercure/MercureChannelBinding.java
deleted file mode 100644
index d0c3703e..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/mercure/MercureChannelBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.channel.mercure;
-
-import com.asyncapi.v2.binding.channel.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 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/binding/channel/mqtt/MQTTChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/mqtt/MQTTChannelBinding.java
deleted file mode 100644
index ca180f07..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/mqtt/MQTTChannelBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.channel.mqtt;
-
-import com.asyncapi.v2.binding.channel.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/binding/channel/mqtt5/MQTT5ChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/mqtt5/MQTT5ChannelBinding.java
deleted file mode 100644
index 6b073eae..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/mqtt5/MQTT5ChannelBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.channel.mqtt5;
-
-import com.asyncapi.v2.binding.channel.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/binding/channel/nats/NATSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/nats/NATSChannelBinding.java
deleted file mode 100644
index d8b53857..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/nats/NATSChannelBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.channel.nats;
-
-import com.asyncapi.v2.binding.channel.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/binding/channel/pulsar/PulsarChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/pulsar/PulsarChannelBinding.java
deleted file mode 100644
index 8c2e314b..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/pulsar/PulsarChannelBinding.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package com.asyncapi.v2.binding.channel.pulsar;
-
-import com.asyncapi.v2.binding.channel.ChannelBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.List;
-
-/**
- * Describes Pulsar channel binding.
- *
- * @version 0.1.0
- * @see Pulsar channel binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes Pulsar channel binding.")
-public class PulsarChannelBinding extends ChannelBinding {
-
- /**
- * The namespace the channel is associated with.
- */
- @NotNull
- @Builder.Default
- @javax.validation.constraints.NotNull
- @JsonProperty("namespace")
- @JsonPropertyDescription("The namespace the channel is associated with.")
- private String namespace = "";
-
- /**
- * Persistence of the topic in Pulsar. It MUST be either persistent or non-persistent.
- */
- @NotNull
- @Builder.Default
- @javax.validation.constraints.NotNull
- @JsonProperty(value = "persistence", defaultValue = "persistent")
- @JsonPropertyDescription("Persistence of the topic in Pulsar. It MUST be either persistent or non-persistent.")
- private PulsarChannelPersistence persistence = PulsarChannelPersistence.PERSISTENT;
-
- /**
- * Topic compaction threshold given in Megabytes.
- */
- @Nullable
- @javax.validation.constraints.Min(
- value = 0,
- message = "Topic compaction threshold must be greater or equals to 0."
- )
- @JsonProperty("compaction")
- @JsonPropertyDescription("Topic compaction threshold given in Megabytes.")
- private Integer compaction;
-
- /**
- * A list of clusters the topic is replicated to.
- */
- @Nullable
- @JsonProperty("geo-replication")
- @JsonPropertyDescription("A list of clusters the topic is replicated to.")
- private List geoReplication;
-
- /**
- * Topic retention policy.
- */
- @Nullable
- @JsonProperty("retention")
- @JsonPropertyDescription("Topic retention policy.")
- private PulsarChannelRetentionDefinition retention;
-
- /**
- * Message time-to-live in seconds.
- */
- @Nullable
- @JsonProperty("ttl")
- @JsonPropertyDescription("Message time-to-live in seconds.")
- private Integer ttl;
-
- /**
- * Message deduplication. When true, it ensures that each message produced on Pulsar topics is persisted to disk only once.
- */
- @Nullable
- @JsonProperty("deduplication")
- @JsonPropertyDescription("Message deduplication. When true, it ensures that each message produced on Pulsar topics is persisted to disk only once.")
- private Boolean deduplication;
-
- /**
- * The version of this binding. If omitted, "latest" MUST be assumed.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/pulsar/PulsarChannelPersistence.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/pulsar/PulsarChannelPersistence.java
deleted file mode 100644
index 14cf634d..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/pulsar/PulsarChannelPersistence.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.asyncapi.v2.binding.channel.pulsar;
-
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-/**
- * Describes Pulsar channel persistence.
- *
- * @version 0.1.0
- * @see Pulsar channel binding
- * @author Pavel Bodiachevskii
- */
-@JsonClassDescription("Describes Pulsar channel persistence.")
-public enum PulsarChannelPersistence {
-
- @JsonProperty("persistent")
- PERSISTENT,
-
- @JsonProperty("non-persistent")
- NON_PERSISTENT
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/pulsar/PulsarChannelRetentionDefinition.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/pulsar/PulsarChannelRetentionDefinition.java
deleted file mode 100644
index 9a23fd29..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/pulsar/PulsarChannelRetentionDefinition.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.asyncapi.v2.binding.channel.pulsar;
-
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes Pulsar channel retention definition.
- *
- * The Retention Definition Object is used to describe the Pulsar Retention policy.
- *
- * @version 0.1.0
- * @see Pulsar channel binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode
-@JsonClassDescription("Describes Pulsar channel retention definition.")
-public class PulsarChannelRetentionDefinition {
-
- /**
- * Time given in Minutes.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("time")
- @JsonPropertyDescription("Time given in Minutes.")
- private Integer time = 0;
-
- /**
- * Size given in MegaBytes.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("size")
- @JsonPropertyDescription("Size given in MegaBytes.")
- private Integer size = 0;
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/redis/RedisChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/redis/RedisChannelBinding.java
deleted file mode 100644
index 4edb073e..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/redis/RedisChannelBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.channel.redis;
-
-import com.asyncapi.v2.binding.channel.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 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/binding/channel/sns/SNSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/sns/SNSChannelBinding.java
deleted file mode 100644
index 101d3629..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/sns/SNSChannelBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.channel.sns;
-
-import com.asyncapi.v2.binding.channel.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/binding/channel/solace/SolaceChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/solace/SolaceChannelBinding.java
deleted file mode 100644
index 58ff56e2..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/solace/SolaceChannelBinding.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.asyncapi.v2.binding.channel.solace;
-
-import com.asyncapi.v2.binding.channel.ChannelBinding;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-/**
- * 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/binding/channel/sqs/SQSChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/sqs/SQSChannelBinding.java
deleted file mode 100644
index 8a23ba1c..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/sqs/SQSChannelBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.channel.sqs;
-
-import com.asyncapi.v2.binding.channel.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/binding/channel/stomp/STOMPChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/stomp/STOMPChannelBinding.java
deleted file mode 100644
index df9b5f31..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/stomp/STOMPChannelBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.channel.stomp;
-
-import com.asyncapi.v2.binding.channel.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/binding/channel/ws/WebSocketsChannelBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ws/WebSocketsChannelBinding.java
deleted file mode 100644
index 4d8c66d7..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ws/WebSocketsChannelBinding.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.asyncapi.v2.binding.channel.ws;
-
-import com.asyncapi.v2.binding.channel.ChannelBinding;
-import com.asyncapi.v2.schema.Schema;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.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)
-@JsonClassDescription("Describes WebSockets channel binding.")
-public class WebSocketsChannelBinding extends ChannelBinding {
-
- /**
- * The HTTP method to use when establishing the connection. Its value MUST be either GET or POST.
- */
- @Nullable
- @JsonProperty("method")
- @JsonPropertyDescription("The HTTP method to use when establishing the connection. Its value MUST be either GET or POST.")
- private WebSocketsChannelMethod method;
-
- /**
- * A Schema object containing the definitions for each query parameter. This schema MUST be of type
- * object and have a properties key.
- */
- @Nullable
- @JsonProperty("query")
- @JsonPropertyDescription("A Schema object containing the definitions for each query parameter. This schema MUST be of type object and have a properties key.")
- private Schema query;
-
- /**
- * 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.
- */
- @Nullable
- @JsonProperty("headers")
- @JsonPropertyDescription("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.")
- private Schema headers;
-
- /**
- * The version of this binding. If omitted, "latest" MUST be assumed.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ws/WebSocketsChannelMethod.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ws/WebSocketsChannelMethod.java
deleted file mode 100644
index cdee8595..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/channel/ws/WebSocketsChannelMethod.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.asyncapi.v2.binding.channel.ws;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public enum WebSocketsChannelMethod {
-
- @JsonProperty("GET")
- GET,
-
- @JsonProperty("POST")
- POST
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/MessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/MessageBinding.java
deleted file mode 100644
index ebe7e2ed..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/MessageBinding.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.asyncapi.v2.binding.message;
-
-import com.asyncapi.v2.ExtendableObject;
-import lombok.EqualsAndHashCode;
-
-/**
- * Describes AsyncAPI message binding.
- *
- * @author Pavel Bodiachevskii
- */
-@EqualsAndHashCode(callSuper = true)
-public class MessageBinding extends ExtendableObject {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/amqp/AMQPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/amqp/AMQPMessageBinding.java
deleted file mode 100644
index d2281e2b..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/amqp/AMQPMessageBinding.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.asyncapi.v2.binding.message.amqp;
-
-import com.asyncapi.v2.binding.message.MessageBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * 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)
-@JsonClassDescription("Describes AMQP 0-9-1 message binding.")
-public class AMQPMessageBinding extends MessageBinding {
-
- /**
- * A MIME encoding for the message content.
- */
- @Nullable
- @JsonProperty("contentEncoding")
- @JsonPropertyDescription("A MIME encoding for the message content.")
- private String contentEncoding;
-
- /**
- * Application-specific message type.
- */
- @Nullable
- @JsonProperty("messageType")
- @JsonPropertyDescription("Application-specific message type.")
- private String messageType;
-
- /**
- * The version of this binding. If omitted, "latest" MUST be assumed.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.2.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/amqp1/AMQP1MessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/amqp1/AMQP1MessageBinding.java
deleted file mode 100644
index 5ef4bbaa..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/amqp1/AMQP1MessageBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.message.amqp1;
-
-import com.asyncapi.v2.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 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/binding/message/anypointmq/AnypointMQMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/anypointmq/AnypointMQMessageBinding.java
deleted file mode 100644
index d424ee88..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/anypointmq/AnypointMQMessageBinding.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.asyncapi.v2.binding.message.anypointmq;
-
-import com.asyncapi.v2.binding.message.MessageBinding;
-import com.asyncapi.v2.schema.Schema;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes Anypoint MQ message binding.
- *
- * @version 0.0.1
- * @see Anypoint MQ message binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes Anypoint MQ message binding.")
-public class AnypointMQMessageBinding extends MessageBinding {
-
- /**
- * 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.
- */
- @Nullable
- @JsonProperty("headers")
- @JsonPropertyDescription("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.")
- private Schema headers;
-
- /**
- * The version of this binding.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.0.1";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/googlepubsub/GooglePubSubMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/googlepubsub/GooglePubSubMessageBinding.java
deleted file mode 100644
index 3f1771cc..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/googlepubsub/GooglePubSubMessageBinding.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package com.asyncapi.v2.binding.message.googlepubsub;
-
-import com.asyncapi.v2.binding.message.MessageBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes Google Cloud Pub/Sub message binding.
- *
- * 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.
- *
- * @version 0.1.0
- * @see Google Cloud Pub/Sub message binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes Google Cloud Pub/Sub message binding.")
-public class GooglePubSubMessageBinding extends MessageBinding {
-
- /**
- * If non-empty, identifies related messages for which publish order should be respected (For more information, see ordering messages .)
- */
- @Nullable
- @JsonProperty("orderingKey")
- @JsonPropertyDescription("If non-empty, identifies related messages for which publish order should be respected (For more information, see https://cloud.google.com/pubsub/docs/ordering messages")
- 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.)
- */
- @Nullable
- @JsonProperty("attributes")
- @JsonPropertyDescription("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.)")
- private Object attributes;
-
- /**
- * Describes the schema used to validate the payload of this message
- */
- @Nullable
- @JsonProperty("schema")
- @JsonPropertyDescription("Describes the schema used to validate the payload of this message")
- private GooglePubSubMessageSchemaDefinition schema;
-
- /**
- * The version of this binding.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/googlepubsub/GooglePubSubMessageSchemaDefinition.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/googlepubsub/GooglePubSubMessageSchemaDefinition.java
deleted file mode 100644
index 2f70c8ac..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/googlepubsub/GooglePubSubMessageSchemaDefinition.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.asyncapi.v2.binding.message.googlepubsub;
-
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Describes Google Cloud Pub/Sub message schema definition.
- *
- * 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.
- *
- * @version 0.1.0
- * @see Google Cloud Pub/Sub message binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode
-@JsonClassDescription("Describes Google Cloud Pub/Sub message schema definition.")
-public class GooglePubSubMessageSchemaDefinition {
-
- /**
- * The name of the schema
- */
- @NotNull
- @Builder.Default
- @javax.validation.constraints.NotNull
- @JsonProperty(value = "name", required = true)
- @JsonPropertyDescription("The name of the schema")
- private String name = "";
-
- /**
- * The type of the schema
- */
- @NotNull
- @Builder.Default
- @javax.validation.constraints.NotNull
- @JsonProperty(value = "type", required = true)
- @JsonPropertyDescription("The type of the schema")
- private GooglePubSubMessageSchemaDefinitionType type = GooglePubSubMessageSchemaDefinitionType.PROTOBUF;
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/googlepubsub/GooglePubSubMessageSchemaDefinitionType.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/googlepubsub/GooglePubSubMessageSchemaDefinitionType.java
deleted file mode 100644
index 305b8d51..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/googlepubsub/GooglePubSubMessageSchemaDefinitionType.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.asyncapi.v2.binding.message.googlepubsub;
-
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-/**
- * Describes Google Cloud Pub/Sub message schema definition type.
- *
- * @version 0.1.0
- * @see Google Cloud Pub/Sub message binding
- * @see Types of schemas
- * @author Pavel Bodiachevskii
- */
-@JsonClassDescription("Describes Google Cloud Pub/Sub message schema definition type.")
-public enum GooglePubSubMessageSchemaDefinitionType {
-
- @JsonProperty("avro")
- AVRO,
-
- @JsonProperty("protobuf")
- PROTOBUF
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/http/HTTPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/http/HTTPMessageBinding.java
deleted file mode 100644
index 863d2546..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/http/HTTPMessageBinding.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.asyncapi.v2.binding.message.http;
-
-import com.asyncapi.v2.binding.message.MessageBinding;
-import com.asyncapi.v2.schema.Schema;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * 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.*
- */
- @Nullable
- @JsonProperty("headers")
- @JsonPropertyDescription("A Schema object containing the definitions for each query parameter. This schema MUST be of type object and have a properties key.")
- private Schema headers;
-
- /**
- * The version of this binding.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/ibmmq/IBMMQMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/ibmmq/IBMMQMessageBinding.java
deleted file mode 100644
index 1b233d53..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/ibmmq/IBMMQMessageBinding.java
+++ /dev/null
@@ -1,93 +0,0 @@
-package com.asyncapi.v2.binding.message.ibmmq;
-
-import com.asyncapi.v2.binding.message.MessageBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes IBM MQ message binding.
- *
- * This object contains information about the message representation in IBM MQ.
- *
- * @version 0.1.0
- * @see IBM MQ message binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes IBM MQ message binding.")
-public class IBMMQMessageBinding extends MessageBinding {
-
- /**
- * The type of the message.
- *
- * MUST be either string, jms or binary
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "type", defaultValue = "string")
- @JsonPropertyDescription("The type of the message.")
- private IBMMQMessageType type = IBMMQMessageType.STRING;
-
- /**
- * 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
- */
- @Nullable
- @JsonProperty("headers")
- @JsonPropertyDescription("Defines the IBM MQ message headers to include with this message. More than one header can be specified as a comma separated list.")
- 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.
- */
- @Nullable
- @JsonProperty("description")
- @JsonPropertyDescription("Provides additional information for application developers: describes the message type or format.")
- 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.
- */
- @Nullable
- @Builder.Default
- @javax.validation.constraints.Min(
- value = 0,
- message = "Expiry must be greater or equals to 0"
- )
- @JsonProperty(value = "expiry", defaultValue = "0")
- @JsonPropertyDescription("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](https://www.ibm.com/docs/en/ibm-mq/9.2?topic=mqmd-expiry-mqlong) in the IBM MQ Knowledge Center.")
- private Integer expiry = 0;
-
- /**
- * The version of this binding.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/ibmmq/IBMMQMessageType.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/ibmmq/IBMMQMessageType.java
deleted file mode 100644
index 02a24a33..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/ibmmq/IBMMQMessageType.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.asyncapi.v2.binding.message.ibmmq;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-/**
- * Describes IBM MQ message type.
- *
- * This object contains information about the message type in IBM MQ.
- *
- * @version 0.1.0
- * @see IBM MQ message binding
- * @author Pavel Bodiachevskii
- */
-public enum IBMMQMessageType {
-
- @JsonProperty("string")
- STRING,
-
- @JsonProperty("jms")
- JMS,
-
- @JsonProperty("binary")
- BINARY
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/jms/JMSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/jms/JMSMessageBinding.java
deleted file mode 100644
index 46d271ad..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/jms/JMSMessageBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.message.jms;
-
-import com.asyncapi.v2.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 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/binding/message/kafka/KafkaMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/kafka/KafkaMessageBinding.java
deleted file mode 100644
index e7728c9d..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/kafka/KafkaMessageBinding.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.asyncapi.v2.binding.message.kafka;
-
-import com.asyncapi.v2.binding.message.MessageBinding;
-import com.asyncapi.v2.schema.Schema;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.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 {
-
- /**
- * The message key.
- */
- @Nullable
- @JsonProperty("key")
- @JsonPropertyDescription("The message key.")
- private Schema key;
-
- /**
- * If a Schema Registry is used when performing this operation, tells where the id of schema is stored (e.g. header or payload).
- */
- @Nullable
- @JsonProperty("schemaIdLocation")
- @JsonPropertyDescription("If a Schema Registry is used when performing this operation, tells where the id of schema is stored (e.g. header or payload).")
- private KafkaMessageSchemaIdLocation schemaIdLocation;
-
- /**
- * Number of bytes or vendor specific values when schema id is encoded in payload (e.g confluent/ apicurio-legacy / apicurio-new).
- */
- @Nullable
- @JsonProperty("schemaIdPayloadEncoding")
- @JsonPropertyDescription("Number of bytes or vendor specific values when schema id is encoded in payload (e.g confluent/ apicurio-legacy / apicurio-new).")
- private String schemaIdPayloadEncoding;
-
- /**
- * Freeform string for any naming strategy class to use. Clients should default to the vendor default if not supplied.
- */
- @Nullable
- @JsonProperty("schemaLookupStrategy")
- @JsonPropertyDescription("Freeform string for any naming strategy class to use. Clients should default to the vendor default if not supplied.")
- private String schemaLookupStrategy;
-
- /**
- * The version of this binding. If omitted, "latest" MUST be assumed.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.4.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/kafka/KafkaMessageSchemaIdLocation.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/kafka/KafkaMessageSchemaIdLocation.java
deleted file mode 100644
index a413bf46..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/kafka/KafkaMessageSchemaIdLocation.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.asyncapi.v2.binding.message.kafka;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-/**
- * Describes Kafka message schema id location.
- *
- * @version 0.1.0
- * @see Kafka message binding
- * @author Pavel Bodiachevskii
- */
-public enum KafkaMessageSchemaIdLocation {
-
- @JsonProperty("header")
- HEADER,
-
- @JsonProperty("payload")
- PAYLOAD
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/mercure/MercureMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/mercure/MercureMessageBinding.java
deleted file mode 100644
index 0bbe57b1..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/mercure/MercureMessageBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.message.mercure;
-
-import com.asyncapi.v2.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/binding/message/mqtt/MQTTMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/mqtt/MQTTMessageBinding.java
deleted file mode 100644
index c08ece8f..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/mqtt/MQTTMessageBinding.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.asyncapi.v2.binding.message.mqtt;
-
-import com.asyncapi.v2.binding.message.MessageBinding;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.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.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/mqtt5/MQTT5MessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/mqtt5/MQTT5MessageBinding.java
deleted file mode 100644
index 9b850e40..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/mqtt5/MQTT5MessageBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.message.mqtt5;
-
-import com.asyncapi.v2.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 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/binding/message/nats/NATSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/nats/NATSMessageBinding.java
deleted file mode 100644
index d1d75520..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/nats/NATSMessageBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.message.nats;
-
-import com.asyncapi.v2.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 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/binding/message/pulsar/PulsarMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/pulsar/PulsarMessageBinding.java
deleted file mode 100644
index 909994a2..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/pulsar/PulsarMessageBinding.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.asyncapi.v2.binding.message.pulsar;
-
-import com.asyncapi.v2.binding.message.MessageBinding;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-/**
- * 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 MessageBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/redis/RedisMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/redis/RedisMessageBinding.java
deleted file mode 100644
index 8218be2d..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/redis/RedisMessageBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.message.redis;
-
-import com.asyncapi.v2.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 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/binding/message/sns/SNSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/sns/SNSMessageBinding.java
deleted file mode 100644
index d20c2d12..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/sns/SNSMessageBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.message.sns;
-
-import com.asyncapi.v2.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 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/binding/message/solace/SolaceMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/solace/SolaceMessageBinding.java
deleted file mode 100644
index 3da3d1d5..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/solace/SolaceMessageBinding.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.asyncapi.v2.binding.message.solace;
-
-import com.asyncapi.v2.binding.message.MessageBinding;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-/**
- * 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/binding/message/sqs/SQSMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/sqs/SQSMessageBinding.java
deleted file mode 100644
index 5ed5ea51..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/sqs/SQSMessageBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.message.sqs;
-
-import com.asyncapi.v2.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 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/binding/message/stomp/STOMPMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/stomp/STOMPMessageBinding.java
deleted file mode 100644
index e6428f0d..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/stomp/STOMPMessageBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.message.stomp;
-
-import com.asyncapi.v2.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 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/binding/message/ws/WebSocketsMessageBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/ws/WebSocketsMessageBinding.java
deleted file mode 100644
index 61582b36..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/message/ws/WebSocketsMessageBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.message.ws;
-
-import com.asyncapi.v2.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 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/binding/operation/OperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/OperationBinding.java
deleted file mode 100644
index 7b167eec..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/OperationBinding.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.asyncapi.v2.binding.operation;
-
-import com.asyncapi.v2.ExtendableObject;
-import lombok.EqualsAndHashCode;
-
-/**
- * Describes AsyncAPI operation binding.
- *
- * @author Pavel Bodiachevskii
- */
-@EqualsAndHashCode(callSuper = true)
-public class OperationBinding extends ExtendableObject {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/amqp/AMQPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/amqp/AMQPOperationBinding.java
deleted file mode 100644
index 034337ae..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/amqp/AMQPOperationBinding.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package com.asyncapi.v2.binding.operation.amqp;
-
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.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)
-@JsonClassDescription("Describes AMQP 0-9-1 operation binding.")
-public class AMQPOperationBinding extends OperationBinding {
-
- /**
- * TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.
- *
- * Applies to: publish, subscribe
- */
- @Nullable
- @javax.validation.constraints.Min(
- value = 0,
- message = "TTL (Time-To-Live) for the message must be greater than or equal to zero"
- )
- @JsonProperty("expiration")
- @JsonPropertyDescription("TTL (Time-To-Live) for the message. It MUST be greater than or equal to zero.")
- private Integer expiration;
-
- /**
- * Identifies the user who has sent the message.
- *
- * Applies to: publish, subscribe
- */
- @Nullable
- @JsonProperty("userId")
- @JsonPropertyDescription("Identifies the user who has sent the message.")
- private String userId;
-
- /**
- * The routing keys the message should be routed to at the time of publishing.
- *
- * Applies to: publish, subscribe
- */
- @Nullable
- @JsonProperty("cc")
- @JsonPropertyDescription("The routing keys the message should be routed to at the time of publishing.")
- private List cc;
-
- /**
- * A priority for the message.
- *
- * Applies to: publish, subscribe
- */
- @Nullable
- @JsonProperty("priority")
- @JsonPropertyDescription("A priority for the message.")
- private Integer priority;
-
- /**
- * Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).
- *
- * Applies to: publish, subscribe
- */
- @Nullable
- @javax.validation.constraints.Min(
- value = 1,
- message = "Delivery mode of the message must be either 1 (transient) or 2 (persistent)"
- )
- @javax.validation.constraints.Max(
- value = 2,
- message = "Delivery mode of the message must be either 1 (transient) or 2 (persistent)"
- )
- @JsonProperty("deliveryMode")
- @JsonPropertyDescription("Delivery mode of the message. Its value MUST be either 1 (transient) or 2 (persistent).")
- private Integer deliveryMode;
-
- /**
- * Whether the message is mandatory or not.
- *
- * Applies to: publish
- */
- @Nullable
- @JsonProperty("mandatory")
- @JsonPropertyDescription("Whether the message is mandatory or not.")
- private Boolean mandatory;
-
- /**
- * Like {@link #cc} but consumers will not receive this information.
- *
- * Applies to: publish
- */
- @Nullable
- @JsonProperty("bcc")
- @JsonPropertyDescription("Like cc but consumers will not receive this information.")
- private List bcc;
-
- /**
- * Name of the queue where the consumer should send the response.
- *
- * Applies to: publish, subscribe
- */
- @Nullable
- @JsonProperty("replyTo")
- @JsonPropertyDescription("Name of the queue where the consumer should send the response.")
- private String replyTo;
-
- /**
- * Whether the message should include a timestamp or not.
- *
- * Applies to: publish, subscribe
- */
- @Nullable
- @JsonProperty("timestamp")
- @JsonPropertyDescription("Whether the message should include a timestamp or not.")
- private Boolean timestamp;
-
- /**
- * Whether the consumer should ack the message or not.
- *
- * Applies to: subscribe
- */
- @Nullable
- @JsonProperty("ack")
- @JsonPropertyDescription("Whether the consumer should ack the message or not.")
- private Boolean ack;
-
- /**
- * The version of this binding. If omitted, "latest" MUST be assumed.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.2.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/amqp1/AMQP1OperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/amqp1/AMQP1OperationBinding.java
deleted file mode 100644
index f92e1e29..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/amqp1/AMQP1OperationBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.operation.amqp1;
-
-import com.asyncapi.v2.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 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/binding/operation/anypointmq/AnypointMQOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/anypointmq/AnypointMQOperationBinding.java
deleted file mode 100644
index c2f2fb18..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/anypointmq/AnypointMQOperationBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.operation.anypointmq;
-
-import com.asyncapi.v2.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 Anypoint MQ operation binding.
- *
- * @version 0.0.1
- * @see Anypoint MQ operation binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class AnypointMQOperationBinding extends OperationBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/googlepubsub/GooglePubSubOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/googlepubsub/GooglePubSubOperationBinding.java
deleted file mode 100644
index 69727478..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/googlepubsub/GooglePubSubOperationBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.operation.googlepubsub;
-
-import com.asyncapi.v2.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/binding/operation/http/HTTPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/http/HTTPOperationBinding.java
deleted file mode 100644
index 50de41dd..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/http/HTTPOperationBinding.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.asyncapi.v2.binding.operation.http;
-
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import com.asyncapi.v2.schema.Schema;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.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.
- */
- @NotNull
- @Builder.Default
- @javax.validation.constraints.NotNull
- @JsonProperty(value = "type", required = true)
- @JsonPropertyDescription("Type of operation. Its value MUST be either request or response.")
- private HTTPOperationType type = HTTPOperationType.REQUEST;
-
- /**
- * 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.
- */
- @Nullable
- @JsonProperty("method")
- @JsonPropertyDescription("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.")
- private HTTPOperationMethod method;
-
- /**
- * A Schema object containing the definitions for each query parameter. This schema MUST be of type object
- * and have a properties key.
- */
- @Nullable
- @JsonProperty("query")
- @JsonPropertyDescription("A Schema object containing the definitions for each query parameter. This schema MUST be of type object and have a properties key.")
- private Schema query;
-
- /**
- * The version of this binding. If omitted, "latest" MUST be assumed.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/http/HTTPOperationMethod.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/http/HTTPOperationMethod.java
deleted file mode 100644
index 6781a41c..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/http/HTTPOperationMethod.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.asyncapi.v2.binding.operation.http;
-
-/**
- * Describes HTTP operation type.
- *
- * Contains information about the operation type.
- *
- * @version 0.1.0
- * @see HTTP operation binding
- * @author Pavel Bodiachevskii
- */
-public enum HTTPOperationMethod {
- GET,
- PUT,
- POST,
- PATCH,
- DELETE,
- HEAD,
- OPTIONS,
- CONNECT,
- TRACE
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/http/HTTPOperationType.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/http/HTTPOperationType.java
deleted file mode 100644
index c45309eb..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/http/HTTPOperationType.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.asyncapi.v2.binding.operation.http;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-
-public enum HTTPOperationType {
-
- @JsonProperty("request")
- REQUEST,
-
- @JsonProperty("response")
- RESPONSE
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/ibmmq/IBMMQOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/ibmmq/IBMMQOperationBinding.java
deleted file mode 100644
index e974652a..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/ibmmq/IBMMQOperationBinding.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.asyncapi.v2.binding.operation.ibmmq;
-
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-/**
- * Describes IBM MQ operation binding.
- *
- * This object MUST NOT contain any properties. Its name is reserved for future use.
- *
- * @version 0.1.0
- * @see IBM MQ operation 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/binding/operation/jms/JMSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/jms/JMSOperationBinding.java
deleted file mode 100644
index 20c32de1..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/jms/JMSOperationBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.operation.jms;
-
-import com.asyncapi.v2.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 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/binding/operation/kafka/KafkaOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/kafka/KafkaOperationBinding.java
deleted file mode 100644
index 8ca426d2..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/kafka/KafkaOperationBinding.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package com.asyncapi.v2.binding.operation.kafka;
-
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import com.asyncapi.v2.schema.Schema;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.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 {
-
- /**
- * Id of the consumer group.
- */
- @Nullable
- @JsonProperty("groupId")
- @JsonPropertyDescription("Id of the consumer group.")
- private Schema groupId;
-
- /**
- * Id of the consumer inside a consumer group.
- */
- @Nullable
- @JsonProperty("clientId")
- @JsonPropertyDescription("Id of the consumer inside a consumer group.")
- private Schema clientId;
-
- /**
- * The version of this binding. If omitted, "latest" MUST be assumed.
- */
- @Nullable
- @Builder.Default
- private String bindingVersion = "0.4.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/mercure/MercureOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/mercure/MercureOperationBinding.java
deleted file mode 100644
index 0161bd0c..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/mercure/MercureOperationBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.operation.mercure;
-
-import com.asyncapi.v2.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/binding/operation/mqtt/MQTTOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/mqtt/MQTTOperationBinding.java
deleted file mode 100644
index d76d9d86..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/mqtt/MQTTOperationBinding.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package com.asyncapi.v2.binding.operation.mqtt;
-
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.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)
-@JsonClassDescription("Describes MQTT operation binding.")
-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
- */
- @Nullable
- @javax.validation.constraints.Min(
- value = 0,
- message = "QoS must be greater or equals to 0."
- )
- @javax.validation.constraints.Max(
- value = 2,
- message = "QoS must be lower or equals to 0."
- )
- @JsonProperty("qos")
- @JsonPropertyDescription("Defines the Quality of Service (QoS) levels for the message flow between client and server. Its value MUST be either 0 (At most once delivery), 1 (At least once delivery), or 2 (Exactly once delivery).")
- private Integer qos;
-
- /**
- * Whether the broker should retain the message or not.
- *
- * Applies to: publish, subscribe
- */
- @Nullable
- @JsonProperty("retain")
- @JsonPropertyDescription("Whether the broker should retain the message or not.")
- private Boolean retain;
-
- /**
- * The version of this binding. If omitted, "latest" MUST be assumed.
- *
- * Applies to: publish, subscribe
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/mqtt5/MQTT5OperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/mqtt5/MQTT5OperationBinding.java
deleted file mode 100644
index 1d804a44..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/mqtt5/MQTT5OperationBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.operation.mqtt5;
-
-import com.asyncapi.v2.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 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/binding/operation/nats/NATSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/nats/NATSOperationBinding.java
deleted file mode 100644
index 6a82e9e6..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/nats/NATSOperationBinding.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.asyncapi.v2.binding.operation.nats;
-
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes NATS operation binding.
- *
- * @version 0.1.0
- * @see NATS operation binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes NATS operation binding.")
-public class NATSOperationBinding extends OperationBinding {
-
- /**
- * Defines the name of the queue to use. It MUST NOT exceed 255 characters.
- */
- @Nullable
- @javax.validation.constraints.Size(
- max = 255,
- message = "Queue name must be lower or equals to 255."
- )
- @JsonProperty("queue")
- @JsonPropertyDescription("Defines the name of the queue to use. It MUST NOT exceed 255 characters.")
- private String queue;
-
- /**
- * The version of this binding. If omitted, "latest" MUST be assumed.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/pulsar/PulsarOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/pulsar/PulsarOperationBinding.java
deleted file mode 100644
index 4401701e..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/pulsar/PulsarOperationBinding.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.asyncapi.v2.binding.operation.pulsar;
-
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-/**
- * Describes Pulsar operation binding.
- *
- * This object MUST NOT contain any properties. Its name is reserved for future use.
- *
- * @version 0.1.0
- * @see Pulsar operation 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/binding/operation/redis/RedisOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/redis/RedisOperationBinding.java
deleted file mode 100644
index a48e021a..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/redis/RedisOperationBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.operation.redis;
-
-import com.asyncapi.v2.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 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/binding/operation/sns/SNSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/sns/SNSOperationBinding.java
deleted file mode 100644
index c066056a..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/sns/SNSOperationBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.operation.sns;
-
-import com.asyncapi.v2.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 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/binding/operation/solace/SolaceOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/solace/SolaceOperationBinding.java
deleted file mode 100644
index ff0a4ef7..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/solace/SolaceOperationBinding.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.asyncapi.v2.binding.operation.solace;
-
-import com.asyncapi.v2.binding.operation.OperationBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.List;
-
-/**
- * Describes Solace operation binding.
- *
- * Contains information about the operation representation in Solace PubSub+ Broker.
- *
- * @version 0.3.0
- * @see Solace operation binding
- * @author Dennis Brinley, Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes Solace operation binding.")
-public class SolaceOperationBinding extends OperationBinding {
-
- /**
- * List of destinations
- */
- @Nullable
- @JsonProperty("destinations")
- @JsonPropertyDescription("List of destinations")
- private List destinations;
-
- /**
- * The version of this binding. (e.g. bindingVersion: 0.3.0)
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.3.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/solace/SolaceOperationDestination.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/solace/SolaceOperationDestination.java
deleted file mode 100644
index fb3b075e..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/solace/SolaceOperationDestination.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.asyncapi.v2.binding.operation.solace;
-
-import com.asyncapi.v2.binding.operation.solace.queue.SolaceOperationQueue;
-import com.asyncapi.v2.binding.operation.solace.topic.SolaceOperationTopic;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes Solace destination.
- *
- * Contains information about the destination in Solace PubSub+ Broker.
- *
- * @version 0.3.0
- * @see Solace operation binding
- * @author Dennis Brinley, Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@JsonClassDescription("Describes Solace destination.")
-public class SolaceOperationDestination {
-
- /**
- * 'queue' or 'topic'. If the type is queue, then the subscriber can bind to the queue, which in turn will
- * subscribe to the topic as represented by the channel name or to the provided topicSubscriptions.
- */
- @Nullable
- @JsonProperty("destinationType")
- @JsonPropertyDescription("'queue' or 'topic'. If the type is queue, then the subscriber can bind to the queue, which in turn will subscribe to the topic as represented by the channel name or to the provided topicSubscriptions.")
- private Type destinationType;
-
- /**
- * 'direct' or 'persistent'. This determines the quality of service for publishing messages as documented here .
- * Default is 'persistent'.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "deliveryMode", defaultValue = "persistent")
- @JsonPropertyDescription("'direct' or 'persistent'. This determines the quality of service for publishing messages as documented at https://docs.solace.com/Get-Started/Core-Concepts-Message-Delivery-Modes.htm. Default is 'persistent'.")
- private DeliveryMode deliveryMode = DeliveryMode.PERSISTENT;
-
- /**
- * Solace queue destination details.
- */
- @Nullable
- @JsonProperty("queue")
- @JsonPropertyDescription("Solace queue destination details.")
- private SolaceOperationQueue queue;
-
- /**
- * Solace topic destination details.
- */
- @Nullable
- @JsonProperty("topic")
- @JsonPropertyDescription("Solace topic destination details.")
- private SolaceOperationTopic topic;
-
- public enum Type {
-
- @JsonProperty("queue")
- QUEUE,
- @JsonProperty("topic")
- TOPIC
-
- }
-
- public enum DeliveryMode {
-
- @JsonProperty("direct")
- DIRECT,
- @JsonProperty("persistent")
- PERSISTENT
-
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/solace/queue/SolaceOperationQueue.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/solace/queue/SolaceOperationQueue.java
deleted file mode 100644
index acd627d1..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/solace/queue/SolaceOperationQueue.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package com.asyncapi.v2.binding.operation.solace.queue;
-
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.List;
-
-/**
- * Describes Solace queue.
- *
- * Contains information about the queue in Solace PubSub+ Broker.
- *
- * @version 0.3.0
- * @see Solace operation binding
- * @author Dennis Brinley, Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@JsonClassDescription("Describes Solace queue.")
-public class SolaceOperationQueue {
-
- /**
- * The name of the queue, only applicable when destinationType is 'queue'.
- */
- @Nullable
- @JsonProperty("name")
- @JsonPropertyDescription("The name of the queue, only applicable when destinationType is 'queue'.")
- private String name;
-
- /**
- * A list of topics that the queue subscribes to, only applicable when destinationType is 'queue'.
- * If none is given, the queue subscribes to the topic as represented by the channel name.
- */
- @Nullable
- @JsonProperty("topicSubscriptions")
- @JsonPropertyDescription("A list of topics that the queue subscribes to, only applicable when destinationType is 'queue'. If none is given, the queue subscribes to the topic as represented by the channel name.")
- private List topicSubscriptions;
-
- /**
- * 'exclusive' or 'nonexclusive'. This is documented here . Only applicable when destinationType is 'queue'.
- */
- @Nullable
- @JsonProperty("accessType")
- @JsonPropertyDescription("'exclusive' or 'nonexclusive'. This is documented at https://docs.solace.com/Messaging/Guaranteed-Msg/Endpoints.htm#Queues. Only applicable when destinationType is 'queue'.")
- private AccessType accessType;
-
- /**
- * The maximum amount of message spool that the given queue may use. This is documented here .
- * Only applicable when destinationType is 'queue'.
- */
- @Nullable
- @JsonProperty("maxMsgSpoolSize")
- @JsonPropertyDescription("The maximum amount of message spool that the given queue may use. This is documented at https://docs.solace.com/Messaging/Guaranteed-Msg/Message-Spooling.htm#max-spool-usage. Only applicable when destinationType is 'queue'.")
- private String maxMsgSpoolSize;
-
- /**
- * The maximum TTL to apply to messages to be spooled. This is documented here .
- * Only applicable when destinationType is 'queue'.
- */
- @Nullable
- @JsonProperty("maxTtl")
- @JsonPropertyDescription("The maximum TTL to apply to messages to be spooled. This is documented at https://docs.solace.com/Messaging/Guaranteed-Msg/Configuring-Queues.htm. Only applicable when destinationType is 'queue'.")
- private String maxTtl;
-
- public enum AccessType {
-
- @JsonProperty("exclusive")
- EXCLUSIVE,
- @JsonProperty("non-exclusive")
- NON_EXCLUSIVE
-
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/solace/topic/SolaceOperationTopic.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/solace/topic/SolaceOperationTopic.java
deleted file mode 100644
index bdf54d6d..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/solace/topic/SolaceOperationTopic.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.asyncapi.v2.binding.operation.solace.topic;
-
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.List;
-
-/**
- * Describes Solace topic.
- *
- * Contains information about the topic in Solace PubSub+ Broker.
- *
- * @version 0.3.0
- * @see Solace operation binding
- * @author Dennis Brinley, Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@JsonClassDescription("Describes Solace topic.")
-public class SolaceOperationTopic {
-
- /**
- * A list of topics that the client subscribes to, only applicable when destinationType is 'topic'.
- * If none is given, the client subscribes to the topic as represented by the channel name.
- */
- @Nullable
- @JsonProperty("topicSubscriptions")
- @JsonPropertyDescription("A list of topics that the client subscribes to, only applicable when destinationType is 'topic'. If none is given, the client subscribes to the topic as represented by the channel name.")
- protected List topicSubscriptions;
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/sqs/SQSOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/sqs/SQSOperationBinding.java
deleted file mode 100644
index e527e551..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/sqs/SQSOperationBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.operation.sqs;
-
-import com.asyncapi.v2.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 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/binding/operation/stomp/STOMPOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/stomp/STOMPOperationBinding.java
deleted file mode 100644
index db615991..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/stomp/STOMPOperationBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.operation.stomp;
-
-import com.asyncapi.v2.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 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/binding/operation/ws/WebSocketsOperationBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/ws/WebSocketsOperationBinding.java
deleted file mode 100644
index bba61517..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/operation/ws/WebSocketsOperationBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.operation.ws;
-
-import com.asyncapi.v2.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 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/binding/server/ServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/ServerBinding.java
deleted file mode 100644
index ed0c727c..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/ServerBinding.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.asyncapi.v2.binding.server;
-
-import com.asyncapi.v2.ExtendableObject;
-import lombok.EqualsAndHashCode;
-
-/**
- * Describes AsyncAPI server binding.
- *
- * @version 2.6.0
- * @author Pavel Bodiachevskii
- */
-@EqualsAndHashCode(callSuper = true)
-public class ServerBinding extends ExtendableObject {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/amqp/AMQPServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/amqp/AMQPServerBinding.java
deleted file mode 100644
index 78523a63..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/amqp/AMQPServerBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.server.amqp;
-
-import com.asyncapi.v2.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 AMQP 0-9-1 server binding.
- *
- * @version 0.2.0
- * @see AMQP server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class AMQPServerBinding extends ServerBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/amqp1/AMQP1ServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/amqp1/AMQP1ServerBinding.java
deleted file mode 100644
index 661759c1..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/amqp1/AMQP1ServerBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.server.amqp1;
-
-import com.asyncapi.v2.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 AMQP 1.0 server binding.
- *
- * @version 0.1.0
- * @see AMQP server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class AMQP1ServerBinding extends ServerBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/anypointmq/AnypointMQServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/anypointmq/AnypointMQServerBinding.java
deleted file mode 100644
index 08ec2b17..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/anypointmq/AnypointMQServerBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.server.anypointmq;
-
-import com.asyncapi.v2.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 server binding.
- *
- * @version 0.0.1
- * @see Anypoint MQ server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class AnypointMQServerBinding extends ServerBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/googlepubsub/GooglePubSubServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/googlepubsub/GooglePubSubServerBinding.java
deleted file mode 100644
index 56ffd92a..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/googlepubsub/GooglePubSubServerBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.server.googlepubsub;
-
-import com.asyncapi.v2.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 Google Cloud Pub/Sub server binding.
- *
- * @version 0.1.0
- * @see Google Cloud Pub/Sub server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class GooglePubSubServerBinding extends ServerBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/http/HTTPServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/http/HTTPServerBinding.java
deleted file mode 100644
index 091ac279..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/http/HTTPServerBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.server.http;
-
-import com.asyncapi.v2.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 HTTP server binding.
- *
- * @version 0.1.0
- * @see HTTP server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class HTTPServerBinding extends ServerBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/ibmmq/IBMMQServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/ibmmq/IBMMQServerBinding.java
deleted file mode 100644
index fdeef6d9..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/ibmmq/IBMMQServerBinding.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package com.asyncapi.v2.binding.server.ibmmq;
-
-import com.asyncapi.v2.binding.server.ServerBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes IBM MQ server binding.
- *
- * This object contains server connection information about the IBM MQ server, referred to as an IBM MQ queue manager.
- * This object contains additional connectivity information not possible to represent within the core AsyncAPI specification.
- *
- * @version 0.1.0
- * @see IBM MQ server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes IBM MQ server binding.")
-public class IBMMQServerBinding extends ServerBinding {
-
- /**
- * Defines a logical group of IBM MQ server objects. This is necessary to specify multi-endpoint configurations used
- * in high availability deployments. If omitted, the server object is not part of a group.
- *
- * MUST NOT be specified for URI Scheme http:// or file://
- */
- @Nullable
- @JsonProperty("groupId")
- @JsonPropertyDescription("Defines a logical group of IBM MQ server objects. This is necessary to specify multi-endpoint configurations used in high availability deployments. If omitted, the server object is not part of a group.")
- private String groupId;
-
- /**
- * The name of the IBM MQ queue manager to bind to in the CCDT file.
- *
- * MUST NOT be specified for URI Scheme ibmmq://
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "ccdtQueueManagerName", defaultValue = "*")
- @JsonPropertyDescription("The name of the IBM MQ queue manager to bind to in the CCDT file.")
- private String ccdtQueueManagerName = "*";
-
- /**
- * The recommended cipher specification used to establish a TLS connection between the client and the IBM MQ queue manager.
- * More information on SSL/TLS cipher specifications supported by IBM MQ can be found on this page in the IBM MQ Knowledge Center.
- *
- * MUST NOT be specified for protocol ibmmq or URI Scheme file:// or http://
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "cipherSpec", defaultValue = "ANY")
- @JsonPropertyDescription("The recommended cipher specification used to establish a TLS connection between the client and the IBM MQ queue manager. More information on SSL/TLS cipher specifications supported by IBM MQ can be found on this page in the IBM MQ Knowledge Center.")
- private String cipherSpec = "ANY";
-
- /**
- * If multiEndpointServer is true then multiple connections can be workload balanced and applications should not make
- * assumptions as to where messages are processed. Where message ordering, or affinity to specific message resources
- * is necessary, a single endpoint (multiEndpointServer = false) may be required.
- *
- * MUST NOT be specified for URI Scheme file:// or http://
- */
- @Builder.Default
- @JsonProperty(value = "multiEndpointServer", defaultValue = "false")
- @JsonPropertyDescription("If multiEndpointServer is true then multiple connections can be workload balanced and applications should not make assumptions as to where messages are processed. Where message ordering, or affinity to specific message resources is necessary, a single endpoint (multiEndpointServer = false) may be required. MUST NOT be specified for URI Scheme file:// or http://")
- private Boolean multiEndpointServer = false;
-
- /**
- * The recommended value (in seconds) for the heartbeat sent to the queue manager during periods of inactivity.
- * A value of zero means that no heart beats are sent. A value of 1 means that the client will use the value defined by the queue manager.
- * More information on heart beat interval can be found on this page in the IBM MQ Knowledge Center.
- *
- * MUST be 0-999999
- */
- @Builder.Default
- @javax.validation.constraints.Min(
- value = 0,
- message = "Heart beat interval must be greater or equals to 0"
- )
- @javax.validation.constraints.Max(
- value = 999999,
- message = "Heart beat interval must be less or equals to 999999"
- )
- @JsonProperty(value = "heartBeatInterval", defaultValue = "300")
- @JsonPropertyDescription("The recommended value (in seconds) for the heartbeat sent to the queue manager during periods of inactivity. A value of zero means that no heart beats are sent. A value of 1 means that the client will use the value defined by the queue manager.")
- private int heartBeatInterval = 300;
-
- /**
- * The version of this binding.
- */
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/jms/JMSServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/jms/JMSServerBinding.java
deleted file mode 100644
index f205f22a..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/jms/JMSServerBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.server.jms;
-
-import com.asyncapi.v2.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 JMS server binding.
- *
- * @version 0.1.0
- * @see JMS server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class JMSServerBinding extends ServerBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/kafka/KafkaServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/kafka/KafkaServerBinding.java
deleted file mode 100644
index 87f21cec..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/kafka/KafkaServerBinding.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.asyncapi.v2.binding.server.kafka;
-
-import com.asyncapi.v2.binding.server.ServerBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes Kafka server binding.
- *
- * @version 0.4.0
- * @see Kafka server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes Kafka server binding.")
-public class KafkaServerBinding extends ServerBinding {
-
- /**
- * API URL for the Schema Registry used when producing Kafka messages (if a Schema Registry was used)
- */
- @Nullable
- @JsonProperty("schemaRegistryUrl")
- @JsonPropertyDescription("API URL for the Schema Registry used when producing Kafka messages (if a Schema Registry was used)")
- private String schemaRegistryUrl;
-
- /**
- * MUST NOT be specified if schemaRegistryUrl is not specified
- *
- * The vendor of Schema Registry and Kafka serdes library that should be used (e.g. apicurio, confluent, ibm, or karapace)
- */
- @Nullable
- @JsonProperty("schemaRegistryVendor")
- @JsonPropertyDescription("The vendor of Schema Registry and Kafka serdes library that should be used (e.g. apicurio, confluent, ibm, or karapace)")
- private String schemaRegistryVendor;
-
- /**
- * The version of this binding.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.4.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/mercure/MercureServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/mercure/MercureServerBinding.java
deleted file mode 100644
index 4941376b..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/mercure/MercureServerBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.server.mercure;
-
-import com.asyncapi.v2.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 Mercure server binding.
- *
- * @version 0.1.0
- * @see Mercure server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class MercureServerBinding extends ServerBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/mqtt/MQTTServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/mqtt/MQTTServerBinding.java
deleted file mode 100644
index b60dacb7..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/mqtt/MQTTServerBinding.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package com.asyncapi.v2.binding.server.mqtt;
-
-import com.asyncapi.v2.binding.server.ServerBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes MQTT server binding.
- *
- * Contains information about the server representation in MQTT.
- *
- * @version 0.1.0
- * @see MQTT server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes MQTT server binding.")
-public class MQTTServerBinding extends ServerBinding {
-
- /**
- * The client identifier.
- */
- @Nullable
- @JsonProperty("clientId")
- @JsonPropertyDescription("The client identifier.")
- private String clientId;
-
- /**
- * Whether to create a persisten connection or not. When false, the connection will be persistent.
- */
- @Nullable
- @JsonProperty("cleanSession")
- @JsonPropertyDescription("Whether to create a persisten connection or not. When false, the connection will be persistent.")
- private Boolean cleanSession;
-
- /**
- * Last Will and Testament configuration.
- */
- @Nullable
- @JsonProperty("lastWill")
- @JsonPropertyDescription("Last Will and Testament configuration.")
- private MQTTServerLastWillConfiguration lastWill;
-
- /**
- * Interval in seconds of the longest period of time the broker and the client can endure without sending a message.
- */
- @Nullable
- @JsonProperty("keepAlive")
- @JsonPropertyDescription("Interval in seconds of the longest period of time the broker and the client can endure without sending a message.")
- private Integer keepAlive;
-
- /**
- * The version of this binding. If omitted, "latest" MUST be assumed.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/mqtt/MQTTServerLastWillConfiguration.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/mqtt/MQTTServerLastWillConfiguration.java
deleted file mode 100644
index 5accb133..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/mqtt/MQTTServerLastWillConfiguration.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.asyncapi.v2.binding.server.mqtt;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes MQTT server last will configuration.
- *
- * @version 0.1.0
- * @see MQTT server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@EqualsAndHashCode
-@NoArgsConstructor
-@AllArgsConstructor
-public class MQTTServerLastWillConfiguration {
-
- /**
- * The topic where the Last Will and Testament message will be sent.
- */
- @Nullable
- @JsonProperty("topic")
- @JsonPropertyDescription("The topic where the Last Will and Testament message will be sent.")
- private String topic;
-
- /**
- * Defines how hard the broker/client will try to ensure that the Last Will and Testament message is received.
- * Its value MUST be either 0, 1 or 2.
- */
- @Nullable
- @javax.validation.constraints.Min(
- value = 0,
- message = "QoS must be greater or equals to 0."
- )
- @javax.validation.constraints.Max(
- value = 2,
- message = "QoS must be lower or equals to 0."
- )
- @JsonProperty("qos")
- @JsonPropertyDescription("Defines how hard the broker/client will try to ensure that the Last Will and Testament message is received. Its value MUST be either 0, 1 or 2.")
- private Integer qos;
-
- /**
- * Last Will message.
- */
- @Nullable
- @JsonProperty("message")
- @JsonPropertyDescription("Last Will message.")
- private String message;
-
- /**
- * Whether the broker should retain the Last Will and Testament message or not.
- */
- @Nullable
- @JsonProperty("retain")
- @JsonPropertyDescription("Whether the broker should retain the Last Will and Testament message or not.")
- private Boolean retain;
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/mqtt5/MQTT5ServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/mqtt5/MQTT5ServerBinding.java
deleted file mode 100644
index d2bf748f..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/mqtt5/MQTT5ServerBinding.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.asyncapi.v2.binding.server.mqtt5;
-
-import com.asyncapi.v2.binding.server.ServerBinding;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-
-/**
- * Describes MQTT 5 server binding.
- *
- * @version 0.2.0
- * @see MQTT 5 server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class MQTT5ServerBinding extends ServerBinding {
-
- /**
- * TODO: support reference, Schema object
- * Session Expiry Interval in seconds or a Schema Object containing the definition of the interval.
- */
- private int sessionExpiryInterval;
-
- @Builder.Default
- private String bindingVersion = "0.2.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/nats/NATSServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/nats/NATSServerBinding.java
deleted file mode 100644
index 913b1fb4..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/nats/NATSServerBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.server.nats;
-
-import com.asyncapi.v2.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 NATS channel binding.
- *
- * @version 0.1.0
- * @see NATS server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class NATSServerBinding extends ServerBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/pulsar/PulsarServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/pulsar/PulsarServerBinding.java
deleted file mode 100644
index 1e6edea8..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/pulsar/PulsarServerBinding.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.asyncapi.v2.binding.server.pulsar;
-
-import com.asyncapi.v2.binding.server.ServerBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes Pulsar server binding.
- *
- * @version 0.1.0
- * @see Redis server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes Pulsar server binding.")
-public class PulsarServerBinding extends ServerBinding {
-
- /**
- * The pulsar tenant. If omitted, "public" MUST be assumed.
- */
- @Nullable
- @Builder.Default
- @JsonProperty(value = "tenant", defaultValue = "public")
- @JsonPropertyDescription("The pulsar tenant. If omitted, \"public\" MUST be assumed.")
- private String tenant = "public";
-
- /**
- * The version of this binding.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.1.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/redis/RedisServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/redis/RedisServerBinding.java
deleted file mode 100644
index ba4018c7..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/redis/RedisServerBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.server.redis;
-
-import com.asyncapi.v2.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 Redis server binding.
- *
- * @version 0.1.0
- * @see Redis server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class RedisServerBinding extends ServerBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/sns/SNSServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/sns/SNSServerBinding.java
deleted file mode 100644
index 15fbfa81..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/sns/SNSServerBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.server.sns;
-
-import com.asyncapi.v2.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 SNS server binding.
- *
- * @version 0.1.0
- * @see SNS server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class SNSServerBinding extends ServerBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/solace/SolaceServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/solace/SolaceServerBinding.java
deleted file mode 100644
index a8b1467a..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/solace/SolaceServerBinding.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package com.asyncapi.v2.binding.server.solace;
-
-import com.asyncapi.v2.binding.server.ServerBinding;
-import com.fasterxml.jackson.annotation.JsonClassDescription;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonPropertyDescription;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Describes Solace server binding.
- *
- * @version 0.3.0
- * @see Solace server binding
- * @author Dennis Brinley, Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-@JsonClassDescription("Describes Solace server binding.")
-public class SolaceServerBinding extends ServerBinding {
-
- /**
- * Message VPN of the Solace Broker
- *
- * e.g. msgVpn: solace-broker-msg-vpn
- */
- @Nullable
- @JsonProperty("msgVpn")
- @JsonPropertyDescription("Message VPN of the Solace Broker")
- private String msgVpn;
-
- /**
- * The version of this binding.
- */
- @Nullable
- @Builder.Default
- @JsonProperty("bindingVersion")
- @JsonPropertyDescription("The version of this binding.")
- private String bindingVersion = "0.3.0";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/sqs/SQSServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/sqs/SQSServerBinding.java
deleted file mode 100644
index bb6f90ef..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/sqs/SQSServerBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.server.sqs;
-
-import com.asyncapi.v2.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 SQS server binding.
- *
- * @version 0.1.0
- * @see SQS server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class SQSServerBinding extends ServerBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/stomp/STOMPServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/stomp/STOMPServerBinding.java
deleted file mode 100644
index 9d3b4ac5..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/stomp/STOMPServerBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.server.stomp;
-
-import com.asyncapi.v2.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 STOMP server binding.
- *
- * @version 0.1.0
- * @see STOMP server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class STOMPServerBinding extends ServerBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/ws/WebSocketsServerBinding.java b/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/ws/WebSocketsServerBinding.java
deleted file mode 100644
index 99f76072..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/binding/server/ws/WebSocketsServerBinding.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.asyncapi.v2.binding.server.ws;
-
-import com.asyncapi.v2.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 WebSockets server binding.
- *
- * @version 0.1.0
- * @see WebSockets server binding
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class WebSocketsServerBinding extends ServerBinding {
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/BindingsMapDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/BindingsMapDeserializer.java
deleted file mode 100644
index 7b78380f..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/BindingsMapDeserializer.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.asyncapi.v2.jackson;
-
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonNode;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Deserializes AsyncAPI bindings map.
- */
-public abstract class BindingsMapDeserializer extends JsonDeserializer> {
-
- public abstract Object chooseKnownPojo(String bindingKey, JsonNode binding, ObjectCodec objectCodec) throws IOException;
-
- @Override
- public Map deserialize(
- JsonParser p,
- DeserializationContext ctxt
- ) throws IOException, JsonProcessingException {
- ObjectCodec objectCodec = p.getCodec();
- JsonNode node = objectCodec.readTree(p);
-
- Map bindings = new HashMap<>();
-
- node.fieldNames().forEachRemaining(
- fieldName -> {
- try {
- bindings.put(fieldName, chooseKnownPojo(fieldName, node.get(fieldName), objectCodec));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- );
-
- return bindings;
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/ListOfReferencesOrObjectsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/ListOfReferencesOrObjectsDeserializer.java
deleted file mode 100644
index 4a2baf05..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/ListOfReferencesOrObjectsDeserializer.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.asyncapi.v2.jackson;
-
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonNode;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-public abstract class ListOfReferencesOrObjectsDeserializer extends JsonDeserializer> {
-
- abstract public Class objectTypeClass();
-
- abstract public Class> referenceClass();
-
- @Override
- public List deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
- ObjectCodec objectCodec = p.getCodec();
- JsonNode node = objectCodec.readTree(p);
-
- List traits = new ArrayList<>();
-
- node.forEach(
- traitsValue -> {
- try {
- traits.add(chooseKnownPojo(traitsValue, objectCodec));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- );
-
- return traits;
- }
-
- private Object chooseKnownPojo(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
- JsonNode ref = jsonNode.get("$ref");
- try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
- if (ref != null) {
- return jsonParser.readValueAs(referenceClass());
- } else {
- return jsonParser.readValueAs(objectTypeClass());
- }
- }
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/MapOfReferencesOrObjectsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/MapOfReferencesOrObjectsDeserializer.java
deleted file mode 100644
index 2fb73bc1..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/MapOfReferencesOrObjectsDeserializer.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package com.asyncapi.v2.jackson;
-
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonNode;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Deserializes AsyncAPI map of parameters
- * @param object
- */
-public abstract class MapOfReferencesOrObjectsDeserializer extends JsonDeserializer> {
-
- abstract public Class objectTypeClass();
-
- abstract public Class> referenceClass();
-
- @Override
- public Map deserialize(JsonParser jsonParser,
- DeserializationContext deserializationContext
- ) throws IOException, JsonProcessingException {
- ObjectCodec objectCodec = jsonParser.getCodec();
- JsonNode map = objectCodec.readTree(jsonParser);
-
- Map parameters = new HashMap<>();
-
- map.fieldNames().forEachRemaining(
- fieldName -> {
- /*
- Problem:
- Both, Reference class and Schema class have $ref field.
- So, this is only reason why I receive next exception:
- "com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
- Unrecognized field "title" (class com.asyncapi.v2._6_0.model.Reference),
- not marked as ignorable (one known property: "$ref"])"
- in case when Schema contains $ref.
- Solution:
- Try to deserialize reference. In case of exception, try to deserialize it as given ObjectType. In case of
- one more exception, throw it.
- TODO: Think how to improve.
- */
- try {
- parameters.put(fieldName, chooseKnownPojo(map.get(fieldName), objectCodec));
- } catch (IOException ignore) {
- try {
- parameters.put(fieldName, readAsObject(map.get(fieldName), objectCodec));
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- );
-
- return parameters;
- }
-
- private Object chooseKnownPojo(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
- JsonNode ref = jsonNode.get("$ref");
- try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
- if (ref != null) {
- return jsonParser.readValueAs(referenceClass());
- } else {
- return jsonParser.readValueAs(objectTypeClass());
- }
- }
- }
-
- private Object readAsObject(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
- try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
- return jsonParser.readValueAs(objectTypeClass());
- }
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/ReferenceOrObjectDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/ReferenceOrObjectDeserializer.java
deleted file mode 100644
index a378ee70..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/ReferenceOrObjectDeserializer.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package com.asyncapi.v2.jackson;
-
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException;
-
-import java.io.IOException;
-
-public abstract class ReferenceOrObjectDeserializer extends JsonDeserializer {
-
- abstract public Class objectTypeClass();
-
- abstract public Class> referenceClass();
-
- @Override
- public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
- ObjectCodec objectCodec = p.getCodec();
- JsonNode node = objectCodec.readTree(p);
-
- /*
- Problem:
- Both, Reference class and Schema class have $ref field.
- So, this is only reason why I receive next exception:
- "com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:
- Unrecognized field "title" (class com.asyncapi.v2._6_0.model.Reference),
- not marked as ignorable (one known property: "$ref"])"
- in case when Schema contains $ref.
- Solution:
- Try to deserialize reference. In case of exception, try to deserialize it as given ObjectType. In case of
- one more exception, throw it.
- TODO: Think how to improve.
- */
- try {
- return chooseKnownPojo(node, objectCodec);
- } catch (UnrecognizedPropertyException unrecognizedPropertyException) {
- return readAsObject(node, objectCodec);
- }
- }
-
- private Object chooseKnownPojo(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
- JsonNode ref = jsonNode.get("$ref");
- try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
- if (ref != null) {
- return jsonParser.readValueAs(referenceClass());
- } else {
- return jsonParser.readValueAs(objectTypeClass());
- }
- }
- }
-
- private Object readAsObject(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
- try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
- return jsonParser.readValueAs(objectTypeClass());
- }
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/SchemaItemsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/SchemaItemsDeserializer.java
deleted file mode 100644
index 4b90358f..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/SchemaItemsDeserializer.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.asyncapi.v2.jackson;
-
-import com.asyncapi.v2.schema.Schema;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.JsonNodeType;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-public class SchemaItemsDeserializer extends JsonDeserializer {
-
- @Override
- public Object deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException {
- ObjectCodec objectCodec = jsonParser.getCodec();
- JsonNode node = objectCodec.readTree(jsonParser);
- JsonNodeType nodeType = node.getNodeType();
- if (nodeType == JsonNodeType.OBJECT) {
- return readAsSchema(node, objectCodec);
- }
- if (nodeType == JsonNodeType.ARRAY) {
- return readAsListOfSchemas((ArrayNode) node, objectCodec);
- }
- return readAsObject(node, objectCodec);
- }
-
- private List readAsListOfSchemas(ArrayNode arrayNode, ObjectCodec objectCodec) throws IOException {
- List schemaList = new ArrayList<>();
- for (JsonNode childNode : arrayNode) {
- schemaList.add(readAsSchema(childNode, objectCodec));
- }
- return schemaList;
- }
-
- private Schema readAsSchema(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
- try (JsonParser parser = jsonNode.traverse(objectCodec)) {
- return parser.readValueAs(Schema.class);
- }
- }
-
- private Object readAsObject(JsonNode jsonNode, ObjectCodec objectCodec) throws IOException {
- try (JsonParser jsonParser = jsonNode.traverse(objectCodec)) {
- return jsonParser.readValueAs(Object.class);
- }
- }
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/binding/channel/ChannelBindingsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/binding/channel/ChannelBindingsDeserializer.java
deleted file mode 100644
index 0ed343fa..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/binding/channel/ChannelBindingsDeserializer.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.asyncapi.v2.jackson.binding.channel;
-
-import com.asyncapi.v2.Reference;
-import com.asyncapi.v2.binding.channel.amqp.AMQPChannelBinding;
-import com.asyncapi.v2.binding.channel.amqp1.AMQP1ChannelBinding;
-import com.asyncapi.v2.binding.channel.anypointmq.AnypointMQChannelBinding;
-import com.asyncapi.v2.binding.channel.googlepubsub.GooglePubSubChannelBinding;
-import com.asyncapi.v2.binding.channel.http.HTTPChannelBinding;
-import com.asyncapi.v2.binding.channel.ibmmq.IBMMQChannelBinding;
-import com.asyncapi.v2.binding.channel.jms.JMSChannelBinding;
-import com.asyncapi.v2.binding.channel.kafka.KafkaChannelBinding;
-import com.asyncapi.v2.binding.channel.mercure.MercureChannelBinding;
-import com.asyncapi.v2.binding.channel.mqtt.MQTTChannelBinding;
-import com.asyncapi.v2.binding.channel.mqtt5.MQTT5ChannelBinding;
-import com.asyncapi.v2.binding.channel.nats.NATSChannelBinding;
-import com.asyncapi.v2.binding.channel.pulsar.PulsarChannelBinding;
-import com.asyncapi.v2.binding.channel.redis.RedisChannelBinding;
-import com.asyncapi.v2.binding.channel.sns.SNSChannelBinding;
-import com.asyncapi.v2.binding.channel.solace.SolaceChannelBinding;
-import com.asyncapi.v2.binding.channel.sqs.SQSChannelBinding;
-import com.asyncapi.v2.binding.channel.stomp.STOMPChannelBinding;
-import com.asyncapi.v2.binding.channel.ws.WebSocketsChannelBinding;
-import com.asyncapi.v2.jackson.BindingsMapDeserializer;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.JsonNode;
-
-import java.io.IOException;
-
-/**
- * Serializes channel bindings map.
- *
- * @author Pavel Bodiachevskii
- */
-public class ChannelBindingsDeserializer extends BindingsMapDeserializer {
-
- public Object chooseKnownPojo(String bindingKey, JsonNode binding, ObjectCodec objectCodec) throws IOException {
- try (JsonParser jsonParser = binding.traverse(objectCodec)) {
- if (binding.get("$ref" ) != null) {
- return jsonParser.readValueAs(Reference.class);
- }
-
- switch (bindingKey) {
- case "amqp": return jsonParser.readValueAs(AMQPChannelBinding.class);
- case "amqp1": return jsonParser.readValueAs(AMQP1ChannelBinding.class);
- case "anypointmq": return jsonParser.readValueAs(AnypointMQChannelBinding.class);
- case "googlepubsub": return jsonParser.readValueAs(GooglePubSubChannelBinding.class);
- case "http": return jsonParser.readValueAs(HTTPChannelBinding.class);
- case "ibmmq": return jsonParser.readValueAs(IBMMQChannelBinding.class);
- case "jms": return jsonParser.readValueAs(JMSChannelBinding.class);
- case "kafka": return jsonParser.readValueAs(KafkaChannelBinding.class);
- case "mercure": return jsonParser.readValueAs(MercureChannelBinding.class);
- case "mqtt": return jsonParser.readValueAs(MQTTChannelBinding.class);
- case "mqtt5": return jsonParser.readValueAs(MQTT5ChannelBinding.class);
- case "nats": return jsonParser.readValueAs(NATSChannelBinding.class);
- case "pulsar": return jsonParser.readValueAs(PulsarChannelBinding.class);
- case "redis": return jsonParser.readValueAs(RedisChannelBinding.class);
- case "sns": return jsonParser.readValueAs(SNSChannelBinding.class);
- case "solace": return jsonParser.readValueAs(SolaceChannelBinding.class);
- case "sqs": return jsonParser.readValueAs(SQSChannelBinding.class);
- case "stomp": return jsonParser.readValueAs(STOMPChannelBinding.class);
- case "ws": return jsonParser.readValueAs(WebSocketsChannelBinding.class);
- default: return null;
- }
- }
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/binding/message/MessageBindingsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/binding/message/MessageBindingsDeserializer.java
deleted file mode 100644
index 991d2a06..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/binding/message/MessageBindingsDeserializer.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.asyncapi.v2.jackson.binding.message;
-
-import com.asyncapi.v2.Reference;
-import com.asyncapi.v2.binding.message.amqp.AMQPMessageBinding;
-import com.asyncapi.v2.binding.message.amqp1.AMQP1MessageBinding;
-import com.asyncapi.v2.binding.message.anypointmq.AnypointMQMessageBinding;
-import com.asyncapi.v2.binding.message.googlepubsub.GooglePubSubMessageBinding;
-import com.asyncapi.v2.binding.message.http.HTTPMessageBinding;
-import com.asyncapi.v2.binding.message.ibmmq.IBMMQMessageBinding;
-import com.asyncapi.v2.binding.message.jms.JMSMessageBinding;
-import com.asyncapi.v2.binding.message.kafka.KafkaMessageBinding;
-import com.asyncapi.v2.binding.message.mercure.MercureMessageBinding;
-import com.asyncapi.v2.binding.message.mqtt.MQTTMessageBinding;
-import com.asyncapi.v2.binding.message.mqtt5.MQTT5MessageBinding;
-import com.asyncapi.v2.binding.message.nats.NATSMessageBinding;
-import com.asyncapi.v2.binding.message.pulsar.PulsarMessageBinding;
-import com.asyncapi.v2.binding.message.redis.RedisMessageBinding;
-import com.asyncapi.v2.binding.message.sns.SNSMessageBinding;
-import com.asyncapi.v2.binding.message.solace.SolaceMessageBinding;
-import com.asyncapi.v2.binding.message.sqs.SQSMessageBinding;
-import com.asyncapi.v2.binding.message.stomp.STOMPMessageBinding;
-import com.asyncapi.v2.binding.message.ws.WebSocketsMessageBinding;
-import com.asyncapi.v2.jackson.BindingsMapDeserializer;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.JsonNode;
-
-import java.io.IOException;
-
-/**
- * Serializes message bindings map.
- *
- * @author Pavel Bodiachevskii
- */
-public class MessageBindingsDeserializer extends BindingsMapDeserializer {
-
- public Object chooseKnownPojo(String bindingKey, JsonNode binding, ObjectCodec objectCodec) throws IOException {
- try (JsonParser jsonParser = binding.traverse(objectCodec)) {
- if (binding.get("$ref" ) != null) {
- return jsonParser.readValueAs(Reference.class);
- }
-
- switch (bindingKey) {
- case "amqp": return jsonParser.readValueAs(AMQPMessageBinding.class);
- case "amqp1": return jsonParser.readValueAs(AMQP1MessageBinding.class);
- case "anypointmq": return jsonParser.readValueAs(AnypointMQMessageBinding.class);
- case "googlepubsub": return jsonParser.readValueAs(GooglePubSubMessageBinding.class);
- case "http": return jsonParser.readValueAs(HTTPMessageBinding.class);
- case "ibmmq": return jsonParser.readValueAs(IBMMQMessageBinding.class);
- case "jms": return jsonParser.readValueAs(JMSMessageBinding.class);
- case "kafka": return jsonParser.readValueAs(KafkaMessageBinding.class);
- case "mercure": return jsonParser.readValueAs(MercureMessageBinding.class);
- case "mqtt": return jsonParser.readValueAs(MQTTMessageBinding.class);
- case "mqtt5": return jsonParser.readValueAs(MQTT5MessageBinding.class);
- case "nats": return jsonParser.readValueAs(NATSMessageBinding.class);
- case "pulsar": return jsonParser.readValueAs(PulsarMessageBinding.class);
- case "redis": return jsonParser.readValueAs(RedisMessageBinding.class);
- case "sns": return jsonParser.readValueAs(SNSMessageBinding.class);
- case "solace": return jsonParser.readValueAs(SolaceMessageBinding.class);
- case "sqs": return jsonParser.readValueAs(SQSMessageBinding.class);
- case "stomp": return jsonParser.readValueAs(STOMPMessageBinding.class);
- case "ws": return jsonParser.readValueAs(WebSocketsMessageBinding.class);
- default: return null;
- }
- }
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/binding/operation/OperationBindingsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/binding/operation/OperationBindingsDeserializer.java
deleted file mode 100644
index 47392755..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/binding/operation/OperationBindingsDeserializer.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package com.asyncapi.v2.jackson.binding.operation;
-
-import com.asyncapi.v2.Reference;
-import com.asyncapi.v2.binding.operation.amqp.AMQPOperationBinding;
-import com.asyncapi.v2.binding.operation.amqp1.AMQP1OperationBinding;
-import com.asyncapi.v2.binding.operation.anypointmq.AnypointMQOperationBinding;
-import com.asyncapi.v2.binding.operation.googlepubsub.GooglePubSubOperationBinding;
-import com.asyncapi.v2.binding.operation.http.HTTPOperationBinding;
-import com.asyncapi.v2.binding.operation.ibmmq.IBMMQOperationBinding;
-import com.asyncapi.v2.binding.operation.jms.JMSOperationBinding;
-import com.asyncapi.v2.binding.operation.kafka.KafkaOperationBinding;
-import com.asyncapi.v2.binding.operation.mercure.MercureOperationBinding;
-import com.asyncapi.v2.binding.operation.mqtt.MQTTOperationBinding;
-import com.asyncapi.v2.binding.operation.mqtt5.MQTT5OperationBinding;
-import com.asyncapi.v2.binding.operation.nats.NATSOperationBinding;
-import com.asyncapi.v2.binding.operation.pulsar.PulsarOperationBinding;
-import com.asyncapi.v2.binding.operation.redis.RedisOperationBinding;
-import com.asyncapi.v2.binding.operation.sns.SNSOperationBinding;
-import com.asyncapi.v2.binding.operation.solace.SolaceOperationBinding;
-import com.asyncapi.v2.binding.operation.sqs.SQSOperationBinding;
-import com.asyncapi.v2.binding.operation.stomp.STOMPOperationBinding;
-import com.asyncapi.v2.binding.operation.ws.WebSocketsOperationBinding;
-import com.asyncapi.v2.jackson.BindingsMapDeserializer;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.JsonNode;
-
-import java.io.IOException;
-
-/**
- * Serializes operation bindings map.
- *
- * @version 2.6.0
- * @author Pavel Bodiachevskii
- */
-public class OperationBindingsDeserializer extends BindingsMapDeserializer {
-
- public Object chooseKnownPojo(String bindingKey, JsonNode binding, ObjectCodec objectCodec) throws IOException {
- try (JsonParser jsonParser = binding.traverse(objectCodec)) {
- if (binding.get("$ref" ) != null) {
- return jsonParser.readValueAs(Reference.class);
- }
-
- switch (bindingKey) {
- case "amqp": return jsonParser.readValueAs(AMQPOperationBinding.class);
- case "amqp1": return jsonParser.readValueAs(AMQP1OperationBinding.class);
- case "anypointmq": return jsonParser.readValueAs(AnypointMQOperationBinding.class);
- case "googlepubsub": return jsonParser.readValueAs(GooglePubSubOperationBinding.class);
- case "http": return jsonParser.readValueAs(HTTPOperationBinding.class);
- case "ibmmq": return jsonParser.readValueAs(IBMMQOperationBinding.class);
- case "jms": return jsonParser.readValueAs(JMSOperationBinding.class);
- case "kafka": return jsonParser.readValueAs(KafkaOperationBinding.class);
- case "mercure": return jsonParser.readValueAs(MercureOperationBinding.class);
- case "mqtt": return jsonParser.readValueAs(MQTTOperationBinding.class);
- case "mqtt5": return jsonParser.readValueAs(MQTT5OperationBinding.class);
- case "nats": return jsonParser.readValueAs(NATSOperationBinding.class);
- case "pulsar": return jsonParser.readValueAs(PulsarOperationBinding.class);
- case "redis": return jsonParser.readValueAs(RedisOperationBinding.class);
- case "sns": return jsonParser.readValueAs(SNSOperationBinding.class);
- case "solace": return jsonParser.readValueAs(SolaceOperationBinding.class);
- case "sqs": return jsonParser.readValueAs(SQSOperationBinding.class);
- case "stomp": return jsonParser.readValueAs(STOMPOperationBinding.class);
- case "ws": return jsonParser.readValueAs(WebSocketsOperationBinding.class);
- default: return null;
- }
- }
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/binding/server/ServerBindingsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/binding/server/ServerBindingsDeserializer.java
deleted file mode 100644
index a896051d..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/jackson/binding/server/ServerBindingsDeserializer.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.asyncapi.v2.jackson.binding.server;
-
-import com.asyncapi.v2.Reference;
-import com.asyncapi.v2.binding.server.amqp.AMQPServerBinding;
-import com.asyncapi.v2.binding.server.amqp1.AMQP1ServerBinding;
-import com.asyncapi.v2.binding.server.anypointmq.AnypointMQServerBinding;
-import com.asyncapi.v2.binding.server.googlepubsub.GooglePubSubServerBinding;
-import com.asyncapi.v2.binding.server.http.HTTPServerBinding;
-import com.asyncapi.v2.binding.server.ibmmq.IBMMQServerBinding;
-import com.asyncapi.v2.binding.server.jms.JMSServerBinding;
-import com.asyncapi.v2.binding.server.kafka.KafkaServerBinding;
-import com.asyncapi.v2.binding.server.mercure.MercureServerBinding;
-import com.asyncapi.v2.binding.server.mqtt.MQTTServerBinding;
-import com.asyncapi.v2.binding.server.mqtt5.MQTT5ServerBinding;
-import com.asyncapi.v2.binding.server.nats.NATSServerBinding;
-import com.asyncapi.v2.binding.server.pulsar.PulsarServerBinding;
-import com.asyncapi.v2.binding.server.redis.RedisServerBinding;
-import com.asyncapi.v2.binding.server.sns.SNSServerBinding;
-import com.asyncapi.v2.binding.server.solace.SolaceServerBinding;
-import com.asyncapi.v2.binding.server.sqs.SQSServerBinding;
-import com.asyncapi.v2.binding.server.stomp.STOMPServerBinding;
-import com.asyncapi.v2.binding.server.ws.WebSocketsServerBinding;
-import com.asyncapi.v2.jackson.BindingsMapDeserializer;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.ObjectCodec;
-import com.fasterxml.jackson.databind.JsonNode;
-
-import java.io.IOException;
-
-/**
- * Serializes server bindings map.
- *
- * @version 2.6.0
- * @author Pavel Bodiachevskii
- */
-public class ServerBindingsDeserializer extends BindingsMapDeserializer {
-
- @Override
- public Object chooseKnownPojo(String bindingKey, JsonNode binding, ObjectCodec objectCodec) throws IOException {
- try (JsonParser jsonParser = binding.traverse(objectCodec)) {
- if (binding.get("$ref" ) != null) {
- return jsonParser.readValueAs(Reference.class);
- }
-
- switch (bindingKey) {
- case "amqp": return jsonParser.readValueAs(AMQPServerBinding.class);
- case "amqp1": return jsonParser.readValueAs(AMQP1ServerBinding.class);
- case "anypointmq": return jsonParser.readValueAs(AnypointMQServerBinding.class);
- case "googlepubsub": return jsonParser.readValueAs(GooglePubSubServerBinding.class);
- case "http": return jsonParser.readValueAs(HTTPServerBinding.class);
- case "ibmmq": return jsonParser.readValueAs(IBMMQServerBinding.class);
- case "jms": return jsonParser.readValueAs(JMSServerBinding.class);
- case "kafka": return jsonParser.readValueAs(KafkaServerBinding.class);
- case "mercure": return jsonParser.readValueAs(MercureServerBinding.class);
- case "mqtt": return jsonParser.readValueAs(MQTTServerBinding.class);
- case "mqtt5": return jsonParser.readValueAs(MQTT5ServerBinding.class);
- case "nats": return jsonParser.readValueAs(NATSServerBinding.class);
- case "pulsar": return jsonParser.readValueAs(PulsarServerBinding.class);
- case "redis": return jsonParser.readValueAs(RedisServerBinding.class);
- case "sns": return jsonParser.readValueAs(SNSServerBinding.class);
- case "solace": return jsonParser.readValueAs(SolaceServerBinding.class);
- case "sqs": return jsonParser.readValueAs(SQSServerBinding.class);
- case "stomp": return jsonParser.readValueAs(STOMPServerBinding.class);
- case "ws": return jsonParser.readValueAs(WebSocketsServerBinding.class);
- default: return null;
- }
- }
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/schema/Schema.java b/asyncapi-core/src/main/java/com/asyncapi/v2/schema/Schema.java
deleted file mode 100644
index 42c71db3..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/schema/Schema.java
+++ /dev/null
@@ -1,696 +0,0 @@
-package com.asyncapi.v2.schema;
-
-import com.asyncapi.v2.ExtendableObject;
-import com.asyncapi.v2._0_0.jackson.model.schema.SchemasAdditionalPropertiesDeserializer;
-import com.asyncapi.v2._0_0.model.ExternalDocumentation;
-import com.asyncapi.v2.jackson.SchemaItemsDeserializer;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-import java.math.BigDecimal;
-import java.util.List;
-import java.util.Map;
-
-// TODO: Finish. Not all properties are present.
-// TODO: Write tests
-
-/**
- * The Schema Object allows the definition of input and output data types. These types can be objects,
- * but also primitives and arrays. This object is a superset of the JSON Schema Specification Draft 07 .
- *
- * Further information about the properties can be found in JSON Schema Core and JSON Schema Validation .
- * Unless stated otherwise, the property definitions follow the JSON Schema specification as referenced here.
- *
- * The AsyncAPI Schema Object is a JSON Schema vocabulary which extends JSON Schema Core and Validation vocabularies.
- * As such, any keyword available for those vocabularies is by definition available in AsyncAPI, and will work the
- * exact same way, including but not limited to defined properties.
- *
- * New properties may appear in this class after community requests.
- *
- * @see AnyncAPI Schema Object
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class Schema extends ExtendableObject {
-
- /*
- Schema Annotations
-
- Schema validation is a useful mechanism for annotating instance data
- with additional information. The rules for determining when and how
- annotations are associated with an instance are outlined in section
- 3.3.
-
- These general-purpose annotation keywords provide commonly used
- information for documentation and user interface display purposes.
- They are not intended to form a comprehensive set of features.
- Rather, additional vocabularies can be defined for more complex
- annotation-based applications.
- */
-
- /**
- * The value of these keyword MUST be a string.
- *
- * This keywords can be used to decorate a user interface with information about the data produced by this user
- * interface.
- *
- * A title will preferably be short
- */
- @Nullable
- @JsonProperty
- public String title;
-
- /**
- * The value of these keyword MUST be a string.
- *
- * This property definition was adjusted to the AsyncAPI Specification.
- * CommonMark syntax can be used for rich text representation.
- *
- * This keywords can be used to decorate a user interface with information about the data produced by this user
- * interface.
- *
- * A description will provide explanation about the purpose of the instance described by this schema.
- */
- @Nullable
- @JsonProperty
- public String description;
-
- /**
- * There are no restrictions placed on the value of this keyword. When multiple occurrences of this keyword are
- * applicable to a single sub-instance, implementations SHOULD remove duplicates.
- *
- * This keyword can be used to supply a default JSON value associated with a particular schema.
- * It is RECOMMENDED that a default value be valid against the associated schema.
- *
- * This property definition was adjusted to the AsyncAPI Specification.
- * The default value represents what would be assumed by the consumer of the input as the value of the schema if one
- * is not provided. Unlike JSON Schema, the value MUST conform to the defined type for the Schema Object defined at
- * the same level. For example, of type is string
, then default can be "foo"
but cannot be 1
.
- */
- @Nullable
- @JsonProperty("default")
- public Object defaultValue;
-
- /**
- * The value of this keyword MUST be a boolean. When multiple occurrences of this keyword are applicable to a
- * single sub-instance, the resulting value MUST be true if any occurrence specifies a true value, and MUST be false otherwise.
- *
- * If "readOnly" has a value of boolean true, it indicates that the value of the instance is managed exclusively by the owning authority,
- * and attempts by an application to modify the value of this property are expected to be ignored or rejected by that owning authority.
- *
- * An instance document that is marked as "readOnly for the entire document MAY be ignored if sent to the owning authority, or MAY
- * result in an error, at the authority's discretion.
- *
- * For example, "readOnly" would be used to mark a database-generated serial number as read-only, while "writeOnly" would be used to mark a
- * password input field.
- *
- * This keyword can be used to assist in user interface instance generation. In particular, an application MAY choose to use a widget
- * that hides input values as they are typed for write-only fields.
- *
- * Omitting this keyword has the same behavior as values of false.
- */
- @Nullable
- @JsonProperty
- public Boolean readOnly;
-
- /**
- * The value of this keyword MUST be a boolean. When multiple occurrences of this keyword are applicable to a
- * single sub-instance, the resulting value MUST be true if any occurrence specifies a true value, and MUST be false otherwise.
- *
- * If "writeOnly" has a value of boolean true, it indicates that the value is never present when the instance is retrieved from the owning
- * authority. It can be present when sent to the owning authority to update or create the document (or the resource it represents), but it
- * will not be included in any updated or newly created version of the instance.
- *
- * An instance document that is marked as "writeOnly" for the entire document MAY be returned as a blank document of some sort, or MAY
- * produce an error upon retrieval, or have the retrieval request ignored, at the authority's discretion.
- *
- * This keyword can be used to assist in user interface instance generation. In particular, an application MAY choose to use a widget
- * that hides input values as they are typed for write-only fields.
- *
- * Omitting this keyword has the same behavior as values of false.
- */
- @Nullable
- @JsonProperty
- public Boolean writeOnly;
-
- /**
- * The value of this keyword MUST be an array. There are no restrictions placed on the values within the array.
- * When multiple occurrences of this keyword are applicable to a single sub-instance, implementations MUST provide
- * a flat array of all values rather than an array of arrays.
- *
- * This keyword can be used to provide sample JSON values associated with a particular schema, for the purpose of
- * illustrating usage. It is RECOMMENDED that these values be valid against the associated schema.
- *
- * Implementations MAY use the value(s) of "default", if present, as an additional example. If "examples" is absent,
- * "default" MAY still be used in this manner.
- */
- @Nullable
- @JsonProperty
- public List examples;
-
- @Nullable
- @JsonProperty("$ref")
- private String ref;
-
- /*
- String-Encoding Non-JSON Data
-
- Foreword
-
- Properties defined in this section indicate that an instance contains
- non-JSON data encoded in a JSON string. They describe the type of
- content and how it is encoded.
-
- These properties provide additional information required to interpret
- JSON data as rich multimedia documents.
-
- Implementation Requirements
-
- The content keywords function as both annotations (Section 3.3) and
- as assertions (Section 3.2). While no special effort is required to
- implement them as annotations conveying how applications can
- interpret the data in the string, implementing validation of
- conformance to the media type and encoding is non-trivial.
-
- Implementations MAY support the "contentMediaType" and
- "contentEncoding" keywords as validation assertions. Should they
- choose to do so, they SHOULD offer an option to disable validation
- for these keywords.
- */
-
- /**
- * If the instance value is a string, this property defines that the string SHOULD be interpreted as binary data and
- * decoded using the encoding named by this property. RFC 2045 , Sec 6.1 [RFC2045 ] lists the possible values for this property.
- *
- * The value of this property MUST be a string.
- *
- * The value of this property SHOULD be ignored if the instance described is not a string.
- */
- @Nullable
- @JsonProperty
- private String contentEncoding;
-
- /**
- * The value of this property must be a media type, as defined by RFC 2046 [RFC2046 ]. This property defines the media
- * type of instances which this schema defines.
- *
- * The value of this property MUST be a string.
- *
- * The value of this property SHOULD be ignored if the instance described is not a string.
- *
- * If the "contentEncoding" property is not present, but the instance value is a string, then the value of this property SHOULD specify a
- * text document type, and the character set SHOULD be the character set into which the JSON string value was decoded (for which the default
- * is Unicode).
- */
- @Nullable
- @JsonProperty
- private String contentMediaType;
-
- /*
- Validation.
- */
-
- /*
- Validation Keywords for Any Instance Type
- */
-
- /**
- * The value of this keyword MUST be either a string or an array. If it is an array, elements of the array MUST
- * be strings and MUST be unique.
- *
- * String values MUST be one of the six primitive types ("null", "boolean", "object", "array", "number", or "string"),
- * or "integer" which matches any number with a zero fractional part.
- *
- * An instance validates if and only if the instance is in any of the sets listed for this keyword.
- *
- */
- @Nullable
- @JsonProperty
- public Object type;
-
- /**
- * The value of this keyword MUST be an array. This array SHOULD have at least one element. Elements in the array SHOULD be unique.
- *
- * An instance validates successfully against this keyword if its value is equal to one of the elements in this keyword's array value.
- *
- * Elements in the array might be of any value, including null.
- */
- @Nullable
- @JsonProperty("enum")
- public List enumValue;
-
- /**
- * The value of this keyword MAY be of any type, including null.
- *
- * An instance validates successfully against this keyword if its value is equal to the value of the keyword.
- */
- @Nullable
- @JsonProperty("const")
- public Object constValue;
-
- /*
- Validation Keywords for Numeric Instances (number and integer)
- */
-
- /**
- * The value of "multipleOf" MUST be a number, strictly greater than 0.
- *
- * A numeric instance is valid only if division by this keyword's value results in an integer.
- */
- @Nullable
- @JsonProperty
- public Number multipleOf;
-
- /**
- * The value of "maximum" MUST be a number, representing an inclusive upper limit for a numeric instance.
- *
- * If the instance is a number, then this keyword validates only if the instance is less than or exactly equal to "maximum".
- */
- @Nullable
- @JsonProperty
- public BigDecimal maximum;
-
- /**
- * The value of "exclusiveMaximum" MUST be number, representing an exclusive upper limit for a numeric instance.
- *
- * If the instance is a number, then the instance is valid only if it has a value strictly less than (not equal to) "exclusiveMaximum".
- */
- @Nullable
- @JsonProperty
- public BigDecimal exclusiveMaximum;
-
- /**
- * The value of "minimum" MUST be a number, representing an inclusive lower limit for a numeric instance.
- *
- * If the instance is a number, then this keyword validates only if the instance is greater than or exactly equal to "minimum".
- */
- @Nullable
- @JsonProperty
- public BigDecimal minimum;
-
- /**
- * The value of "exclusiveMinimum" MUST be number, representing an exclusive lower limit for a numeric instance.
- *
- * If the instance is a number, then the instance is valid only if it has a value strictly greater than (not equal to) "exclusiveMinimum".
- */
- @Nullable
- @JsonProperty
- public BigDecimal exclusiveMinimum;
-
- /*
- Validation Keywords for Strings
- */
-
- /**
- * The value of this keyword MUST be a non-negative integer.
- *
- * A string instance is valid against this keyword if its length is less than, or equal to, the value of this keyword.
- *
- * The length of a string instance is defined as the number of its characters as defined by RFC 7159 [RFC7159 ].
- */
- @Nullable
- @JsonProperty
- public Integer maxLength;
-
- /**
- * The value of this keyword MUST be a non-negative integer.
- *
- * A string instance is valid against this keyword if its length is greater than, or equal to, the value of this keyword.
- *
- * The length of a string instance is defined as the number of its characters as defined by RFC 7159 [RFC7159 ].
- *
- * Omitting this keyword has the same behavior as a value of 0.
- */
- @Nullable
- @JsonProperty
- public Integer minLength;
-
- /**
- * The value of this keyword MUST be a string. This string SHOULD be a valid regular expression, according
- * to the ECMA 262 regular expression dialect.
- *
- * A string instance is considered valid if the regular expression matches the instance successfully.
- * Recall: regular expressions are not implicitly anchored.
- */
- @Nullable
- @JsonProperty
- public String pattern;
-
- /*
- Validation Keywords for Arrays
- */
-
- /**
- * The value of "items" MUST be either a valid JSON Schema or an array of valid JSON Schemas.
- *
- * This keyword determines how child instances validate for arrays, and does not directly validate the immediate instance itself.
- *
- * If "items" is a schema, validation succeeds if all elements in the array successfully validate against that schema.
- *
- * If "items" is an array of schemas, validation succeeds if each element of the instance validates against the schema at the same
- * position, if any.
- *
- * Omitting this keyword has the same behavior as an empty schema.
- */
- @Nullable
- @JsonDeserialize(using = SchemaItemsDeserializer.class)
- public Object items;
-
- /**
- * The value of "additionalItems" MUST be a valid JSON Schema.
- *
- * This keyword determines how child instances validate for arrays, and does not directly validate the immediate instance itself.
- *
- * If "items" is an array of schemas, validation succeeds if every instance element at a position greater than the size of "items"
- * validates against "additionalItems".
- *
- * Otherwise, "additionalItems" MUST be ignored, as the "items" schema (possibly the default value of an empty schema) is applied
- * to all elements.
- *
- * Omitting this keyword has the same behavior as an empty schema.
- */
- @Nullable
- public Schema additionalItems;
-
- /**
- * The value of this keyword MUST be a non-negative integer.
- *
- * An array instance is valid against "maxItems" if its size is less than, or equal to, the value of this keyword.
- */
- @Nullable
- @JsonProperty
- public Integer maxItems;
-
- /**
- * The value of this keyword MUST be a non-negative integer.
- *
- * An array instance is valid against "minItems" if its size is greater than, or equal to, the value of this keyword.
- *
- * Omitting this keyword has the same behavior as a value of 0.
- */
- @Nullable
- @JsonProperty
- public Integer minItems;
-
- /**
- * The value of this keyword MUST be a boolean.
- *
- * If this keyword has boolean value false, the instance validates successfully. If it has boolean value true,
- * the instance validates successfully if all of its elements are unique.
- *
- * Omitting this keyword has the same behavior as a value of false.
- */
- @Nullable
- @JsonProperty
- public Boolean uniqueItems;
-
- /**
- * The value of this keyword MUST be a valid JSON Schema.
- *
- * An array instance is valid against "contains" if at least one of its elements is valid against the given schema.
- */
- @Nullable
- @JsonProperty
- public Schema contains;
-
- /*
- Validation Keywords for Objects
- */
-
- /**
- * The value of this keyword MUST be a non-negative integer.
- *
- * An object instance is valid against "maxProperties" if its number of properties is less than, or equal to,
- * the value of this keyword.
- */
- @Nullable
- @JsonProperty
- public Integer maxProperties;
-
- /**
- * The value of this keyword MUST be a non-negative integer.
- *
- * An object instance is valid against "minProperties" if its number of properties is greater than, or equal to,
- * the value of this keyword.
- *
- * Omitting this keyword has the same behavior as a value of 0.
- */
- @Nullable
- @JsonProperty
- public Integer minProperties;
-
- /**
- * The value of this keyword MUST be an array. Elements of this array, if any, MUST be strings, and MUST be unique.
- *
- * An object instance is valid against this keyword if every item in the array is the name of a property in the instance.
- *
- * Omitting this keyword has the same behavior as an empty array.
- */
- @Nullable
- @JsonProperty
- public List required;
-
- /**
- * The value of "properties" MUST be an object. Each value of this object MUST be a valid JSON Schema.
- *
- * This keyword determines how child instances validate for objects, and does not directly validate the immediate
- * instance itself.
- *
- * Validation succeeds if, for each name that appears in both the instance and as a name within this keyword's value,
- * the child instance for that name successfully validates against the corresponding schema.
- *
- * Omitting this keyword has the same behavior as an empty object.
- */
- @Nullable
- @JsonProperty
- public Map properties;
-
- /**
- * The value of "patternProperties" MUST be an object. Each property name of this object SHOULD be a valid regular
- * expression, according to the ECMA 262 regular expression dialect. Each property value of this object MUST be a
- * valid JSON Schema.
- *
- * This keyword determines how child instances validate for objects, and does not directly validate the immediate
- * instance itself. Validation of the primitive instance type against this keyword always succeeds.
- *
- * Validation succeeds if, for each instance name that matches any regular expressions that appear as a property name
- * in this keyword's value, the child instance for that name successfully validates against each schema that corresponds
- * to a matching regular expression.
- *
- * Omitting this keyword has the same behavior as an empty object.
- */
- @Nullable
- @JsonProperty
- public Map patternProperties;
-
- /**
- * The value of "additionalProperties" MUST be a valid JSON Schema.
- *
- * This keyword determines how child instances validate for objects, and does not directly validate the immediate
- * instance itself.
- *
- * Validation with "additionalProperties" applies only to the child values of instance names that do not match any
- * names in "properties", and do not match any regular expression in "patternProperties".
- *
- * For all such properties, validation succeeds if the child instance validates against the "additionalProperties" schema.
- *
- * Omitting this keyword has the same behavior as an empty schema.
- */
- @Nullable
- @JsonProperty
- @JsonDeserialize(using = SchemasAdditionalPropertiesDeserializer.class)
- public Object additionalProperties;
-
- /**
- * [[CREF1: This keyword may be split into two, with the variation that uses an array of property names rather than a
- * subschema getting a new name. The dual behavior is confusing and relatively difficult to implement. In the previous
- * draft, we proposed dropping the keyword altogether, or dropping one of its forms, but we received feedback in support of
- * keeping it. See issues #442 and #528 at https://github.com/json-schema-org/json-schema-spec/issues for further discussion.
- * Further feedback is encouraged.]]
- *
- * This keyword specifies rules that are evaluated if the instance is an object and contains a certain property.
- *
- * This keyword's value MUST be an object. Each property specifies a dependency. Each dependency value MUST be an array
- * or a valid JSON Schema.
- *
- * If the dependency value is a subschema, and the dependency key is a property in the instance, the entire instance must validate
- * against the dependency value.
- *
- * If the dependency value is an array, each element in the array, if any, MUST be a string, and MUST be unique. If the dependency
- * key is a property in the instance, each of the items in the dependency value must be a property that exists in the instance.
- *
- * Omitting this keyword has the same behavior as an empty object.
- */
- @Nullable
- @JsonProperty
- public Object dependencies;
-
- /**
- * The value of "propertyNames" MUST be a valid JSON Schema.
- *
- * If the instance is an object, this keyword validates if every property name in the instance validates against the provided schema.
- * Note the property name that the schema is testing will always be a string.
- *
- * Omitting this keyword has the same behavior as an empty schema.
- */
- @Nullable
- @JsonProperty
- public Schema propertyNames;
-
- /*
- Keywords for Applying Subschemas Conditionally
-
- These keywords work together to implement conditional application of
- a subschema based on the outcome of another subschema.
-
- These keywords MUST NOT interact with each other across subschema
- boundaries. In other words, an "if" in one branch of an "allOf" MUST
- NOT have an impact on a "then" or "else" in another branch.
-
- There is no default behavior for any of these keywords when they are
- not present. In particular, they MUST NOT be treated as if present
- with an empty schema, and when "if" is not present, both "then" and
- "else" MUST be entirely ignored.
- */
-
- /**
- * This keyword's value MUST be a valid JSON Schema.
- *
- * This validation outcome of this keyword's subschema has no direct effect on the overall validation result.
- * Rather, it controls which of the "then" or "else" keywords are evaluated.
- *
- * Instances that successfully validate against this keyword's subschema MUST also be valid against the subschema
- * value of the "then" keyword, if present.
- *
- * Instances that fail to validate against this keyword's subschema MUST also be valid against the subschema value of
- * the "else" keyword, if present.
- *
- * If annotations (Section 3.3 ) are being collected, they are collected from this keyword's subschema in the usual way,
- * including when the keyword is present without either "then" or "else".
- */
- @JsonProperty("if")
- @Nullable
- public Schema ifValue;
-
- /**
- * This keyword's value MUST be a valid JSON Schema.
- *
- * When "if" is present, and the instance successfully validates against its subschema, then valiation succeeds against
- * this keyword if the instance also successfully validates against this keyword's subschema.
- *
- * This keyword has no effect when "if" is absent, or when the instance fails to validate against its subschema.
- * Implementations MUST NOT evaluate the instance against this keyword, for either validation or annotation collection
- * purposes, in such cases.
- */
- @JsonProperty("then")
- @Nullable
- public Schema thenValue;
-
- /**
- * This keyword's value MUST be a valid JSON Schema.
- *
- * When "if" is present, and the instance fails to validate against its subschema, then valiation succeeds against this
- * keyword if the instance successfully validates against this keyword's subschema.
- *
- * This keyword has no effect when "if" is absent, or when the instance successfully validates against its subschema.
- * Implementations MUST NOT evaluate the instance against this keyword, for either validation or annotation collection
- * purposes, in such cases.
- */
- @JsonProperty("else")
- @Nullable
- public Schema elseValue;
-
- /*
- Keywords for Applying Subschemas With Boolean Logic
- */
-
- /**
- * This keyword's value MUST be a non-empty array. Each item of the array MUST be a valid JSON Schema.
- *
- * An instance validates successfully against this keyword if it validates successfully against all schemas defined
- * by this keyword's value.
- */
- @Nullable
- @JsonProperty
- public List allOf;
-
- /**
- * This keyword's value MUST be a non-empty array. Each item of the array MUST be a valid JSON Schema.
- *
- * An instance validates successfully against this keyword if it validates successfully against at least one schema
- * defined by this keyword's value.
- */
- @Nullable
- @JsonProperty
- public List anyOf;
-
- /**
- * This keyword's value MUST be a non-empty array. Each item of the array MUST be a valid JSON Schema.
- *
- * An instance validates successfully against this keyword if it validates successfully against exactly one schema
- * defined by this keyword's value.
- */
- @Nullable
- @JsonProperty
- public List oneOf;
-
- /**
- * This keyword's value MUST be a valid JSON Schema.
- *
- * An instance is valid against this keyword if it fails to validate successfully against the schema defined by this keyword.
- */
- @Nullable
- @JsonProperty
- public Schema not;
-
- // Fields defined in AsyncAPI below
-
- /*
- The following properties are taken from the JSON Schema definition but their definitions were adjusted to the AsyncAPI Specification.
- */
- /**
- * See Data Type Formats for further details.
- * While relying on JSON Schema's defined formats, the AsyncAPI Specification offers a few additional predefined formats.
- */
- @Nullable
- @JsonProperty
- public Object format;
-
- /*
- In addition to the JSON Schema fields, the following AsyncAPI vocabulary fields MAY be used for further schema documentation:
- */
- /**
- * Adds support for polymorphism. The discriminator is the schema property name that is used to differentiate between
- * other schema that inherit this schema.
- *
- * The property name used MUST be defined at this schema and it MUST be in the required
property list.
- * When used, the value MUST be the name of this schema or any schema that inherits it. See Composition and Inheritance for more details .
- */
- @Nullable
- @JsonProperty
- public String discriminator;
- /**
- * Additional external documentation for this schema.
- */
- @Nullable
- @JsonProperty
- public ExternalDocumentation externalDocs;
-
- /**
- * Specifies that a schema is deprecated and SHOULD be transitioned out of usage. Default value is false
.
- */
- @Nullable
- @JsonProperty
- public Boolean deprecated;
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/schema/Type.java b/asyncapi-core/src/main/java/com/asyncapi/v2/schema/Type.java
deleted file mode 100644
index 1a0572aa..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/schema/Type.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.asyncapi.v2.schema;
-
-/**
- * @author Pavel Bodiachevskii
- */
-public class Type {
-
- public final static String NULL = "null";
- public final static String BOOLEAN = "boolean";
- public final static String OBJECT = "object";
- public final static String ARRAY = "array";
- public final static String NUMBER = "number";
- public final static String STRING = "string";
- public final static String INTEGER = "integer";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/ApiKeySecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/ApiKeySecurityScheme.java
deleted file mode 100644
index f9dd75d4..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/ApiKeySecurityScheme.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.asyncapi.v2.security_scheme;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * @version 2.6.0
- * @see SecurityScheme
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class ApiKeySecurityScheme extends SecurityScheme {
-
- /**
- * REQUIRED.
- *
- * The location of the API key.
- */
- @NotNull
- private ApiKeyLocation in = ApiKeyLocation.USER;
-
- @Builder(builderMethodName = "apiKeyBuilder")
- public ApiKeySecurityScheme(@Nullable String description,
- @NotNull ApiKeyLocation in) {
- super(Type.API_KEY, description);
- this.in = in;
- }
-
- public enum ApiKeyLocation {
-
- @JsonProperty("user")
- USER,
- @JsonProperty("password")
- PASSWORD
-
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/OpenIdConnectSecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/OpenIdConnectSecurityScheme.java
deleted file mode 100644
index e1e52549..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/OpenIdConnectSecurityScheme.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package com.asyncapi.v2.security_scheme;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * @version 2.6.0
- * @see SecurityScheme
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class OpenIdConnectSecurityScheme extends SecurityScheme {
-
- /**
- * REQUIRED.
- *
- * OpenId Connect URL to discover OAuth2 configuration values. This MUST be in the form of a URL.
- */
- @NotNull
- private String openIdConnectUrl = "";
-
- @Builder(builderMethodName = "openIdBuilder")
- public OpenIdConnectSecurityScheme(@Nullable String description,
- @NotNull String openIdConnectUrl) {
- super(Type.OPENID_CONNECT, description);
- this.openIdConnectUrl = openIdConnectUrl;
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/SecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/SecurityScheme.java
deleted file mode 100644
index c250e778..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/SecurityScheme.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package com.asyncapi.v2.security_scheme;
-
-import com.asyncapi.v2.ExtendableObject;
-import com.asyncapi.v2.security_scheme.http.HttpApiKeySecurityScheme;
-import com.asyncapi.v2.security_scheme.http.HttpSecurityScheme;
-import com.asyncapi.v2.security_scheme.oauth2.OAuth2SecurityScheme;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.annotation.JsonSubTypes;
-import com.fasterxml.jackson.annotation.JsonTypeInfo;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Defines a security scheme that can be used by the operations. Supported schemes are:
- *
- * User/Password.
- * API key (either as user or as password).
- * X.509 certificate.
- * End-to-end encryption (either symmetric or asymmetric).
- * HTTP authentication.
- * HTTP API key.
- * OAuth2’s common flows (Implicit, Resource Owner Protected Credentials, Client Credentials and Authorization Code) as defined in RFC6749 .
- * OpenID Connect Discovery.
- * SASL (Simple Authentication and Security Layer) as defined in RFC4422 .
- *
- *
- * This object MAY be extended with Specification Extensions .
- *
- * @version 2.6.0
- * @see Security Scheme Object
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@JsonTypeInfo(
- use = JsonTypeInfo.Id.NAME,
- include = JsonTypeInfo.As.EXISTING_PROPERTY,
- property = "type",
- visible = true
-)
-@JsonSubTypes({
- @JsonSubTypes.Type(value = SecurityScheme.class, name = "userPassword"),
- @JsonSubTypes.Type(value = ApiKeySecurityScheme.class, name = "apiKey"),
- @JsonSubTypes.Type(value = SecurityScheme.class, name = "X509"),
- @JsonSubTypes.Type(value = SecurityScheme.class, name = "symmetricEncryption"),
- @JsonSubTypes.Type(value = SecurityScheme.class, name = "asymmetricEncryption"),
- @JsonSubTypes.Type(value = HttpApiKeySecurityScheme.class, name = "httpApiKey"),
- @JsonSubTypes.Type(value = HttpSecurityScheme.class, name = "http"),
- @JsonSubTypes.Type(value = OAuth2SecurityScheme.class, name = "oauth2"),
- @JsonSubTypes.Type(value = OpenIdConnectSecurityScheme.class, name = "openIdConnect"),
- @JsonSubTypes.Type(value = SecurityScheme.class, name = "plain"),
- @JsonSubTypes.Type(value = SecurityScheme.class, name = "scramSha256"),
- @JsonSubTypes.Type(value = SecurityScheme.class, name = "scramSha512"),
- @JsonSubTypes.Type(value = SecurityScheme.class, name = "gssapi"),
-})
-@EqualsAndHashCode(callSuper = true)
-public class SecurityScheme extends ExtendableObject {
-
- /**
- * REQUIRED.
- *
- * The type of the security scheme. Valid values are:
- *
- * userPassword
- * apiKey
- * X509
- * symmetricEncryption
- * asymmetricEncryption
- * httpApiKey
- * http
- * oauth2
- * openIdConnect
- *
- */
- @NotNull
- @Builder.Default
- private Type type = Type.USER_PASSWORD;
-
- /**
- * A short description for security scheme. CommonMark syntax MAY be used for rich text representation.
- */
- @Nullable
- private String description;
-
- public enum Type {
-
- @JsonProperty("userPassword")
- USER_PASSWORD,
- @JsonProperty("apiKey")
- API_KEY,
- @JsonProperty("X509")
- X509,
- @JsonProperty("symmetricEncryption")
- SYMMETRIC_ENCRYPTION,
- @JsonProperty("asymmetricEncryption")
- ASYMMETRIC_ENCRYPTION,
- @JsonProperty("httpApiKey")
- HTTP_API_KEY,
- @JsonProperty("http")
- HTTP,
- @JsonProperty("oauth2")
- OAUTH2,
- @JsonProperty("openIdConnect")
- OPENID_CONNECT,
- @JsonProperty("plain")
- PLAIN,
- @JsonProperty("scramSha256")
- SCRAM_SHA256,
- @JsonProperty("scramSha512")
- SCRAM_SHA512,
- @JsonProperty("gssapi")
- GSSAPI
-
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/http/HttpApiKeySecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/http/HttpApiKeySecurityScheme.java
deleted file mode 100644
index 13786bae..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/http/HttpApiKeySecurityScheme.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package com.asyncapi.v2.security_scheme.http;
-
-import com.asyncapi.v2.security_scheme.SecurityScheme;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * @version 2.6.0
- * @see SecurityScheme
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class HttpApiKeySecurityScheme extends SecurityScheme {
-
- /**
- * REQUIRED.
- *
- * The name of the header, query or cookie parameter to be used.
- */
- @NotNull
- private String name = "";
-
- /**
- * REQUIRED.
- *
- * The location of the API key.
- */
- @Nullable
- private ApiKeyLocation in;
-
- @Builder(builderMethodName = "httpApiKeyBuilder")
- public HttpApiKeySecurityScheme(@Nullable String description,
- @NotNull String name,
- @Nullable ApiKeyLocation in) {
- super(Type.HTTP_API_KEY, description);
- this.name = name;
- this.in = in;
- }
-
- public enum ApiKeyLocation {
-
- @JsonProperty("query")
- QUERY,
- @JsonProperty("header")
- HEADER,
- @JsonProperty("cookie")
- COOKIE
-
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/http/HttpSecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/http/HttpSecurityScheme.java
deleted file mode 100644
index 63b77d0a..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/http/HttpSecurityScheme.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.asyncapi.v2.security_scheme.http;
-
-import com.asyncapi.v2.security_scheme.SecurityScheme;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * @version 2.6.0
- * @see SecurityScheme
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class HttpSecurityScheme extends SecurityScheme {
-
- /**
- * REQUIRED.
- *
- * The name of the HTTP Authorization scheme to be used in the Authorization header as defined in RFC7235 .
- */
- @NotNull
- private String scheme = "";
-
- /**
- * A hint to the client to identify how the bearer token is formatted. Bearer tokens are usually generated
- * by an authorization server, so this information is primarily for documentation purposes.
- */
- @Nullable
- private String bearerFormat;
-
- @Builder(builderMethodName = "httpBuilder")
- public HttpSecurityScheme(@Nullable String description,
- @NotNull String scheme,
- @Nullable String bearerFormat) {
- super(Type.HTTP, description);
- this.scheme = scheme;
- this.bearerFormat = bearerFormat;
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/OAuth2SecurityScheme.java b/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/OAuth2SecurityScheme.java
deleted file mode 100644
index 7bb2b660..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/OAuth2SecurityScheme.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package com.asyncapi.v2.security_scheme.oauth2;
-
-import com.asyncapi.v2.security_scheme.SecurityScheme;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * @version 2.6.0
- * @see SecurityScheme
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class OAuth2SecurityScheme extends SecurityScheme {
-
- /**
- * REQUIRED.
- *
- * An object containing configuration information for the flow types supported.
- */
- @NotNull
- private OAuthFlows flows = new OAuthFlows();
-
- @Builder(builderMethodName = "oauth2Builder")
- public OAuth2SecurityScheme(@Nullable String description,
- @NotNull OAuthFlows flows) {
- super(Type.OAUTH2, description);
- this.flows = flows;
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/OAuthFlows.java b/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/OAuthFlows.java
deleted file mode 100644
index 835b636f..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/OAuthFlows.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package com.asyncapi.v2.security_scheme.oauth2;
-
-import com.asyncapi.v2.ExtendableObject;
-import com.asyncapi.v2.security_scheme.oauth2.flow.AuthorizationCodeOAuthFlow;
-import com.asyncapi.v2.security_scheme.oauth2.flow.ClientCredentialsOAuthFlow;
-import com.asyncapi.v2.security_scheme.oauth2.flow.ImplicitOAuthFlow;
-import com.asyncapi.v2.security_scheme.oauth2.flow.PasswordOAuthFlow;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * Allows configuration of the supported OAuth Flows.
- *
- * This object MAY be extended with Specification Extensions .
- *
- * @version 2.6.0
- * @see OAuth Flows Object
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class OAuthFlows extends ExtendableObject {
-
- /**
- * Configuration for the OAuth Implicit flow
- */
- @Nullable
- private ImplicitOAuthFlow implicit;
-
- /**
- * Configuration for the OAuth Resource Owner Protected Credentials flow
- */
- @Nullable
- private PasswordOAuthFlow password;
-
- /**
- * Configuration for the OAuth Client Credentials flow.
- */
- @Nullable
- private ClientCredentialsOAuthFlow clientCredentials;
-
- /**
- * Configuration for the OAuth Authorization Code flow
- */
- @Nullable
- private AuthorizationCodeOAuthFlow authorizationCode;
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/AuthorizationCodeOAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/AuthorizationCodeOAuthFlow.java
deleted file mode 100644
index 34aeba7f..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/AuthorizationCodeOAuthFlow.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.asyncapi.v2.security_scheme.oauth2.flow;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Map;
-
-/**
- * This object MAY be extended with Specification Extensions .
- *
- * @version 2.6.0
- * @see OAuth Flow Object
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class AuthorizationCodeOAuthFlow extends OAuthFlow {
-
- /**
- * REQUIRED.
- *
- * The authorization URL to be used for this flow. This MUST be in the form of an absolute URL.
- */
- @NotNull
- private String authorizationUrl = "";
-
- /**
- * REQUIRED.
- *
- * The token URL to be used for this flow. This MUST be in the form of an absolute URL.
- */
- @NotNull
- private String tokenUrl = "";
-
- @Builder(builderMethodName = "authorizationCodeBuilder")
- public AuthorizationCodeOAuthFlow(@Nullable String refreshUrl,
- @NotNull Map scopes,
- @NotNull String authorizationUrl,
- @NotNull String tokenUrl) {
- super(refreshUrl, scopes);
- this.authorizationUrl = authorizationUrl;
- this.tokenUrl = tokenUrl;
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/ClientCredentialsOAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/ClientCredentialsOAuthFlow.java
deleted file mode 100644
index 15e05e07..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/ClientCredentialsOAuthFlow.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.asyncapi.v2.security_scheme.oauth2.flow;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Map;
-
-/**
- * @version 2.6.0
- * @see OAuth Flow Object
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class ClientCredentialsOAuthFlow extends OAuthFlow {
-
- /**
- * REQUIRED.
- *
- * The token URL to be used for this flow. This MUST be in the form of a URL.
- */
- @NotNull
- private String tokenUrl = "";
-
- @Builder(builderMethodName = "clientCredentialsBuilder")
- public ClientCredentialsOAuthFlow(@Nullable String refreshUrl,
- @NotNull Map scopes,
- @NotNull String tokenUrl) {
- super(refreshUrl, scopes);
- this.tokenUrl = tokenUrl;
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/ImplicitOAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/ImplicitOAuthFlow.java
deleted file mode 100644
index 6518da51..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/ImplicitOAuthFlow.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.asyncapi.v2.security_scheme.oauth2.flow;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Map;
-
-/**
- * @version 2.6.0
- * @see OAuth Flow Object
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class ImplicitOAuthFlow extends OAuthFlow {
-
- /**
- * REQUIRED.
- *
- * The authorization URL to be used for this flow. This MUST be in the form of a URL
- */
- @NotNull
- private String authorizationUrl = "";
-
- @Builder(builderMethodName = "implicitBuilder")
- public ImplicitOAuthFlow(@Nullable String refreshUrl,
- @NotNull Map scopes,
- @NotNull String authorizationUrl) {
- super(refreshUrl, scopes);
- this.authorizationUrl = authorizationUrl;
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/OAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/OAuthFlow.java
deleted file mode 100644
index 27e63b29..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/OAuthFlow.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package com.asyncapi.v2.security_scheme.oauth2.flow;
-
-import com.asyncapi.v2.ExtendableObject;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Configuration details for a supported OAuth Flow
- *
- * This object MAY be extended with Specification Extensions .
- *
- * @version 2.6.0
- * @see OAuth Flow Object
- * @author Pavel Bodiachevskii
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class OAuthFlow extends ExtendableObject {
-
- /**
- * The URL to be used for obtaining refresh tokens. This MUST be in the form of an absolute URL.
- */
- @Nullable
- @Builder.Default
- private String refreshUrl = "";
-
- /**
- * REQUIRED.
- *
- * The available scopes for the OAuth2 security scheme. A map between the scope name and a short description for it.
- */
- @NotNull
- @Builder.Default
- private Map scopes = new HashMap<>();
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/PasswordOAuthFlow.java b/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/PasswordOAuthFlow.java
deleted file mode 100644
index 693d219c..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v2/security_scheme/oauth2/flow/PasswordOAuthFlow.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.asyncapi.v2.security_scheme.oauth2.flow;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Map;
-
-/**
- * @version 2.6.0
- * @see OAuth Flow Object
- * @author Pavel Bodiachevskii
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@EqualsAndHashCode(callSuper = true)
-public class PasswordOAuthFlow extends OAuthFlow {
-
- /**
- * REQUIRED.
- *
- * The token URL to be used for this flow. This MUST be in the form of a URL.
- */
- @NotNull
- private String tokenUrl = "";
-
- @Builder(builderMethodName = "passwordBuilder")
- public PasswordOAuthFlow(@Nullable String refreshUrl,
- @NotNull Map scopes,
- @NotNull String tokenUrl) {
- super(refreshUrl, scopes);
- this.tokenUrl = tokenUrl;
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/ExtendableObject.java b/asyncapi-core/src/main/java/com/asyncapi/v3/ExtendableObject.java
deleted file mode 100644
index f8bb988a..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/ExtendableObject.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.asyncapi.v3;
-
-import com.fasterxml.jackson.annotation.JsonAnyGetter;
-import com.fasterxml.jackson.annotation.JsonAnySetter;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-/**
- * While the AsyncAPI Specification tries to accommodate most use cases,
- * additional data can be added to extend the specification at certain points.
- *
- * The extensions properties are implemented as patterned fields that are always prefixed by "x-".
- *
- * The extensions may or may not be supported by the available tooling, but those may be extended as
- * well to add requested support (if tools are internal or open-sourced).
- *
- * @see Specification Extensions
- * @author Pavel Bodiachevskii
- * @version 3.0.0
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-@JsonIgnoreProperties({"extensionFields"})
-public class ExtendableObject {
-
- private static final Pattern extensionPropertyNamePattern = Pattern.compile("^x-[\\w.\\x2d_]+$");
-
- /**
- * Extension fields in the form x-extension-field-name for the exposed API.
- */
- @Nullable
- @JsonAnyGetter
- protected Map extensionFields;
-
- @JsonAnySetter
- protected final void readExtensionProperty(String name, Object value) {
- if (extensionPropertyNamePattern.matcher(name).matches()) {
- if (extensionFields == null) {
- extensionFields = new HashMap<>();
- }
-
- extensionFields.put(name, value);
- } else {
- throw new IllegalArgumentException(String.format("\"%s\" is not valid extension property", name));
- }
- }
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/Reference.java b/asyncapi-core/src/main/java/com/asyncapi/v3/Reference.java
deleted file mode 100644
index 05ac7c2f..00000000
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/Reference.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package com.asyncapi.v3;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * A simple object to allow referencing other components in the specification, internally and externally.
- *
- * The Reference Object is defined by JSON Reference and follows the same structure, behavior and rules.
- * A JSON Reference SHALL only be used to refer to a schema that is formatted in either JSON or YAML.
- * In the case of a YAML-formatted Schema, the JSON Reference SHALL be applied to the JSON representation of
- * that schema. The JSON representation SHALL be made by applying the conversion described here .
- *
- * For this specification, reference resolution is done as defined by the JSON Reference specification and not by
- * the JSON Schema specification.
- *
- * This object cannot be extended with additional properties and any properties added SHALL be ignored.
- *
- * @see Reference
- * @author Pavel Bodiachevskii
- * @version 3.0.0
- */
-@Data
-@NoArgsConstructor
-@AllArgsConstructor
-public class Reference {
-
- /**
- * Required .
- *
- * The reference string.
- */
- @NotNull
- @JsonProperty(value = "$ref")
- private String ref = "";
-
-}
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/ExternalDocumentationDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/ExternalDocumentationDeserializer.java
index b09ac314..5600b99b 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/ExternalDocumentationDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/ExternalDocumentationDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.ExternalDocumentation;
-import com.asyncapi.v3.jackson.ReferenceOrObjectDeserializer;
+import com.asyncapi.serde.ReferenceOrObjectDeserializer;
/**
* Deserializes external documentation.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/TagsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/TagsDeserializer.java
index 71e39397..f2f3d07f 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/TagsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/TagsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.Tag;
-import com.asyncapi.v3.jackson.ListOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.ListOfReferencesOrObjectsDeserializer;
/**
* Deserializes tags.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/ChannelParametersDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/ChannelParametersDeserializer.java
index 88e86b94..70bef43f 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/ChannelParametersDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/ChannelParametersDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.channel;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.channel.Parameter;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
/**
* Serializes {@link com.asyncapi.v3._0_0.model.channel.Parameter} variables map.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/ChannelsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/ChannelsDeserializer.java
index c5cc3c01..4bacfb8c 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/ChannelsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/ChannelsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.channel;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.channel.Channel;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
/**
* Serializes component channels map.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessageCorrelationIdDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessageCorrelationIdDeserializer.java
index 7c0988c2..9adef810 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessageCorrelationIdDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessageCorrelationIdDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.channel.message;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.channel.message.CorrelationId;
-import com.asyncapi.v3.jackson.ReferenceOrObjectDeserializer;
+import com.asyncapi.serde.ReferenceOrObjectDeserializer;
/**
* Serializes message correlation id.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessageHeadersDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessageHeadersDeserializer.java
index 34d85cdc..2fd28c14 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessageHeadersDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessageHeadersDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.channel.message;
-import com.asyncapi.v3.Reference;
-import com.asyncapi.v3.schema.AsyncAPISchema;
-import com.asyncapi.v3.schema.multiformat.MultiFormatSchema;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.multiformat.MultiFormatSchema;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessagePayloadDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessagePayloadDeserializer.java
index 2de3a298..f948de77 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessagePayloadDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessagePayloadDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.channel.message;
-import com.asyncapi.v3.Reference;
-import com.asyncapi.v3.schema.multiformat.MultiFormatSchema;
-import com.asyncapi.v3.schema.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.schemas.asyncapi.multiformat.MultiFormatSchema;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessageTraitsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessageTraitsDeserializer.java
index c5e5058a..bacdf014 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessageTraitsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessageTraitsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.channel.message;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.channel.message.MessageTrait;
-import com.asyncapi.v3.jackson.ListOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.ListOfReferencesOrObjectsDeserializer;
/**
* Deserializes message traits.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessagesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessagesDeserializer.java
index 8438ddc2..38a83c52 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessagesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/channel/message/MessagesDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.channel.message;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.channel.message.Message;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
/**
* Serializes {@link Message} variables map.
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsChannelsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsChannelsDeserializer.java
index 3a233979..1077bb7f 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsChannelsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsChannelsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.channel.Channel;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsChannelsDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsCorrelationIdsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsCorrelationIdsDeserializer.java
index 3ca82f14..beb773d3 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsCorrelationIdsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsCorrelationIdsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.channel.message.CorrelationId;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsCorrelationIdsDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsExternalDocsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsExternalDocsDeserializer.java
index 238f3197..c0b58032 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsExternalDocsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsExternalDocsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.ExternalDocumentation;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsExternalDocsDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsMessageTraitsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsMessageTraitsDeserializer.java
index 766c33c1..fd37ca2d 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsMessageTraitsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsMessageTraitsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.channel.message.MessageTrait;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsMessageTraitsDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsMessagesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsMessagesDeserializer.java
index 26c6c2e6..c8219c55 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsMessagesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsMessagesDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.channel.message.Message;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsMessagesDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsOperationTraitsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsOperationTraitsDeserializer.java
index 23e65e59..0c9dd2b2 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsOperationTraitsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsOperationTraitsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.operation.OperationTrait;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsOperationTraitsDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsOperationsDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsOperationsDeserializer.java
index d78264e2..5e6379b1 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsOperationsDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsOperationsDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.operation.Operation;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsOperationsDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsParametersDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsParametersDeserializer.java
index b35829d3..9c326f29 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsParametersDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsParametersDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.channel.Parameter;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsParametersDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsRepliesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsRepliesDeserializer.java
index 97f5e213..fb46d2f3 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsRepliesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsRepliesDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.operation.reply.OperationReply;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsRepliesDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsReplyAddressesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsReplyAddressesDeserializer.java
index 369f9154..a094bf78 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsReplyAddressesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsReplyAddressesDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.operation.reply.OperationReplyAddress;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsReplyAddressesDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsSchemasDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsSchemasDeserializer.java
index 675174bc..0435e3e8 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsSchemasDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsSchemasDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
-import com.asyncapi.v3.schema.multiformat.MultiFormatSchema;
-import com.asyncapi.v3.schema.AsyncAPISchema;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.schemas.asyncapi.multiformat.MultiFormatSchema;
+import com.asyncapi.schemas.asyncapi.AsyncAPISchema;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsSecuritySchemesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsSecuritySchemesDeserializer.java
index 57f0dbbd..ed8bca44 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsSecuritySchemesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsSecuritySchemesDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
-import com.asyncapi.v3.security_scheme.SecurityScheme;
+import com.asyncapi.schemas.asyncapi.Reference;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.schemas.asyncapi.security.v3.SecurityScheme;
public class ComponentsSecuritySchemesDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsServerVariablesDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsServerVariablesDeserializer.java
index 2836d0df..a3a99ad9 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsServerVariablesDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsServerVariablesDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.server.ServerVariable;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsServerVariablesDeserializer extends MapOfReferencesOrObjectsDeserializer {
diff --git a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsServersDeserializer.java b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsServersDeserializer.java
index 64e77bfd..043a1a80 100644
--- a/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsServersDeserializer.java
+++ b/asyncapi-core/src/main/java/com/asyncapi/v3/_0_0/jackson/model/component/ComponentsServersDeserializer.java
@@ -1,8 +1,8 @@
package com.asyncapi.v3._0_0.jackson.model.component;
-import com.asyncapi.v3.Reference;
+import com.asyncapi.schemas.asyncapi.Reference;
import com.asyncapi.v3._0_0.model.server.Server;
-import com.asyncapi.v3.jackson.MapOfReferencesOrObjectsDeserializer;
+import com.asyncapi.serde.MapOfReferencesOrObjectsDeserializer;
public class ComponentsServersDeserializer extends MapOfReferencesOrObjectsDeserializer