Как получать сообщения в приложении GWT, используя конфигурацию Kaazing Websockets <type>proxy</ type>?
Я пытаюсь создать приложение GWT (2.4.0), которое может общаться (полнодуплексный) с сервером, используя текстовый протокол. Для этого я использую Kaazing Websocket Gateway версии 3.3.2 в качестве прокси.
GWT App <----- [websocket] -----> Kaazing <----- [tcp] -----> Backend Server
Это моя конфигурация 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>
Эта настройка работает с реализацией Java клиента Kaazing. Теперь я хочу использовать этот сервис в приложении 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 может успешно отправлять текст на внутренний сервер. Он просто не может обработать любой ответ от сервера. Исключение JavaScript выдается, как только вызывается ev.getData().
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-программе (с использованием Java-клиента Kaazing) работает просто отлично.
Поскольку я не эксперт GWT, могу ли я как-то отлаживать проблему дальше или есть простое решение, которое я просто не вижу?
1 ответ
Я полагаю, что я уже сталкивался с этой проблемой, вы не против поделиться своим содержимым файла gwtclient.gwt.xml? Или, возможно, попробуйте добавить '' или '' в зависимости от того, используете ли вы ByteSocket или WebSocket в gwtclient.gwt.xml клиента GWT.
Надеюсь это поможет,
-Marcelo