Разметка интерфейса JAX-RS и внедрение @Context
Вопрос
Рассмотрим следующий простой сервис 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.