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

Quarkus Rest客户端未在ClientHeadersFactory的实现中注入ConfigProperty

阎佑运
2023-03-14

描述我正在使用MP Rest Client从我的服务实现中调用另一个Rest服务的错误,并希望通过使用@ClientsHeadersFactory覆盖一些头属性,但当我使用@Inject使用另一个CDI bean时,会引发NullpointerException。使用Micro Profile Rest Client 1.4,如果您的实现由CDI管理,则可以使用“@Inject”。这允许您注入机密,例如,或任何其他CDIBean来计算头值。

预期行为注入的ConfigProperty可用且不为空

实际行为NullpointerException发生在ClientHeadersFactory实现的更新方法中。

要复制行为,请执行以下步骤:

  1. 创建ClientHeadersFactory的实现类并重写更新方法
@ApplicationScoped
public class MyClientHeadersFactory implements ClientHeadersFactory {

  
    @Inject
    @ConfigProperty(name = "secrets.value")
    private String secretValue;

    @Override
    public MultivaluedMap<String, String> update(MultivaluedMap<String, String> incomingHeaders, MultivaluedMap<String, String> clientOutgoingHeaders) {

        System.out.println("--- Incoming headers of the JAX-RS environment");
        incomingHeaders.forEach((k, v) -> System.out.println(k + ":" + v));

        System.out.println("--- Specified outgoing headers of the Rest Client");
        clientOutgoingHeaders.forEach((k, v) -> System.out.println(k + ":" + v));

       
        MultivaluedMap<String, String> resultHeader = new MultivaluedHashMap();
        resultHeader.putAll(incomingHeaders);
        resultHeader.putAll(clientOutgoingHeaders);
        
        //here is the NullpointerException raised
        resultHeader.add("X-Secret-Header", secretValue);

        System.out.println("--- Header of the Rest Client after merging");
        resultHeader.forEach((k, v) -> System.out.println(k + ":" + v));

        return resultHeader;
    }

}

@RegisterRestClient(configKey = "remote-restservice")
@RegisterClientHeaders(MyClientHeadersFactory.class)
public interface RemoteRestService
{

    @POST
    @Path("/doSomeStuff")
    @Consumes({ "application/json" })
    @Produces({ "application/json" })
    Response createStuff( @Valid Stuff stuff);
}

配置

# Add your application.properties here, if applicable.
remote-restservice/mp-rest/url=http://localhost:9090/service
secrets.value=test

屏幕截图(如果适用,请添加屏幕截图来帮助解释您的问题。)

环境(请填写以下资料):

  • uname-a的输出ver
  • java的输出版本:
  • GraalVM版本(如果与Java不同):
  • Quarkus版本或git版本:1.5.2-FINAL
  • 构建工具(即mvnw--versiongradlew--version)的输出:

附加上下文(在此处添加有关问题的任何其他上下文。)

共有1个答案

华烈
2023-03-14

我也有同样的问题,它已在Quarkus 1.8中修复。

 类似资料:
  • 本规范不排除使用未注册的客户端。然而,使用这样的客户端超出了本规范的范围,并需要额外的安全性分析并审查其互操作性影响。

  • 有没有我可以参考的示例应用程序用于Android上的SAML交互?有人在Android上成功移植/使用了OpenSAML吗? 我正在尝试编写一个简单的应用程序,它将(而不是浏览器重定向)使用本机API来执行SAML身份验证。 还有一些指向测试环境的指针,我可以在其中测试SAML客户机,这会有所帮助。

  • 利用 select 实现的 tcp 客户端 利用 select 实现的 tcp 客户端 源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * *//* 程序清单:利用 selec

  • 我正在构建一个Quarkus应用程序,它使用resteasy处理http请求,并使用restclient调用另一个api,我需要传播一个头并动态添加另一个头,所以我添加了一个实现ClientHeadersFactory的类。 代码如下: 我的问题是配置的注入不起作用。我使用和两种方法都进行了尝试,如的javadoc所述。我也试图使类不抽象,但它没有改变任何东西。 MicroServicesConf

  • 我一直在使用FTP客户端java实现。我所要做的就是连接到FTP服务器并将一个文件传输到服务器。 我设法与ftp服务器建立了连接(见下面的代码),之后我使用PASV命令进入了被动模式。现在我不知道下一步该做什么。我尝试在PASV命令之后制作一个新套接字并将其连接到FTP服务器端口20,但没有成功。 我的问题是建立连接时如何启动文件传输?(我的想法是与端口20建立连接并执行STOR命令,但我不知道如

  • 我有一个Spring启动1.5.1服务和一个Spring启动管理2.0.1。 考虑到这个留档(http://codecentric.github.io/spring-boot-admin/2.0.0/#monitoring-spring-boot-1.5.x),它们是兼容的。 这是我的客户端设置 我的入口 build.gradle 应用yml 对于服务器设置,我遵循了这里的入门指南http://c