Использование Atmosphere для возврата сериализованных объектов JSONP - PullRequest
0 голосов
/ 20 января 2012

Я хотел бы использовать Atmosphere в одном из моих проектов, и у меня возникли проблемы с его использованием для возврата простых POJO-объектов, сериализованных в JSONP.Я не понимаю связи между аннотацией @Produces и необходимым com.sun.jersey.api.json.JSONWithPadding объектом, который я успешно использовал перед сериализацией моих POJO в простой RESTful-службе.

Вот мой метод приостановки:

@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, как и ожидалось.И тут возникает проблема.У меня есть метод Broadcaster, который возвращает:

@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 кажется бездействующим.Я не уверен, должен ли этот метод возвращать Notification или объект обтекания JSONWithPadding.Если я удалю фильтры из аннотации @Broadcast, то метод приостановки выдаст строку «com.ericsson.nss.entities.Notification@308be6».Это лучше, чем исключение, но все же не сообщение JSONP.К сожалению, последняя демонстрация rest-chat, построенная из репозитория maven, не работает (404 on / chat, как упоминалось другими). ​​

Если мой метод широковещания возвращает экземпляр JSONWithPadding и фильтры отключены, то запрос широковещанияполучает действительный ответ JSONP, но приостановленный поток снова возвращает com.ericsson.nss.entities.Notification@7f84c9.

Можете ли вы сказать мне, как правильно использовать фильтры и аннотации?

(яиспользуя последнюю версию Атмосферы 0.9)

1 Ответ

0 голосов
/ 27 января 2012

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

...