2012-02-01 6 views
4

私のアプリケーションは、GWT-RPCを使用してサーバーと通信します。とにかくRPCレイヤーを変更せずにJSONを使用してデータを透過的にシリアル化する方法はありますか?GWT RPCをJSONに変換

これは、シリアライザを変更し、UIでオートベクトルコーデックスを使用することで達成できます。

なぜ私はそれが必要ですか?

  • 私は、クロスドメインRPCを作りたいが、私は、サーバー側の余分な層を設けることなく、非GWT-アプリからサーバー側を呼び出したい
  • 呼び出します。
+1

これがGWT-RPCから完全に切り離された理由です。今私はGWTのAutoBeanとRequestクラスを使用しています。私はそれを後悔しませんでした。 –

答えて

1

これは難しい作業になるでしょう。私はシリアライザの変更がうまくいかないと思っています.GWT-RPCシリアライザはストリームと同じように入力を処理しています(基本的にサーバーから送信されるデータは実際にJSON形式ですが、GWT-RPCのみで解析できます)。完全に新しいジェネレータを作成する必要があります。これは、解析とオブジェクトのシリアライズ/デシリアライズのためのコードを作成します。この場合、AutoBeanフレームワークが非常に役に立ちます。最後に、GWT-RPCサービスを使用している現在のコードを実際に変更することなく、GWT-RPCシリアル化から他のプロトコルに移行することができます。

最大の問題は、クロスドメインメッセージングです。通常はJSONPを使用しますが、JSONPでは基本的にGETリクエストしか許可されないため、多くのデータを別のサーバーに送信する必要がある場合は、すべてを単一の要求に合わせることができない場合があります。このような問題は、クロスドメインのドキュメントメッセージングで解決できます(たとえば、iframeを開いてリモートサーバーから特別な通信JavaScriptを読み込み、postMessage経由でこのiframeをサービスのプロキシとして使用します)が、この機能はIE7ではサポートされていません。

3

UPDATE私はちょうど

http://code.google.com/p/gwt-rpc-plus/を見て持っていないが、それはもはや維持されます(それはヘリット、Androidのチームによって使用されるコードレビューツールの一部だとして)積極的に維持されている http://code.google.com/p/gerrit/source/browse/README?repo=gwtjsonrpcつまずきました。.. 。

GWT-RPCから離れたくない場合は、GWTのシリアライザを置き換えることができます。つまり、deRPC(com.google.gwt.rpc)と同じです。 標準GWT-RPCcom.google.gwt.user.rpc)ですが、それ以上のことが必要です(つまり、実行時に反映されないため、クライアント側のシリアライゼーションコードを生成する必要があります)。

+0

素晴らしいプロジェクト、私はそれを試してみましょう。 –