2017-09-21 3 views
0

私はこのcodeを使用してwebsocketクライアントをjavaに書き込みました。安全なソケットです。宛先への接続は正常に確立されていますが、onMessageは呼び出されません。Java WebSocket:onMessageがトリガーされていません

私はJavaスクリプトで同じことを書いているとき、それは動作しており、応答を得ることができます。

私のコードをチェックして、私はここで何が欠けているかアドバイスしてください。

マイコード:

@ClientEndpoint 
public class MyClientEndpoint { 
    @SuppressWarnings("unchecked") 

    @OnOpen 
    public void onOpen(Session session) { 
     System.out.println("Connected to endpoint: " + session.getBasicRemote()); 
     try { 
      JSONObject obj = new JSONObject(); 
      obj.put("subscribe", URLEncoder.encode("xxxxxxx","UTF-8")); 
      String msg = obj.toJSONString(); 
      System.out.println("Sending message to endpoint: " + msg); 
      session.getBasicRemote().sendText(msg); 
     } catch (Exception ex) { 
      Logger.getLogger(MyClientEndpoint.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

    @OnMessage 
    public void onMessage(String message) { 
    System.out.println("Received message in client: " + message); 
     Client.messageLatch.countDown(); 
    } 



public class Client { 

    final static CountDownLatch messageLatch = new CountDownLatch(1); 

    public static void main(String[] args) { 
     try { 
     WebSocketContainer container = ContainerProvider.getWebSocketContainer(); 
      String uri = "wss://api....."; 
      System.out.println("Connecting to:: " + uri); 
      container.connectToServer(MyClientEndpoint.class, URI.create(uri)); 
      messageLatch.await(10, TimeUnit.SECONDS);    
     } catch (DeploymentException | InterruptedException | IOException ex) { 
      Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 
+0

あなたは 'OnMessage' @に'セッションsession'引数が欠落することができます。署名は 'public void myMethod(セッションセッション、文字列メッセージ);でなければなりません。 – Al1

+0

セッションのセッションをセッションの最初の引数として試しましたが、まだ動作していません。 –

答えて

0

私は下のリンクの手順を文書化

ClientEndpointConfig.Configurator configurator = new ClientEndpointConfig.Configurator() { 
      public void beforeRequest(Map<String, List<String>> headers) { 
      String credentials = "username:password"; 
      headers.put("Authorization", Arrays.asList("Basic " + new BASE64Encoder().encode(credentials.getBytes()))); 
       System.out.println("Header set successfully"); 
      } 
     }; 

     ClientEndpointConfig clientConfig = ClientEndpointConfig.Builder.create() 
       .configurator(configurator) 
       .build(); 

に資格情報を渡すことでのWebSocketを確保するために接続することができています。

https://bigdatatechbytes.blogspot.in/2017/10/java-client-for-secure-web-socket.html

関連する問題