Разметка интерфейса JAX-RS и внедрение @Context

StackOverflow https://stackoverflow.com/questions/1765766

  •  21-09-2019
  •  | 
  •  

Вопрос

Рассмотрим следующий простой сервис RESTEasy (JAX-RS):

@Path("/example-service")
public interface ExampleService {

    @Path("/ping")
    @GET
    public String ping(String message);

}

Я хочу определить специфику JAXRS в интерфейсе, а не в классе, чтобы я мог использовать хороший клиентский фреймворк, т. Е.:

ExampleService client = ProxyFactory.create(ExampleService.class, "http://localhost:8080");

Все работает хорошо, за исключением случаев, когда я хочу ввести некоторые контекстные инъекции RESTEasy, т. е.:@Контекст.Наивно полагать, что следующее:

@Path("/example-service")
public interface ExampleService {

    @Path("/ping")
    @GET
    public String ping(@Context HttpServletRequest request, String message);

}

Это, очевидно, не имеет смысла, потому что эта инъекция @Context ортогональна и не относится к интерфейсу (более того, даже если я смогу преодолеть уродство этого интерфейса с точки зрения клиента и передать null, в настоящее время существует ошибка, препятствующая этой работе: СПОКОЙНЫЙ ОТДЫХ-311)

Как я могу использовать разметку интерфейса JAXRS (и, следовательно, использовать клиентскую платформу nice RESTEasy) и одновременно получать доступ к ортогональным инъекциям @Context?

Это было полезно?

Решение

Как сформулирован этот вопрос, это может быть легко решено с помощью внедрения поля @Context в реализацию.Что усложнило эту конкретную ситуацию, так это использование RESTEasy "ejb-integration", которая извлекает реализацию из JNDI.Это решение (пока) не выполняет дополнительных инъекций REST для реализации, извлеченной из контейнера EJB.Все это станет проще с предстоящей интеграцией JEE6 / JAXRS.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top