Skip to content

Commit 1dde1d9

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 acb923e commit 1dde1d9

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;
@@ -77,13 +78,15 @@ public void scan_componentWithMultipleKafkaListenersAndHandlers() {
7778
.title(SimpleFoo.class.getSimpleName())
7879
.payload(PayloadReference.fromModelName(SimpleFoo.class.getSimpleName()))
7980
.headers(HeaderReference.fromModelName("SpringKafkaDefaultHeaders-" + SimpleFoo.class.getSimpleName()))
81+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
8082
.build();
8183

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

8992
Operation operation = Operation.builder()
@@ -139,6 +142,7 @@ public void scan_componentWithSingleKafkaHandlerMethod() {
139142
.title(SimpleFoo.class.getSimpleName())
140143
.payload(PayloadReference.fromModelName(SimpleFoo.class.getSimpleName()))
141144
.headers(HeaderReference.fromModelName("SpringKafkaDefaultHeaders-" + SimpleFoo.class.getSimpleName()))
145+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
142146
.build();
143147

144148
Operation operation = Operation.builder()
@@ -171,13 +175,15 @@ public void scan_componentWithMultipleKafkaHandlerMethods() {
171175
.title(SimpleFoo.class.getSimpleName())
172176
.payload(PayloadReference.fromModelName(SimpleFoo.class.getSimpleName()))
173177
.headers(HeaderReference.fromModelName("SpringKafkaDefaultHeaders-" + SimpleFoo.class.getSimpleName()))
178+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
174179
.build();
175180

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

183189
Operation operation = Operation.builder()
@@ -211,6 +217,7 @@ public void scan_componentWithSingleKafkaHandlerMethod_batchPayload() {
211217
.title(SimpleFoo.class.getSimpleName())
212218
.payload(PayloadReference.fromModelName(SimpleFoo.class.getSimpleName()))
213219
.headers(HeaderReference.fromModelName("SpringKafkaDefaultHeaders-" + SimpleFoo.class.getSimpleName()))
220+
.bindings(ImmutableMap.of("kafka", new KafkaMessageBinding()))
214221
.build();
215222

216223
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)