2017-09-06 2 views
-1

ich Syntaxfehler auf einem Methodenaufruf, dass ich nicht verstehe:Warum stimmt diese Methode nicht mit der definierten Signatur überein?

The method connectToServer(Endpoint, ClientEndpointConfig, URI) in the type WebSocketContainer is not applicable for the arguments (WebsocketClientEndpoint, ClientEndpointConfig, URI) 

Die Klasse WebsocketClientEndpoint erstreckt Endpoint und sollte die Unterschrift connectToServer(Class<? extends Endpoint> endpointClass, ClientEndpointConfig cec, URI path) entsprechen. Aber das tut es nicht. Ich bekomme einen Syntaxfehler in Eclipse.

Was fehlt mir? Hier

ist der Code:

import java.io.IOException; 
import java.net.URI; 
import java.util.Arrays; 
import java.util.List; 
import java.util.Map; 

import javax.websocket.ClientEndpoint; 
import javax.websocket.ClientEndpointConfig; 
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 javax.xml.bind.DatatypeConverter; 

import org.glassfish.tyrus.client.ClientProperties; 
import org.glassfish.tyrus.client.auth.AuthConfig; 
import org.glassfish.tyrus.client.auth.Credentials; 
import org.glassfish.tyrus.core.wsadl.model.Endpoint; 

/** 
*/ 
@ClientEndpoint 
public class WebsocketClientEndpoint extends Endpoint 
{ 

Session userSession = null; 

private MessageHandler messageHandler; 

public WebsocketClientEndpoint(URI endpointURI) 
{ 
    try 
    { 
     ClientEndpointConfig.Configurator configurator = new ClientEndpointConfig.Configurator() 
     { 
      public void beforeRequest(Map<String, List<String>> headers) 
      { 
       headers.put("Authorization", 
         Arrays.asList("Basic " + DatatypeConverter.printBase64Binary("user:password".getBytes()))); 
      } 
     }; 

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

     WebSocketContainer container = ContainerProvider.getWebSocketContainer(); 

     container.connectToServer(this, clientConfig, endpointURI); //Signature mismatch here 
    } 
    catch (Exception e) 
    { 
     throw new RuntimeException(e); 
    } 
} 

... websocket callbacks 
} 
+0

'Klasse 'und' Endpoint' sind zwei sehr unterschiedliche Dinge. – tkausl

Antwort

0

Die connectToServer nimmt javax.websocket.Endpoint, aber sie sind vorbei Objekt, das org.glassfish.tyrus.core.wsadl.model.Endpoint erstreckt, die völlig unvereinbar Klasse ist und nicht funktioniert erstreckt javax.websocket.Endpoint.

Verwandte Themen