Skip to content

Commit fed4747

Browse files
[release/v1.32.x] Fix spring-kafka-2.7 latest dep tests (#10588)
Co-authored-by: Lauri Tulmin <[email protected]>
1 parent ff29c5a commit fed4747

File tree

2 files changed

+58
-2
lines changed

2 files changed

+58
-2
lines changed

instrumentation/spring/spring-kafka-2.7/testing/src/main/java/io/opentelemetry/testing/ConsumerConfig.java

+34-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package io.opentelemetry.testing;
77

8+
import java.lang.reflect.Method;
89
import org.apache.kafka.clients.admin.NewTopic;
910
import org.springframework.beans.factory.ObjectProvider;
1011
import org.springframework.boot.SpringBootConfiguration;
@@ -15,6 +16,8 @@
1516
import org.springframework.kafka.config.TopicBuilder;
1617
import org.springframework.kafka.core.ConsumerFactory;
1718
import org.springframework.kafka.listener.ConcurrentMessageListenerContainer;
19+
import org.springframework.util.backoff.BackOff;
20+
import org.springframework.util.backoff.FixedBackOff;
1821

1922
@SpringBootConfiguration
2023
@EnableAutoConfiguration
@@ -50,7 +53,13 @@ public ConcurrentKafkaListenerContainerFactory<String, String> batchFactory(
5053
ConcurrentKafkaListenerContainerFactory<String, String> factory =
5154
new ConcurrentKafkaListenerContainerFactory<>();
5255
// do not retry failed records
53-
factory.setBatchErrorHandler(new DoNothingBatchErrorHandler());
56+
try {
57+
Class.forName("org.springframework.kafka.listener.BatchErrorHandler");
58+
ErrorHandlerSetter.setBatchErrorHandler(factory);
59+
} catch (ClassNotFoundException ignored) {
60+
// org.springframework.kafka.listener.BatchErrorHandler is missing in latest
61+
setCommonErrorHandler(factory);
62+
}
5463
factory.setConsumerFactory(consumerFactory);
5564
factory.setBatchListener(true);
5665
factory.setAutoStartup(true);
@@ -68,11 +77,34 @@ public ConcurrentKafkaListenerContainerFactory<String, String> singleFactory(
6877
ConcurrentKafkaListenerContainerFactory<String, String> factory =
6978
new ConcurrentKafkaListenerContainerFactory<>();
7079
// do not retry failed records
71-
factory.setErrorHandler(new DoNothingErrorHandler());
80+
try {
81+
Class.forName("org.springframework.kafka.listener.ErrorHandler");
82+
ErrorHandlerSetter.setErrorHandler(factory);
83+
} catch (ClassNotFoundException ignored) {
84+
// org.springframework.kafka.listener.ErrorHandler is missing in latest
85+
setCommonErrorHandler(factory);
86+
}
7287
factory.setConsumerFactory(consumerFactory);
7388
factory.setBatchListener(false);
7489
factory.setAutoStartup(true);
7590
customizerProvider.ifAvailable(factory::setContainerCustomizer);
7691
return factory;
7792
}
93+
94+
private static void setCommonErrorHandler(
95+
ConcurrentKafkaListenerContainerFactory<String, String> factory) {
96+
try {
97+
Class<?> handlerClass =
98+
Class.forName("org.springframework.kafka.listener.CommonErrorHandler");
99+
Class<?> defaultHandlerClass =
100+
Class.forName("org.springframework.kafka.listener.DefaultErrorHandler");
101+
BackOff backOff = new FixedBackOff(0, 0);
102+
Object handler =
103+
defaultHandlerClass.getDeclaredConstructor(BackOff.class).newInstance(backOff);
104+
Method method = factory.getClass().getMethod("setCommonErrorHandler", handlerClass);
105+
method.invoke(factory, handler);
106+
} catch (Exception exception) {
107+
// ignored
108+
}
109+
}
78110
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.testing;
7+
8+
import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
9+
10+
// Base classes for error handlers are missing in the latest version. Setter methods were extracted
11+
// in ConsumerConfig to avoid verifier attempting to load these classes.
12+
class ErrorHandlerSetter {
13+
14+
private ErrorHandlerSetter() {}
15+
16+
static void setBatchErrorHandler(
17+
ConcurrentKafkaListenerContainerFactory<String, String> factory) {
18+
factory.setBatchErrorHandler(new DoNothingBatchErrorHandler());
19+
}
20+
21+
static void setErrorHandler(ConcurrentKafkaListenerContainerFactory<String, String> factory) {
22+
factory.setErrorHandler(new DoNothingErrorHandler());
23+
}
24+
}

0 commit comments

Comments
 (0)