我正在构建一个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是一个@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
的一个问题,因为如果我在主类(@QuarkusMain
)中注入bean,它就可以工作。然后,我可以将映射分配给一个公共静态映射,然后我可以通过application.myPublicStaticMap
从HeaderHandler访问该映射,但这很难看,所以我真的希望避免这样做。
我在网上搜索过,看到有几个人也有同样的问题,但根据这篇博客文章,或者这篇文章,它应该适用于Quarkus1.3和Microprofile3.3(RestClient1.4),而我使用的是Quarkus1.5.2。即使是第二个链接中的示例对我来说在注入UriInfo时也不起作用,所以问题不是来自我试图注入的bean。
我已经纠结了几个星期,我真的想摆脱我的变通办法现在。我可能只是错过了什么,但这快把我逼疯了。
事先谢谢你的帮助。
这个问题终于在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
我想在注射过程中给CDI中的pojo bean一个移动范围。 我创建了一个普通的bean,并在托管Bean中注入了与相同的内容: //POJO类 当我使用相同的语法注入时,Pojo bean的填充值无法在新视图bean中恢复。 但是当我在类声明中使用时,它会起作用,然后是非作用域注入,如下所示: 注射: 前一种情况在我做制片人和资格赛时得到了解决,但我觉得这将是一种我不应该做的开销。作为CDI的新