描述错误
我正在使用 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方法中。
复制 重现该行为的步骤:
- 创建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;
}
}
- 使用
@RegisterClientHeaders()
在 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 -a
或ver
的输出:java -version
的输出:- GraalVM 版本(如果不同于 Java):
- Quarkus 版本或 git rev:1.5.2-FINAL
- 构建工具(即
mvnw --version
或gradlew --version
的输出):
其他上下文 (在此处添加有关该问题的任何其他上下文。)
最佳答案
我有同样的问题,它已在 Quarkus 1.8 中修复。
关于java - Quarkus Rest Client 不在 ClientHeadersFactory 的实现中注入(inject) ConfigProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63010180/