Внедрить ServletContext в приложение Quarkus - PullRequest
0 голосов
/ 10 июня 2019

Играю с Quarkus , я пытаюсь ввести ServletContext в мое приложение:

@Controller
@Path("/greeting/")
@RequestScoped
public class GreetingResource {
    @Inject
    ServletContext servletContext;
}

Он прекрасно компилируется, но на этапе упаковки quarkus-maven-plugin завершается неудачно:

[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. прибойный: прибойный-сервлет 1018 *.

Я ожидаю, что любое из расширений Undertow обеспечит инъекцию ServletContext, но, очевидно, мое предположение неверно ... Есть идеи?

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

@ Inject ServletContext работает только в среде Java EE.Quarkus интегрирует JAX-RS, поэтому вы можете получить доступ к экземпляру ServletContext, используя 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 ...
    }
}

Ваш способ также работает, но он явно зависит от API Undertow.

0 голосов
/ 10 июня 2019

Немного повозившись, я понял, что для этого типа нет метода продюсера ... Мне помог следующий фрагмент:

import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
import javax.inject.Singleton;
import javax.servlet.ServletContext;

import io.undertow.servlet.handlers.ServletRequestContext;

@Singleton
public class ServletContextProducer {
    @Produces
    @RequestScoped
    public ServletContext servletContext() {
        return ServletRequestContext.current().getCurrentServletContext();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...