Разметка интерфейса 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, т. е.: @Context. Наивно, рассмотрим следующее:
@Path("/example-service")
public interface ExampleService {
@Path("/ping")
@GET
public String ping(@Context HttpServletRequest request, String message);
}
Это, очевидно, не имеет смысла, потому что эта инъекция @ Context ортогональна и не принадлежит интерфейсу (кроме того, даже если я смогу преодолеть уродство этого интерфейса с точки зрения клиента и передать null, в настоящее время существует ошибка, препятствующая этому работать: RESTEASY-311)
Как я могу использовать разметку интерфейса JAXRS (и, следовательно, использовать клиентскую платформу nice RESTEasy) и одновременно получать доступ к ортогональным инъекциям @ Context?
1 ответ:
Поскольку этот вопрос сформулирован, его можно легко решить с помощью введения поля @ Context в реализацию. Что усложнило эту конкретную ситуацию, так это использование "EJB-интеграции" RESTEasy, которая извлекает реализацию из JNDI. Это решение (пока) не выполняет дополнительные инъекции REST на реализации, извлеченной из контейнера EJB. Это все будет проще с предстоящей интеграцией JEE6/JAXRS.