В настоящее время я работаю над обслуживанием недокументированного кода и наткнулся на странную ошибку при запуске класса в Spring Boot. Код вызывает IllegalAccessError при выполнении, но компилируется правильно.
Похоже, что исходная команда пыталась получить доступ к закрытым методам Kafka Streams, это "путь MacGyver", но я не уверен в его поведении, поскольку IntelliJ правильно импортирует код и обрабатывает наследование, как и должно (если Я объявляю класс как локальный пакет, который он выделяет, говоря, что классы AbstractStream и KTableImpl не существуют).
Проект управляется с помощью Gradle, и это микро-сервис. Выполнение выполняется с помощью Spring Boot, и при запуске возникает ошибка.
Одним из возможных решений было использование библиотеки отражений Java, но это не кажется правильным подходом к решению этой ошибки. Может быть, установка загрузки не так?
package org.apache.kafka.streams.kstream.internals;
import org.apache.kafka.streams.kstream.KTable;
public class KTableSpy {
public static <K> String getName(AbstractStream<K> stream) {
return stream.name;
}
public static <K, V> void enableSendingOldValues(KTable<K, V> table) {
((KTableImpl<K, ?, V>) table).enableSendingOldValues();
}
}
Этот класс должен был работать правильно и не мешать запуску службы. Вместо этого мы имеем следующую ошибку
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'AVCompanyStateProjector': Invocation of init method failed; nested exception is java.lang.IllegalAccessError: tried to access method org.apache.kafka.streams.kstream.internals.KTableImpl.enableSendingOldValues()V from class org.apache.kafka.streams.kstream.internals.KTableSpy