Skip to content

Commit 3dfec38

Browse files
committed
Extend springwolf-kafka-plugin to implement the new methods in abstract class and method level listener scanners to include an empty message binding so that there is always a message binding
1 parent ebe49c1 commit 3dfec38

File tree

5 files changed

+34
-0
lines changed

5 files changed

+34
-0
lines changed

springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/stavshamir/springwolf/asyncapi/scanners/channels/annotation/ClassLevelKafkaListenerScanner.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.stavshamir.springwolf.asyncapi.scanners.channels.annotation;
22

33
import com.asyncapi.v2.binding.ChannelBinding;
4+
import com.asyncapi.v2.binding.MessageBinding;
45
import com.asyncapi.v2.binding.OperationBinding;
56
import io.github.stavshamir.springwolf.asyncapi.scanners.channels.ChannelPriority;
67
import io.github.stavshamir.springwolf.asyncapi.scanners.channels.ChannelsScanner;
@@ -59,6 +60,13 @@ protected String getChannelName(KafkaListener annotation) {
5960
return KafkaListenerUtil.buildChannelBinding();
6061
}
6162

63+
@Override
64+
protected Map<String, ? extends MessageBinding> buildMessageBinding(Method method) {
65+
// Currently there is no interesting data in the KafkaListener annotation, but we keep it for the sake of
66+
// consistency in the code and in the serialized specification (always have at least an empty binding for kafka)
67+
return KafkaListenerUtil.buildMessageBinding();
68+
}
69+
6270
@Override
6371
protected AsyncHeaders buildHeaders(Method method) {
6472
Class<?> payloadType = getPayloadType(method);

springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/stavshamir/springwolf/asyncapi/scanners/channels/annotation/KafkaListenerUtil.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package io.github.stavshamir.springwolf.asyncapi.scanners.channels.annotation;
22

33
import com.asyncapi.v2.binding.ChannelBinding;
4+
import com.asyncapi.v2.binding.MessageBinding;
45
import com.asyncapi.v2.binding.OperationBinding;
56
import com.asyncapi.v2.binding.kafka.KafkaChannelBinding;
7+
import com.asyncapi.v2.binding.kafka.KafkaMessageBinding;
68
import com.asyncapi.v2.binding.kafka.KafkaOperationBinding;
79
import com.google.common.collect.ImmutableMap;
810
import lombok.extern.slf4j.Slf4j;
@@ -44,4 +46,8 @@ public static String getChannelName(KafkaListener annotation, StringValueResolve
4446
binding.setGroupId(groupId);
4547
return ImmutableMap.of("kafka", binding);
4648
}
49+
50+
public static Map<String, ? extends MessageBinding> buildMessageBinding() {
51+
return ImmutableMap.of("kafka", new KafkaMessageBinding());
52+
}
4753
}

springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/stavshamir/springwolf/asyncapi/scanners/channels/annotation/MethodLevelKafkaListenerScanner.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.stavshamir.springwolf.asyncapi.scanners.channels.annotation;
22

33
import com.asyncapi.v2.binding.ChannelBinding;
4+
import com.asyncapi.v2.binding.MessageBinding;
45
import com.asyncapi.v2.binding.OperationBinding;
56
import io.github.stavshamir.springwolf.asyncapi.scanners.channels.ChannelPriority;
67
import io.github.stavshamir.springwolf.asyncapi.scanners.channels.ChannelsScanner;
@@ -49,6 +50,13 @@ protected String getChannelName(KafkaListener annotation) {
4950
return KafkaListenerUtil.buildOperationBinding(annotation, resolver);
5051
}
5152

