私のアプリケーションは GWT-RPC を使用してサーバーと通信します。RPCレイヤーを変更せずに、JSONを使用してデータを透過的にシリアル化する方法はありますか?
IMHOこれは、シリアライザーを変更し、UIでautobean codexを使用することで実現できます。
なぜそれが必要なのですか?
- クロスドメイン RPC 呼び出しを行いたい
- サーバー側で追加のレイヤーを提供せずに、非 GWT アプリからサーバー側を呼び出したい。
更新アクティブに維持されているhttp://code.google.com/p/gerrit/source/browse/README?repo=gwtjsonrpcに出くわしました (Android チームが使用するコードレビューツールである Gerrit の一部であるため)。
http://code.google.com/p/gwt-rpc-plus/を見てください。しかし、もはや維持されていません...
本当に必要で、GWT-RPC から離れたくない場合は、GWT のシリアライザーを置き換えることができるはずです。これはまさに deRPC( com.google.gwt.rpc
) が行うことです。標準の GWT-RPC ( com.google.gwt.user.rpc
) ですが、それ以上のことを行う必要があります (つまり、実行時にリフレクションがないため、クライアント側のシリアル化コードを生成します)。
これは難しい作業になります。シリアライザーの変更は機能しないと思います。GWT-RPC シリアライザーは入力をストリームと同様に処理します (基本的に、サーバーから送信されるデータは実際には JSON 形式ですが、GWT-RPC によってのみ解析できます)。解析とオブジェクトのシリアライゼーション/デシリアライゼーション用のコードを作成する、まったく新しいジェネレーターを作成する必要があります。この場合、AutoBean フレームワークが非常に役立つ場合があります。最終的には、GWT-RPC サービスを使用している現在のコードを実際に変更することなく、GWT-RPC シリアライゼーションから他のプロトコルに移行できるはずです。
最大の問題はクロスドメイン メッセージングです。通常は JSONP を使用しますが、JSONP では基本的に GET リクエストしか許可されないことが問題であり、大量のデータを他のサーバーに送信する必要がある場合、1 つのリクエストにすべてを収めることができない場合があります。このような問題は、クロス ドメイン ドキュメント メッセージングで解決できます (たとえば、リモート サーバーから特別な通信 JavaScript をロードする iframe を開き、この iframe を 経由でサービスのプロキシとして使用しますpostMessage
) が、この機能は IE7 ではサポートされていません。