2012-01-20 8 views
0

私のプロジェクトで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を使用しています)

答えて

0

私はそれが私の方法からStringインスタンスを返すことによって、仕事とジャクソンを使用して手動でJSONPのシリアライズを扱う作ることができます。

関連する問題