53+
@Override
54+
protected Map<String, ? extends MessageBinding> buildMessageBinding(KafkaListener annotation) {
55+
// Currently there is no interesting data in the KafkaListener annotation, but we keep it for the sake of
56+
// consistency in the code and in the serialized specification (always have at least an empty binding for kafka)
57+
return KafkaListenerUtil.buildMessageBinding();
58+
}
59+
5260
@Override
5361
protected Class<?> getPayloadType(Method method) {
5462
return SpringPayloadAnnotationTypeExtractor.getPayloadType(method);

springwolf-plugins/springwolf-kafka-plugin/src/test/java/io/github/stavshamir/springwolf/asyncapi/scanners/channels/annotation/ClassLevelKafkaListenerScannerTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.stavshamir.springwolf.asyncapi.scanners.channels.annotation;
22

33
import com.asyncapi.v2.binding.kafka.KafkaChannelBinding;
4+
import com.asyncapi.v2.binding.kafka.KafkaMessageBinding;
45
import com.asyncapi.v2.binding.kafka.KafkaOperationBinding;
56
import com.asyncapi.v2.model.channel.ChannelItem;
67
import com.asyncapi.v2.model.channel.operation.Operation;
@@ -78,13 +79,15 @@ public void scan_componentWithMultipleKafkaListenersAndHandlers() {
7879
.title(SimpleFoo.class.getSimpleName())
7980
.payload(PayloadReference.fromModelName(SimpleFoo.class.getSimpleName()))
8081
.headers(HeaderReference.fromModelName("SpringKafkaDefaultHeaders-" + SimpleFoo.class.getSimpleName()))
82+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
8183
.build();
8284

8385
Message barMessage = Message.builder()
8486
.name(SimpleBar.class.getName())
8587
.title(SimpleBar.class.getSimpleName())
8688
.payload(PayloadReference.fromModelName(SimpleBar.class.getSimpleName()))
8789
.headers(HeaderReference.fromModelName("SpringKafkaDefaultHeaders-" + SimpleBar.class.getSimpleName()))
90+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
8891
.build();
8992

9093
Operation operation = Operation.builder()
@@ -140,6 +143,7 @@ public void scan_componentWithSingleKafkaHandlerMethod() {
140143
.title(SimpleFoo.class.getSimpleName())
141144
.payload(PayloadReference.fromModelName(SimpleFoo.class.getSimpleName()))
142145
.headers(HeaderReference.fromModelName("SpringKafkaDefaultHeaders-" + SimpleFoo.class.getSimpleName()))
146+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
143147
.build();
144148

145149
Operation operation = Operation.builder()
@@ -172,13 +176,15 @@ public void scan_componentWithMultipleKafkaHandlerMethods() {
172176
.title(SimpleFoo.class.getSimpleName())
173177
.payload(PayloadReference.fromModelName(SimpleFoo.class.getSimpleName()))
174178
.headers(HeaderReference.fromModelName("SpringKafkaDefaultHeaders-" + SimpleFoo.class.getSimpleName()))
179+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
175180
.build();
176181

177182
Message barMessage = Message.builder()
178183
.name(SimpleBar.class.getName())
179184
.title(SimpleBar.class.getSimpleName())
180185
.payload(PayloadReference.fromModelName(SimpleBar.class.getSimpleName()))
181186
.headers(HeaderReference.fromModelName("SpringKafkaDefaultHeaders-" + SimpleBar.class.getSimpleName()))
187+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
182188
.build();
183189

184190
Operation operation = Operation.builder()
@@ -212,6 +218,7 @@ public void scan_componentWithSingleKafkaHandlerMethod_batchPayload() {
212218
.title(SimpleFoo.class.getSimpleName())
213219
.payload(PayloadReference.fromModelName(SimpleFoo.class.getSimpleName()))
214220
.headers(HeaderReference.fromModelName("SpringKafkaDefaultHeaders-" + SimpleFoo.class.getSimpleName()))
221+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
215222
.build();
216223

217224
Operation operation = Operation.builder()

springwolf-plugins/springwolf-kafka-plugin/src/test/java/io/github/stavshamir/springwolf/asyncapi/scanners/channels/annotation/MethodLevelKafkaListenerScannerTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.asyncapi.v2.binding.OperationBinding;
44
import com.asyncapi.v2.binding.kafka.KafkaChannelBinding;
5+
import com.asyncapi.v2.binding.kafka.KafkaMessageBinding;
56
import com.asyncapi.v2.binding.kafka.KafkaOperationBinding;
67
import com.asyncapi.v2.model.channel.ChannelItem;
78
import com.asyncapi.v2.model.channel.operation.Operation;
@@ -80,6 +81,7 @@ public void scan_componentHasKafkaListenerMethods_hardCodedTopic() {
8081
.title(SimpleFoo.class.getSimpleName())
8182
.payload(PayloadReference.fromModelName(SimpleFoo.class.getSimpleName()))
8283
.headers(HeaderReference.fromModelName(AsyncHeaders.NOT_DOCUMENTED.getSchemaName()))
84+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
8385
.build();
8486

8587
Operation operation = Operation.builder()
@@ -112,6 +114,7 @@ public void scan_componentHasKafkaListenerMethods_embeddedValueTopic() {
112114
.title(SimpleFoo.class.getSimpleName())
113115
.payload(PayloadReference.fromModelName(SimpleFoo.class.getSimpleName()))
114116
.headers(HeaderReference.fromModelName(AsyncHeaders.NOT_DOCUMENTED.getSchemaName()))
117+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
115118
.build();
116119

117120
Operation operation = Operation.builder()
@@ -179,6 +182,7 @@ public void scan_componentHasKafkaListenerMethods_multipleParamsWithPayloadAnnot
179182
.title(SimpleFoo.class.getSimpleName())
180183
.payload(PayloadReference.fromModelName(SimpleFoo.class.getSimpleName()))
181184
.headers(HeaderReference.fromModelName(AsyncHeaders.NOT_DOCUMENTED.getSchemaName()))
185+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
182186
.build();
183187

184188
Operation operation = Operation.builder()
@@ -211,6 +215,7 @@ public void scan_componentHasKafkaListenerMethods_batchPayload() {
211215
.title(SimpleFoo.class.getSimpleName())
212216
.payload(PayloadReference.fromModelName(SimpleFoo.class.getSimpleName()))
213217
.headers(HeaderReference.fromModelName(AsyncHeaders.NOT_DOCUMENTED.getSchemaName()))
218+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
214219
.build();
215220

216221
Operation operation = Operation.builder()

0 commit comments

Comments
 (0)