私のプロジェクトでAtmosphereを使いたいのですが、単純なPOJO-sをJSONPにシリアライズするためにいくつかの問題があります。 @Producesアノテーションと、単純なRESTfulサービスでPOJO-sをシリアル化するために以前に正常に使用したオブジェクトcom.sun.jersey.api.json.JSONWithPadding
の関係を理解していません。ここで大気を使用して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レポから構築された最新のRest-Chatデモは動作していません(他の人が述べたように404 on/chat)。
私の放送方式がJSONWithPadding
インスタンスを返し、フィルタがオフになっている場合には、ブロードキャスト要求は、有効なJSONPレスポンスを取得しますが、中断されたスレッドは再び[email protected]を返します。
フィルタと注釈の使い方を正しく教えてもらえますか?
(私は雰囲気の最新バージョン0.9を使用しています)