2009-11-19 2 views
3

Рассмотрим следующий простой Resteasy (JAXRS) Услуга:JAXRS интерфейс разметки и @Context инъекции

@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 интерфейса (и, следовательно, использовать привлекательную среду клиента RESTEasy) и одновременно получать ортогональные инъекции @Context ?

ответ

3

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

Смежные вопросы