Java 在Quarkus应用程序中注入ServletContext

Java 在Quarkus应用程序中注入ServletContext,java,resteasy,quarkus,Java,Resteasy,Quarkus,玩弄一下,我试图在我的应用程序中注入: @控制器 @路径(“/greeting/”) @请求范围 公共类迎宾资源{ @注入 ServletContext ServletContext; } 它编译得很好,但在打包阶段quarkus maven插件失败,原因是: [1] Unsatisfied dependency for type javax.servlet.ServletContext and qualifiers [@Default] - java member: examplea

玩弄一下,我试图在我的应用程序中注入:

@控制器
@路径(“/greeting/”)
@请求范围
公共类迎宾资源{
@注入
ServletContext ServletContext;
}
它编译得很好,但在打包阶段quarkus maven插件失败,原因是:

[1] Unsatisfied dependency for type javax.servlet.ServletContext and qualifiers [@Default]
    - java member: exampleapp.GreetingResource#servletContext
    - declared on CLASS bean [types=[java.lang.Object, exampleapp.GreetingResource], qualifiers=[@Default, @Any], target=exampleapp.GreetingResource]
我的应用程序依赖于io。quarkus:quarkus resteasy,它拉入io。quarkus:quarkus undertow,它反过来拉入io。undertow:undertow servlet


我希望任何底层扩展都能提供
ServletContext
的注入,但显然我的假设是错误的。。。有什么想法吗?

一点摆弄向我表明,这种类型没有生产者方法。。。以下片段帮助了我:

import javax.enterprise.context.requestscope;
导入javax.enterprise.inject.products;
导入javax.inject.Singleton;
导入javax.servlet.ServletContext;
导入io.undertow.servlet.handlers.ServletRequestContext;
@独生子女
公共类ServletContextProducer{
@产生
@请求范围
公共ServletContext ServletContext(){
返回ServletRequestContext.current().getCurrentServletContext();
}
}

@InjectServletContext仅适用于Java EE环境。Quarkus集成了JAX-RS,因此您可以通过使用JAX-RS@Context

@Controller
@Path("/greeting/")
@RequestScoped
public class GreetingResource {

    // javax.ws.rs.core.Context
    @Context
    ServletContext servletContext;

    // OR

    @GET
    @Path("/test")
    @Produces({ MediaType.TEXT_PLAIN })
    public Response test(@Context ServletContext servletContext) {
        // return ...
    }
}
您的方法也可以工作,但它显式地依赖于Undertow API

更新:

Quarkus版本0.17.0+使用CDI@Inject注释添加了对ServletContext注入的支持。看到这个了吗