Skip to content

Commit 1c7a181

Browse files
committed
refactor: KclMessageDrivenChannelAdapterParser reference classes for KclMessageDrivenChannelAdapter constructor
1 parent 417e5bf commit 1c7a181

File tree

2 files changed

+29
-27
lines changed

2 files changed

+29
-27
lines changed

int-aws/src/main/java/org/springframework/integration/aws/config/xml/parsers/KclMessageDrivenChannelAdapterParser.java

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,19 @@
99
import org.springframework.integration.config.xml.AbstractChannelAdapterParser;
1010
import org.springframework.util.StringUtils;
1111
import org.w3c.dom.Element;
12-
13-
import java.util.stream.Stream;
12+
import software.amazon.awssdk.services.cloudwatch.CloudWatchAsyncClient;
13+
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
14+
import software.amazon.awssdk.services.kinesis.KinesisAsyncClient;
1415

1516
public class KclMessageDrivenChannelAdapterParser extends AbstractChannelAdapterParser {
1617

17-
private final String[][] constructorAttrs = {
18-
{ "kinesis-client", "software.amazon.awssdk.services.kinesis.KinesisAsyncClient" },
19-
{ "cloud-watch-client", "software.amazon.awssdk.services.cloudwatch.CloudWatchAsyncClient" },
20-
{ "dynamo-db-client", "software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient" }
21-
};
22-
2318
@Override
2419
protected AbstractBeanDefinition doParse(Element element, ParserContext parserContext, String channelName) {
2520
return XmlBeanDefinitionBuilder.newInstance(element, parserContext, KclMessageDrivenChannelAdapter.class)
26-
.configure(builder -> addConstructorArgs(builder, element))
21+
.configure(builder -> builder
22+
.addConstructorArgValue(arg(element, "kinesis-client", KinesisAsyncClient.class))
23+
.addConstructorArgValue(arg(element, "cloud-watch-client", CloudWatchAsyncClient.class))
24+
.addConstructorArgValue(arg(element, "dynamo-db-client", DynamoDbAsyncClient.class)))
2725
.addConstructorArgValue("streams")
2826
.setPropertyIfAttributeDefined("error-channel", "errorChannelName")
2927
.setPropertyIfAttributeDefined("worker-id")
@@ -50,15 +48,8 @@ protected AbstractBeanDefinition doParse(Element element, ParserContext parserCo
5048
.getBeanDefinition();
5149
}
5250

53-
private void addConstructorArgs(BeanDefinitionBuilder builder, Element element) {
54-
if (Stream.of(constructorAttrs).map(a -> element.getAttribute(a[0])).anyMatch(StringUtils::hasText)) {
55-
for (var a : constructorAttrs) {
56-
builder.addConstructorArgValue(arg(element.getAttribute(a[0]), a[1]));
57-
}
58-
}
59-
}
60-
61-
private Object arg(String ref, String beanClass) {
51+
private Object arg(Element element, String attr, Class<?> beanClass) {
52+
var ref = element.getAttribute(attr);
6253
return StringUtils.hasText(ref)
6354
? new RuntimeBeanReference(ref)
6455
: BeanDefinitionBuilder.genericBeanDefinition(beanClass)

int-aws/src/test/java/org/springframework/integration/aws/config/xml/parsers/KclMessageDrivenChannelAdapterParserTest.java

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
import static org.assertj.core.api.Assertions.assertThat;
2727

28+
@StaticMock({KinesisAsyncClient.class, CloudWatchAsyncClient.class, DynamoDbAsyncClient.class})
2829
@ConstructionMock(KclMessageDrivenChannelAdapter.class)
2930
class KclMessageDrivenChannelAdapterParserTest extends ParserTestBase {
3031

@@ -53,7 +54,15 @@ class KclMessageDrivenChannelAdapterParserTest extends ParserTestBase {
5354
private InitialPositionInStreamExtended streamInitialSequence;
5455

5556
@Test
56-
void testDefaults(MockedConstruction<KclMessageDrivenChannelAdapter> mocked) {
57+
void testDefaults(MockedConstruction<KclMessageDrivenChannelAdapter> mocked,
58+
MockedStatic<KinesisAsyncClient> kinesisClientMock,
59+
MockedStatic<CloudWatchAsyncClient> cloudWatchMock,
60+
MockedStatic<DynamoDbAsyncClient> dynamoDbMock) {
61+
62+
kinesisClientMock.when(KinesisAsyncClient::create).thenReturn(kinesisClient);
63+
dynamoDbMock.when(DynamoDbAsyncClient::create).thenReturn(dynamoDbClient);
64+
cloudWatchMock.when(CloudWatchAsyncClient::create).thenReturn(cloudWatchClient);
65+
5766
parse("""
5867
<int-aws:kcl-message-driven-channel-adapter streams="s"
5968
channel="c"/>
@@ -66,14 +75,13 @@ void testDefaults(MockedConstruction<KclMessageDrivenChannelAdapter> mocked) {
6675
}
6776

6877
void testDefaults(KclMessageDrivenChannelAdapter mock, Context context) {
69-
assertThat(context.arguments()).singleElement()
70-
.isEqualTo(new String[] {"s"});
78+
verifyConstructorArgs(mock, context);
7179
}
7280

73-
@StaticMock({CloudWatchAsyncClient.class, DynamoDbAsyncClient.class})
7481
@Test
7582
void testKinesisClientConfig(MockedConstruction<KclMessageDrivenChannelAdapter> mocked,
76-
MockedStatic<CloudWatchAsyncClient> cloudWatchMock, MockedStatic<DynamoDbAsyncClient> dynamoDbMock) {
83+
MockedStatic<CloudWatchAsyncClient> cloudWatchMock,
84+
MockedStatic<DynamoDbAsyncClient> dynamoDbMock) {
7785
registerBean("kc", KinesisAsyncClient.class, kinesisClient);
7886

7987
dynamoDbMock.when(DynamoDbAsyncClient::create).thenReturn(dynamoDbClient);
@@ -92,8 +100,7 @@ void testKinesisClientConfig(MockedConstruction<KclMessageDrivenChannelAdapter>
92100
}
93101

94102
void testKinesisClientConfig(KclMessageDrivenChannelAdapter mock, Context context) {
95-
assertThat(context.arguments()).asInstanceOf(InstanceOfAssertFactories.LIST)
96-
.contains(kinesisClient, cloudWatchClient, dynamoDbClient);
103+
verifyConstructorArgs(mock, context);
97104
}
98105

99106
@Test
@@ -160,8 +167,12 @@ void testAdapter() {
160167
verify(adapter).setWorkerId("wid");
161168
}
162169

163-
void testParser(KclMessageDrivenChannelAdapter mock, Context context) {
170+
void testAdapter(KclMessageDrivenChannelAdapter mock, Context context) {
171+
verifyConstructorArgs(mock, context);
172+
}
173+
174+
void verifyConstructorArgs(KclMessageDrivenChannelAdapter mock, Context context) {
164175
assertThat(context.arguments()).asInstanceOf(InstanceOfAssertFactories.LIST)
165-
.contains(new String[] {"s"}, kinesisClient, cloudWatchClient, dynamoDbClient);
176+
.containsExactly(kinesisClient, cloudWatchClient, dynamoDbClient, new String[] {"s"});
166177
}
167178
}

0 commit comments

Comments
 (0)