2017-01-25 9 views
0

Ich entwickle Websocket Java Client, aber ich habe immer fehlgeschlagen, um eine Verbindung zum Server herzustellen. Ich schätze, dass Sie mir helfen.WebSocket DeploymentException Verbindung fehlgeschlagen

Errormessage

java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.RuntimeException: javax.websocket.DeploymentException: Connection to 'wss://localhost:8443/index' failed. 
    at com.lge.racss.test.WebsocketClientEndpoint.<init>(WebsocketClientEndpoint.java:88) 
    at com.lge.racss.test.Application.main(Application.java:16) 
    ... 6 more 
Caused by: javax.websocket.DeploymentException: Connection to 'wss://localhost:8443/index' failed. 
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket._connect(GrizzlyClientSocket.java:382) 
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket.access$000(GrizzlyClientSocket.java:103) 
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket$1.call(GrizzlyClientSocket.java:228) 
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket$1.call(GrizzlyClientSocket.java:224) 
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket.connect(GrizzlyClientSocket.java:242) 
    at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientContainer.openClientSocket(GrizzlyClientContainer.java:95) 
    at org.glassfish.tyrus.client.ClientManager$1$1.run(ClientManager.java:575) 
    at org.glassfish.tyrus.client.ClientManager$1.run(ClientManager.java:622) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at org.glassfish.tyrus.client.ClientManager$SameThreadExecutorService.execute(ClientManager.java:775) 
    at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112) 
    at org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:447) 
    at org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:337) 
    at com.lge.racss.test.WebsocketClientEndpoint.<init>(WebsocketClientEndpoint.java:84) 
    ... 7 more 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 35.841 s 
[INFO] Finished at: 2017-01-25T15:41:21+09:00 
[INFO] Final Memory: 19M/172M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.2.1:java (default-cli) on project SignalingServerTest: An exception occured while executing the Java class. null: InvocationTargetException: javax.websocket.DeploymentException: Connection to 'wss://localhost:8443/index' failed. -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 

WebSocketClientEndPoint Klasse

package com.lge.racss.test; 

import java.net.URI; 
import java.net.URISyntaxException; 

import javax.annotation.PostConstruct; 
import javax.net.ssl.SSLContext; 
import javax.websocket.ClientEndpoint; 
import javax.websocket.CloseReason; 
import javax.websocket.ContainerProvider; 
import javax.websocket.OnClose; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.Session; 
import javax.websocket.WebSocketContainer; 

import org.glassfish.grizzly.ssl.SSLContextConfigurator; 
import org.glassfish.tyrus.client.ClientManager; 
import org.glassfish.tyrus.client.ClientProperties; 
import org.glassfish.tyrus.client.SslContextConfigurator; 
import org.glassfish.tyrus.client.SslEngineConfigurator; 


@ClientEndpoint 
public class WebsocketClientEndpoint { 

    Session userSession = null; 
    private MessageHandler messageHandler; 

