当前位置: 首页 > 知识库问答 >
问题:

ClientHeadersFactory内部的bean注入不起作用

田兴朝
2023-03-14

我正在构建一个Quarkus应用程序,它使用resteasy处理http请求,并使用restclient调用另一个api,我需要传播一个头并动态添加另一个头,所以我添加了一个实现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两种方法都进行了尝试,如ClientHeadersFactory的javadoc所述。我也试图使类不抽象,但它没有改变任何东西。

MicroServicesConfig是一个@startupbean,因为在调用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的一个问题,因为如果我在主类(@QuarkusMain)中注入bean,它就可以工作。然后,我可以将映射分配给一个公共静态映射,然后我可以通过application.myPublicStaticMap从HeaderHandler访问该映射,但这很难看,所以我真的希望避免这样做。

我在网上搜索过,看到有几个人也有同样的问题,但根据这篇博客文章,或者这篇文章,它应该适用于Quarkus1.3和Microprofile3.3(RestClient1.4),而我使用的是Quarkus1.5.2。即使是第二个链接中的示例对我来说在注入UriInfo时也不起作用,所以问题不是来自我试图注入的bean。

我已经纠结了几个星期,我真的想摆脱我的变通办法现在。我可能只是错过了什么,但这快把我逼疯了。

事先谢谢你的帮助。

共有1个答案

万俟宜修
2023-03-14

这个问题终于在Quarkus1.8中得到了解决。

 类似资料:
  • 我已经创建了一个CDI(WELD)拦截器,它可以工作并拦截它应该拦截的内容。 其中MyInterceptorBinding是一个拦截器绑定: 我想将我的拦截器注入一个bean类,如下所示: 但是这个注入带来了一个错误: 我如何克服这个问题?问题是否与拦截器的事实有关?我应该使用CDI便携式扩展设施吗?如果是,如何解决?

  • 嗨,我在容器内创建了三个帧,每个帧都有三个按钮,执行最小值,最大值和关闭功能。令人惊讶的是,只有一帧在工作,其余三帧不起作用。你能不能整理一下。

  • 本文向大家介绍Java的Spring框架中bean的继承与内部bean的注入,包括了Java的Spring框架中bean的继承与内部bean的注入的使用技巧和注意事项,需要的朋友参考一下 bean的定义继承 bean定义可以包含很多的配置信息,包括构造函数的参数,属性值,比如初始化方法,静态工厂方法名等容器的具体信息。 子bean定义从父定义继承配置数据。子的定义可以覆盖一些值,或者根据需要添加其

  • 我正在使用Mockito测试我的spring项目,但是似乎无法将一个模拟服务注入到另一个spring服务(bean)中。 下面是我想测试的spring服务: 下面是我要嘲弄的服务: 我的测试代码在这里: 但结果是 似乎CreateMailboxService没有得到模拟的UserInfoService而是使用了spring的autowired Bean。为什么我的不能工作?

  • 尝试使用p:fileUpload上载文件时收到错误。我尝试了maven clean和maven install for update dependeces。我换了网站。多次使用xml。我相信问题是与我的Anotion的关系,我正在使用@Autowired(Spring),但我改变了它,它不起作用。我如何解决这个问题? 我正在使用:Primeface 6.0,Java8,Spring Data,Sp

  • 问题内容: 我正在尝试在作为Jenkins Pipeline一部分运行的docker容器内执行一些git查询。在docker容器外面,sshsgent工作正常,我可以访问我的SCM没问题。在容器内部,我收到主机密钥验证问题。 有人可以帮助我解决我所犯的错误吗? 首先whoami呼叫输出: docker容器输出中的第二个调用(和回显): 问题答案: 主机密钥验证失败 容器中的SSH连接无法验证主机(