テキストベースのプロトコルを使用してサーバーと通信 (全二重) できる GWT (2.4.0) アプリケーションを構築しようとしています。これを実現するために、Kaazing Websocket Gateway Version 3.3.2 をプロキシとして使用しています。
GWT アプリ <-----[websocket]-----> Kaazing <-----[tcp]----->バックエンド サーバー
これは私のKaazing構成です:
<service>
<accept>ws://127.0.0.1:9444/foobar</accept>
<connect>tcp://localhost:50189</connect>
<type>proxy</type>
<cross-site-constraint>
<allow-origin>http://127.0.0.1:8888</allow-origin>
</cross-site-constraint>
</service>
このセットアップは、Kaazing クライアントの Java 実装で動作します。このサービスを GWT アプリケーションで使用したいと考えています。
これは、GWT クライアント実装のコードです。
WebSocket ws;
try {
ws = new WebSocket("ws://127.0.0.1:9444/foobar");
ws.addCloseHandler(new CloseHandler() {
@Override
public void onClose(CloseEvent ev) {
}
});
ws.addMessageHandler(new MessageHandler() {
@Override
public void onMessage(MessageEvent ev) {
System.out.println(ev.getData());
}
});
ws.addOpenHandler(new OpenHandler() {
@Override
public void onOpen(OpenEvent ev) {
}
});
} catch (WebSocketException e) {
e.printStackTrace();
}
GWT クライアントはバックエンド サーバーにテキストを正常に送信できます。サーバーからの応答を処理できません。ev.getData()が呼び出されるとすぐに、JavaScript 例外がスローされます。
Uncaught JavaScript exception [Uncaught java.lang.ClassCastException: com.google.gwt.core.client.JavaScriptObject$ cannot be cast to java.lang.String]
上記のコードの WebSocket アドレスをws://127.0.0.1:9444/echoに変更して Kaazing エコー サービスを使用すると、送信したテキストはすべて GWT アプリケーションによって正常に受信されます。サービスをプロキシ(またはブロードキャスト) に戻すと、サーバーからのメッセージを受信するたびに上記の JavaScript 例外がスローされます。
Java プログラムの同じコード (Kaazing Java クライアントを使用) は問題なく動作します。
私は GWT の専門家ではないので、問題をさらにデバッグする方法はありますか、それとも見落としている簡単な解決策はありますか?