Подтвердить что ты не робот

Получить HttpServletRequest в приложении Jax Rs/Appfuse?

Я создал базовую оболочку приложения с AppFuse и последовал за учебником AppFuse, чтобы создать простую службу RESTful с Jax-RS. Это работает отлично. Вызов http://localhost:8080/services/api/persons возвращает коллекцию объектов Person как форматированную строку Json с нужными данными.

Теперь я хочу получить доступ к объектам ServletRequest и ServletResponse из службы RESTful, открытой Appfuse (для использования другой библиотеки, требующей этих объектов).

Я думаю, что это можно сделать, добавив аннотацию @Context, например. следуя этому qaru.site/info/96681/... и этому сообщению .

Но если я добавлю тег @Context (см. ниже), он компилируется отлично, но генерирует исключение при перезапуске сервера (прилагается внизу).

Здесь объявление @WebService:

@WebService
@Path("/persons")
public interface PersonManager extends GenericManager<Person, Long> {
    @Path("/")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    List<Person> read();
    ...
}

И вот класс реализации, где я бы назвал аннотацию @Context:

@Service("personManager") 
public class PersonManagerImpl extends GenericManagerImpl<Person, Long> implements PersonManager { 
    PersonDao personDao; 
    @Context ServletRequest request; // Exception thrown on launch if this is present 
    @Context ServletContext context;  // Exception thrown on launch of this is present 
    ... 
    } 

Надеюсь, что я пропустил что-то простое, либо что-то включить, чтобы заставить его работать, либо понять, что получение ServletRequest не должно быть возможным, потому что... Любые подсказки будут приветствоваться.

Выполняем это на Tomcat в IntelliJ.

=== EXCEPTION STACK TRACE (Усеченный) ===

Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are: 
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'serviceBeans' threw exception; nested exception is java.lang.RuntimeException: java.lang.NullPointerException 
        at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:102) 
        at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58) 
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1358) 
        ... 37 more 
4b9b3361

Ответ 1

Попробуйте прямо вставлять HttpServletRequest и HttpServletContext:

@Context private HttpServletRequest servletRequest;
@Context private HttpServletContext servletContext;

Ответ 2

Добавление его в обработанную подпись метода. Я предполагаю это, потому что объекты запроса и ответа еще не существуют, когда экземпляр класса создается, но при вызове браузером.

@Path("/")
@GET
@Produces(MediaType.APPLICATION_JSON)
List<Person> read( @Context HttpServletRequest httpServletRequest, @Context HttpServletResponse httpServletResponse) { }