Skip to content

Commit e86b665

Browse files
authored
fix(sqs): add SqsMessageBindingProcessor (#382)
Allows publishing sqs messages from springwolf-ui when using `@AsyncListener` and `@AsyncPublisher`
1 parent baa4aa3 commit e86b665

File tree

2 files changed

+43
-1
lines changed
  • springwolf-examples/springwolf-sqs-example/src/test/resources
  • springwolf-plugins/springwolf-sqs-plugin/src/main/java/io/github/stavshamir/springwolf/asyncapi/scanners/channels/operationdata

2 files changed

+43
-1
lines changed

springwolf-examples/springwolf-sqs-example/src/test/resources/asyncapi.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,11 @@
3939
"headers": {
4040
"$ref": "#/components/schemas/HeadersNotDocumented"
4141
},
42-
"bindings": { }
42+
"bindings": {
43+
"sqs": {
44+
"bindingVersion": "0.2.0"
45+
}
46+
}
4347
}
4448
},
4549
"publish": {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
package io.github.stavshamir.springwolf.asyncapi.scanners.channels.operationdata;
3+
4+
import com.asyncapi.v2.binding.message.amqp.AMQPMessageBinding;
5+
import io.github.stavshamir.springwolf.asyncapi.scanners.channels.operationdata.annotation.MessageBindingProcessor;
6+
import io.github.stavshamir.springwolf.asyncapi.scanners.channels.operationdata.annotation.SqsAsyncOperationBinding;
7+
import org.springframework.context.EmbeddedValueResolverAware;
8+
import org.springframework.stereotype.Component;
9+
import org.springframework.util.StringValueResolver;
10+
11+
import java.lang.reflect.Method;
12+
import java.util.Arrays;
13+
import java.util.Optional;
14+
15+
@Component
16+
public class SqsMessageBindingProcessor implements MessageBindingProcessor, EmbeddedValueResolverAware {
17+
private StringValueResolver resolver;
18+
19+
@Override
20+
public void setEmbeddedValueResolver(StringValueResolver resolver) {
21+
this.resolver = resolver;
22+
}
23+
24+
@Override
25+
public Optional<ProcessedMessageBinding> process(Method method) {
26+
return Arrays.stream(method.getAnnotations())
27+
.filter(annotation -> annotation instanceof SqsAsyncOperationBinding)
28+
.map(annotation -> (SqsAsyncOperationBinding) annotation)
29+
.findAny()
30+
.map(this::mapToMessageBinding);
31+
}
32+
33+
private ProcessedMessageBinding mapToMessageBinding(SqsAsyncOperationBinding bindingAnnotation) {
34+
AMQPMessageBinding amqpMessageBinding = AMQPMessageBinding.builder().build();
35+
36+
return new ProcessedMessageBinding(bindingAnnotation.type(), amqpMessageBinding);
37+
}
38+
}

0 commit comments

Comments
 (0)