Как получать сообщения в приложении 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

Другие вопросы по тегам