java - Quarkus Rest Client 不在 ClientHeadersFactory 的实现中注入(inject) ConfigProperty

标签 java quarkus

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

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

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

复制 重现该行为的步骤:

  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;
    }

}

  1. 使用 @RegisterClientHeaders()
  2. 在 Rest Client 接口(interface)中注册您实现的 ClientHeadersFactory
@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 -aver 的输出:
  • java -version 的输出:
  • GraalVM 版本(如果不同于 Java):
  • Quarkus 版本或 git rev:1.5.2-FINAL
  • 构建工具(即 mvnw --versiongradlew --version 的输出):

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

最佳答案

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

关于java - Quarkus Rest Client 不在 ClientHeadersFactory 的实现中注入(inject) ConfigProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63010180/

相关文章:

java - 当我从 CDI 支持 bean 调用 EJB Dao 时,返回实体中的 @OneToMany 集合将被清除并为空

class - Java Quarkus 从 Swagger 中删除方法

java - 将 Quarkus 应用于非 Maven、非 Gradle Java 项目

native 编译中不使用 Quarkus 配置文件感知配置

docker - Quarkus Docker JVM SSL 问题

java - JPanel 中的移动图形

java - 在不使用结构的情况下冒泡某种条件?

J2ME 上的 Java 类/字节码编织/编辑?

java - HQL 检查 @param 中传递的列表大小