From 671c90655e48fc13ed636e1dfdb2dc583f8ed243 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Tue, 17 Sep 2024 12:16:31 -0400 Subject: [PATCH] GH-9478: Fix `MessagingGatewaySupport.onInit()` for calling `super.onInit()` Fixes: #9478 Issue link: https://github.com/spring-projects/spring-integration/issues/9478 Any `MessagingGatewaySupport` implementation does not register itself into a `SmartLifecycleRoleController` because they don't call `super.onInit()` of the `AbstractEndpoint` * Fix `MessagingGatewaySupport` for calling `super.onInit()` from its `onInit()` * Verify `SmartLifecycleRoleController` registration in the `KafkaInboundGatewayTests` * Remove out of use XML `group-id` attribute from Kafka channel adapter and move it to the `channel` XSD as the place where it is really used (cherry picked from commit a8174d5bce79139893e98a06888a96d115bf5b7a) --- .../gateway/MessagingGatewaySupport.java | 1 + .../kafka/config/spring-integration-kafka.xsd | 14 +++++++------- .../xml/KafkaInboundGatewayTests-context.xml | 3 ++- .../kafka/config/xml/KafkaInboundGatewayTests.java | 8 +++++++- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/spring-integration-core/src/main/java/org/springframework/integration/gateway/MessagingGatewaySupport.java b/spring-integration-core/src/main/java/org/springframework/integration/gateway/MessagingGatewaySupport.java index 345990bbc7..af179116c9 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/gateway/MessagingGatewaySupport.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/gateway/MessagingGatewaySupport.java @@ -423,6 +423,7 @@ public abstract class MessagingGatewaySupport extends AbstractEndpoint if (!this.replyTimeoutSet) { this.messagingTemplate.setReceiveTimeout(endpointsDefaultTimeout); } + super.onInit(); this.initialized = true; } diff --git a/spring-integration-kafka/src/main/resources/org/springframework/integration/kafka/config/spring-integration-kafka.xsd b/spring-integration-kafka/src/main/resources/org/springframework/integration/kafka/config/spring-integration-kafka.xsd index 0a1548b3ca..77b9a6bc17 100644 --- a/spring-integration-kafka/src/main/resources/org/springframework/integration/kafka/config/spring-integration-kafka.xsd +++ b/spring-integration-kafka/src/main/resources/org/springframework/integration/kafka/config/spring-integration-kafka.xsd @@ -453,6 +453,13 @@ + + + + Set the 'group.id' KafkaConsumer property. + + + @@ -764,13 +771,6 @@ - - - - Set the 'group.id' KafkaConsumer property. - - - diff --git a/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/config/xml/KafkaInboundGatewayTests-context.xml b/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/config/xml/KafkaInboundGatewayTests-context.xml index 91e330442f..08a10bf84b 100644 --- a/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/config/xml/KafkaInboundGatewayTests-context.xml +++ b/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/config/xml/KafkaInboundGatewayTests-context.xml @@ -21,7 +21,8 @@ retry-template="retryTemplate" recovery-callback="recoveryCallback" bind-source-record="true" - on-partitions-assigned-seek-callback="onPartitionsAssignedSeekCallback"/> + on-partitions-assigned-seek-callback="onPartitionsAssignedSeekCallback" + role="testRole"/> diff --git a/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/config/xml/KafkaInboundGatewayTests.java b/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/config/xml/KafkaInboundGatewayTests.java index da03ee622a..b95d99e0ec 100644 --- a/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/config/xml/KafkaInboundGatewayTests.java +++ b/spring-integration-kafka/src/test/java/org/springframework/integration/kafka/config/xml/KafkaInboundGatewayTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2019-2023 the original author or authors. + * Copyright 2019-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.integration.kafka.inbound.KafkaInboundGateway; +import org.springframework.integration.support.SmartLifecycleRoleController; import org.springframework.integration.test.util.TestUtils; import org.springframework.kafka.listener.KafkaMessageListenerContainer; import org.springframework.test.annotation.DirtiesContext; @@ -45,6 +46,9 @@ public class KafkaInboundGatewayTests { @Autowired private ApplicationContext context; + @Autowired + SmartLifecycleRoleController roleController; + @Test public void testProps() { assertThat(this.gateway1.isAutoStartup()).isFalse(); @@ -69,6 +73,8 @@ public class KafkaInboundGatewayTests { assertThat(TestUtils.getPropertyValue(this.gateway1, "messagingTemplate.sendTimeout")).isEqualTo(5000L); assertThat(TestUtils.getPropertyValue(this.gateway1, "messagingTemplate.receiveTimeout")).isEqualTo(43L); assertThat(TestUtils.getPropertyValue(this.gateway1, "bindSourceRecord", Boolean.class)).isTrue(); + assertThat(this.roleController.getRoles()).contains("testRole"); + assertThat(this.roleController.getEndpointsRunningStatus("testRole")).containsEntry("gateway1", false); } }