0

我正在尝试构建一个 GWT (2.4.0) 应用程序,该应用程序可以使用基于文本的协议与服务器进行通信(全双工)。为此,我使用 Kaazing Websocket Gateway 版本 3.3.2 作为代理。

GWT App <-----[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 echo 服务,我发送的任何文本都会被 GWT 应用程序成功接收。如果我将服务改回代理(或广播),则每次收到来自服务器的消息时都会引发上述 JavaScript 异常。

Java 程序中的相同代码(使用 Kaazing java 客户端)工作得很好。

由于我不是 GWT 专家,有什么方法可以进一步调试问题,还是有一个我看不到的简单解决方案?

4

1 回答 1

0

我相信我以前见过这个问题,你介意分享你的 gwtclient.gwt.xml 文件内容吗?或者,根据您在 GWT 客户端的“gwtclient.gwt.xml”中使用的是 ByteSocket 还是 WebSocket,尝试添加 '' 或 ''。

希望这可以帮助,

-马塞洛

于 2012-07-18T02:17:24.483 回答