2012-01-20 4 views
0

Я хотел бы использовать 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 атмосферы)

ответ

0

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

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