2013-09-12 2 views
0

Я создаю веб-службы в Java, используя RESTlet API. Я использую 2.0 стабильную версию.Почему HttpRequest возвращает NULL во время чтения во второй раз?

В этом я получаю сообщение Ошибка NullPointerException при чтении запроса во второй раз.

Я применил фильтр на веб-сервисах для обеспечения безопасности. В классе фильтра я проверяю, что запрос содержит ожидаемые параметры. Если это успешно, вызов выполняется в webservice.

При обработке в webservice я получаю NULL по запросу. Ниже мой фильтр Класс -

public class MyFilter extends Filter { 

    public MyFilter(Context context) { 
     super(context); 
    } 

    @Override 
    protected int beforeHandle(Request request, Response response) { 

     int result = STOP; 
     try 
     { 
       String requestSt = request.getEntityAsText(); 
       // Check for validation 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


     return result; 
    } 
} 

Когда я прочитал запрос на второй раз она возвращает NULL . Даже когда я просто пишу -

System.out.println(request.getEntityAsText()); 

раньше -

String requestSt = request.getEntityAsText(); 

то и это дает мне NullPointerException для линии Строка requestSt = ....

Так предоставьте мне решение для чтения запроса несколько раз.

ответ

2

Вы можете обернуть объект входящего запроса, чтобы его содержимое не потерялось после прочтения его в первый раз. Для этого вы можете использовать класс org.restlet.engine.io.BufferingRepresentation.

Эта линия должна это сделать:

request.setEntity(new BufferingRepresentation(request.getEntity()); 

Вы, возможно, потребуется обновить до версии 2.1, которая является текущей стабильной версии.

+0

С удовольствием ответит Отец Рестле, Гуру-рестар. Я перейду к версии 2.1. – Deepu

+0

Это работает как шарм! Это то, что я ищу. – Deepu

+0

У вас есть решение, которое будет работать для Restlet 2.0? Мы используем Activiti, который использует Restlet 2.0. – Einar

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