Guice провайдер для UriInfo, использующий RestEasy - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть веб-приложение, которое переносится с Джерси на RestEasy.Приложение использует Guice для CDI.

Приложение использует провайдер Guice для внедрения UriInfo.В версии на Джерси этот код выглядел так:

public static class JerseyIntegrationModule extends AbstractModule {
    @Override protected void configure() {
        bind(WebApplication.class).to(WebApplicationImpl.class).in(Scopes.SINGLETON);
    }

    @Provides @RequestScoped
    public HttpContext getHttpContext(WebApplication webapp) {
      return webapp.getThreadLocalHttpContext();
    }

    @Provides @RequestScoped
    public UriInfo getUriInfo(HttpContext httpContext) {
      return httpContext.getUriInfo();
    }
}

Все эти классы WebApplication, HttpContext и т. Д. Относятся к Джерси.Вопрос в том, как обеспечить что-то подобное в RestEasy.

Одной из попыток была эта

public class MyServlet extends ServletModule {
    @Provides @RequestScoped
    public UriInfo getUriInfo(@Context UriInfo info) {
        return info;
    }
}

, но это приводит к переполнению стека в коде внедрения Guice.

Я знаю, что атрибут @Context должен позволять мне вводить UriInfo в RestEasy, но я не могу понять, использовать ли это в провайдере Guice.

Приложение будет развернуто в Wildfly 15.

Любая помощь очень ценится, поскольку это заставляет мою голову кружиться.

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Resteasy поставляется с RequestScopeModule , который предоставляет UriInfo, HttpServletRequest и другие.

Дополнительная информация http://docs.jboss.org/resteasy/docs/3.6.3.Final/userguide/html_single/index.html#Guice1

0 голосов
/ 22 февраля 2019

Кажется, что есть решение в одну строку

public class MyServlets extends ServletModule {

  @Provides @RequestScoped
  public UriInfo getUriInfo() {
    return ResteasyProviderFactory.getContextData(UriInfo.class);
  }

}
...