Инъекция bean-компонента внутри ClientHeadersFactory не работает
Я создаю приложение Quarkus, которое обрабатывает HTTP-запросы с рестайлингом и вызывает другой api с помощью restclient, и мне нужно распространить заголовок и добавить еще один на лету, поэтому я добавил класс, реализующий ClientHeadersFactory.
Вот код:
@ApplicationScoped
public abstract class MicroServicesHeaderHandler implements ClientHeadersFactory {
@Inject
MicroServicesConfig config;
@Override
public MultivaluedMap<String, String> update(MultivaluedMap<String, String> incomingHeaders,
MultivaluedMap<String, String> clientOutgoingHeaders) {
// Will be merged with outgoing headers
return new MultivaluedHashMap<>() {{
put("Authorization", Collections.singletonList("Bearer " + config.getServices().get(getServiceName()).getAccessToken()));
put("passport", Collections.singletonList(incomingHeaders.getFirst("passport")));
}};
}
protected abstract String getServiceName();
Моя проблема в том, что внедрение конфигурации не работает. Я пробовал оба с@Inject
а также @Context
, как указано в javadoc ClientHeadersFactory
. Я также пытался сделать класс не абстрактным, но это ничего не меняет.
MicroServicesConfig - это @Startup
bean, потому что его нужно инициализировать перед Quarkus.run()
вызывается, иначе горячая перезагрузка больше не работает, поскольку требуется для обработки запросов. Вот код, к сведению:
@Getter
@Startup
@ApplicationScoped
public final class MicroServicesConfig {
private final Map<String, MicroService> services;
MicroServicesConfig(AKV akv, ABS abs) {
// some code to retrieve an encrypted file from a secure storage, decrypt it and initialize the map out of it
}
Похоже, проблема с ClientHeadersFactory
потому что, если я введу свой bean в свой основной класс (@QuarkusMain
), оно работает. Затем я могу назначить карту общедоступной статической карте, к которой я затем могу получить доступ из моего HeaderHandler с помощьюApplication.myPublicStaticMap
но это уродливо, поэтому я бы предпочел этого избежать.
Я поискал в Интернете и увидел, что у нескольких людей такая же проблема, но, согласно этому сообщению в блоге или этому, он должен работать с Quarkus 1.3 и MicroProfile 3.3 (RestClient 1.4), а я использую Quarkus 1.5.2. Даже пример во второй ссылке не работает для меня с внедрением UriInfo, поэтому проблема возникает не из-за bean-компонента, который я пытаюсь ввести.
Я боролся с этим в течение нескольких недель, и я действительно хотел бы избавиться от моего обходного пути сейчас. Я, наверное, что-то упускаю, но это сводит меня с ума.
Заранее спасибо за помощь.