Я хотел бы использовать Atmosphere в одном из моих проектов и иметь некоторые проблемы с его использованием, чтобы возвращать простые POJO-s, сериализованные в JSONP. Я не понимаю связи между аннотацией @Produces и необходимым com.sun.jersey.api.json.JSONWithPadding
объектом, который я использовал ранее, чтобы сериализовать мои POJO-s в простой службе RESTful.Использование атмосферы для возвращения сериализованных объектов JSONP
Вот мой метод суспендирующий:
@GET
@Path("/notification")
@Produces({ "application/x-javascript", MediaType.APPLICATION_JSON })
@Suspend
public JSONWithPadding getNextNotification(
@QueryParam("callback") @DefaultValue("callback") String callback) {
Random random = new Random();
Notification n = new Notification();
n.setMessage("Message is " + Long.toHexString(random.nextLong()));
n.setMessage("S-" + Long.toHexString(random.nextLong()));
return new JSONWithPadding(n, callback);
}
Это возвращает соответствующую строку JSON для меня, как и ожидалось. И здесь возникает проблема. У меня есть метод, который возвращает вещатель:
@Broadcast({XSSHtmlFilter.class, JsonpFilter.class})
@GET
@Path("/broadcast2")
public Notification broadcast2() {
Random random = new Random();
Notification n = new Notification();
n.setMessage("Message is " + Long.toHexString(random.nextLong()));
n.setMessage("S-" + Long.toHexString(random.nextLong()));
return n;
}
В результате получается следующее исключение:
Caused by: com.sun.jersey.api.MessageException: A message body writer for Java class com.ericsson.nss.entities.Notificaion, and Java type class com.ericsson.nss.entities.Notification, and MIME media type application/octet-stream was not fund
кажется, что структура хотела бы сериализовать объект уведомления, но не в состоянии сделать это. JsonpFilter
кажется бездействующим. Я не уверен, должен ли этот метод возвращать уведомление или объект обтекания JSONWithPadding
. Если я удалю фильтры из аннотации @Broadcast, тогда метод приостановки испускает строку «[email protected]». Это лучше, чем исключение, но все же не сообщение JSONP. К сожалению, последняя демонстрация чата-чата, построенная из maven repo, не работает (404 в/чат, как упоминалось другими).
Если мой метод широковещания возвращает экземпляр JSONWithPadding
и фильтры выключены, тогда запрос на широковещательную передачу получает действительный ответ JSONP, но приостановленный поток снова возвращает [email protected]
Не могли бы вы рассказать мне, как правильно использовать фильтры и аннотации?
(Я использую последнюю версию 0.9 атмосферы)