NotSerializableException, выходящий из Spring Controller и вызывающий проблемы с очередью Google App Engine - PullRequest
2 голосов
/ 31 мая 2011

У меня есть Spring Controller, который вызывается через HTTP POST из планировщика очереди GAE.

@Controller
@RequestMapping(value = RSSPoller.RSS_POLLER_URL)
public class RSSPoller implements Serializable {
  private static final long serialVersionUID = -4925178778477404709L;

  public static final String RSS_POLLER_URL = "/rsspoller";

  @RequestMapping(method = RequestMethod.POST)
  @ResponseStatus(HttpStatus.OK)
  public void pollAndProcessRssFeed() throws ServiceException  {
    try  {
      // do some stuff
    }
    catch(Exception e)  {
      throw new ServiceException("Can't process RSS feed because", e);
    }
  }
}

Однако, когда он вызывается, код ответа 500 с Критическим сообщением журнала

Uncaught exception from servlet
java.lang.RuntimeException: java.io.NotSerializableException: <some spring class that changes all the time, but does not implement java.io.Serializable>

Такое же сообщение журнала отображается в журналах с уровнем Warning .

Я получаю подобные предупреждающие сообщения (но не критичные) в своих журналах, когда я вызываю другие Spring Controllers, которые либо визуализируют веб-страницу (GET), либо возвращают некоторые данные XML (по сути, RPC вызывает, которые используют HTTP POST). Когда я выполняю HTTP-запрос GET / POST к этим URL-адресам, код ответа равен 200, и результат выводится правильно (и я игнорирую предупреждающее сообщение в журналах).

Это приводит меня к двум вопросам:

  1. Почему я получаю сообщение Критическая ошибка / HTTP 500 для POST из очереди, но не GET / POST для других Spring Controllers в моем приложении?
  2. Как я могу перехватить исключение и, по сути, отказаться от него; что касается моих целей, то задача выполнена.

Я могу опубликовать полный журнал исключений, если он полезен; для краткости я его опустил.

1 Ответ

0 голосов
/ 16 июля 2013

вы должны сделать свой <some spring class that changes all the time, but does not implement java.io.Serializable> просто сериализуемым (не только контроллером).Мне по крайней мере это помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...