    public WebsocketClientEndpoint(URI endpointURI) { 
     try { 
      System.getProperties().put(SSLContextConfigurator.KEY_STORE_FILE, "/etc/keystore/keystore.jks"); 
      System.getProperties().put(SSLContextConfigurator.TRUST_STORE_FILE, "/etc/keystore/server"); 
      System.getProperties().put(SSLContextConfigurator.KEY_STORE_PASSWORD, "123456"); 
      System.getProperties().put(SSLContextConfigurator.TRUST_STORE_PASSWORD, "123456"); 
      ClientManager client = ClientManager.createClient(); 
      SslEngineConfigurator sslEngineConfigurator = new SslEngineConfigurator(new SslContextConfigurator()); 
      sslEngineConfigurator.setHostVerificationEnabled(false); //skip host verification 
      client.getProperties().put(ClientProperties.SSL_ENGINE_CONFIGURATOR, sslEngineConfigurator); 
      System.out.println("before connect"); 
      client.connectToServer(this, endpointURI); 
      System.out.println("after connect"); 

      /*WebSocketContainer container = ContainerProvider.getWebSocketContainer(); 
      container.connectToServer(this, endpointURI); 
      */ 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 

    /** 
    * Callback hook for Connection open events. 
    * 
    * @param userSession the userSession which is opened. 
    */ 
    @OnOpen 
    public void onOpen(Session userSession) { 
     System.out.println("opening websocket"); 
     this.userSession = userSession; 
    } 

    /** 
    * Callback hook for Connection close events. 
    * 
    * @param userSession the userSession which is getting closed. 
    * @param reason the reason for connection close 
    */ 
    @OnClose 
    public void onClose(Session userSession, CloseReason reason) { 
     System.out.println("closing websocket"); 
     this.userSession = null; 
    } 

    /** 
    * Callback hook for Message Events. This method will be invoked when a client send a message. 
    * 
    * @param message The text message 
    */ 
    @OnMessage 
    public void onMessage(String message) { 
     if (this.messageHandler != null) { 
      this.messageHandler.handleMessage(message); 
     } 
    } 

    /** 
    * register message handler 
    * 
    * @param msgHandler 
    */ 
    public void addMessageHandler(MessageHandler msgHandler) { 
     this.messageHandler = msgHandler; 
    } 

    /** 
    * Send a message. 
    * 
    * @param message 
    */ 
    public void sendMessage(String message) { 
     this.userSession.getAsyncRemote().sendText(message); 
    } 

    /** 
    * Message handler. 
    * 
    * @author Jiji_Sasidharan 
    */ 
    public static interface MessageHandler { 

     public void handleMessage(String message); 
    } 
} 

Anwendungsklasse

package com.lge.racss.test; 

import java.net.URI; 
import java.net.URISyntaxException; 


public class Application { 


    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     URI uri; 
     try { 
      uri = new URI("wss://localhost:8443/index"); 
      System.out.println("webSoekt Address : "+uri.toString()); 
      final WebsocketClientEndpoint clientEndPoint = new WebsocketClientEndpoint(uri); 
      System.out.println("after clientEndPoint"); 
      // add listener 
      clientEndPoint.addMessageHandler(new WebsocketClientEndpoint.MessageHandler() { 
       public void handleMessage(String message) { 
        System.out.println(message); 
       } 
      }); 
      System.out.println("add listener"); 
      // send message to websocket 
      clientEndPoint.sendMessage("{'event':'addChannel','channel':'ok_btccny_ticker'}"); 
      System.out.println("send"); 
      // wait 5 seconds for messages from websocket 
      try { 
       Thread.sleep(5000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } catch (URISyntaxException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

} 

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.lge.racss.test</groupId> 
    <artifactId>SignalingServerTest</artifactId> 
    <packaging>war</packaging> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>SignalingServerTest Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
<dependency> 
    <groupId>javax.websocket</groupId> 
    <artifactId>javax.websocket-api</artifactId> 
    <version>1.1</version> 
</dependency> 

    <dependency> 
    <groupId>org.json</groupId> 
    <artifactId>json</artifactId> 
    <version>20140107</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.tyrus</groupId> 
     <artifactId>tyrus-container-grizzly-client</artifactId> 
     <version>1.8.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.mybatis</groupId> 
     <artifactId>mybatis</artifactId> 
     <version>3.4.1</version> 
    </dependency> 
    <dependency> 
    <groupId>org.apache.ibatis</groupId> 
    <artifactId>ibatis-core</artifactId> 
    <version>3.0</version> 
</dependency> 
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> 
    <dependency> 
     <groupId>org.mybatis</groupId> 
     <artifactId>mybatis-spring</artifactId> 
     <version>1.3.0</version> 
    </dependency> 
    <dependency> 
    <groupId>com.neovisionaries</groupId> 
    <artifactId>nv-websocket-client</artifactId> 
    <version>1.31</version> 
</dependency> 
    </dependencies> 
    <build> 
    <finalName>SignalingServerTest</finalName> 
    <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
      <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>exec-maven-plugin</artifactId> 
      <version>1.2.1</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>java</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <mainClass>com.lge.racss.test.Application</mainClass> 
      </configuration> 
      </plugin> 
    </plugins> 
    </build> 
</project> 

Dies sind alle Codes, die in meinem Client verwendet werden. Es war erfolgreich, von einem anderen Client, der durch Javascript gemacht wurde, eine Verbindung zum Server herzustellen.

Ich denke, dass Java WebSocket Client-Konfiguration geändert werden sollte oder etwas in die Konfiguration eingefügt wird. Hast du irgendwelche Ideen mit diesen Jungs? Hilf mir aus.

Antwort

0

Ihre URL fehlt ein Tailing-Schrägstrich. Sollte sein: wss: // localhost: 8443/index/

Verwandte Themen