-1
我得到一個方法調用的語法錯誤,我不明白:爲什麼此方法不符合定義的簽名?
The method connectToServer(Endpoint, ClientEndpointConfig, URI) in the type WebSocketContainer is not applicable for the arguments (WebsocketClientEndpoint, ClientEndpointConfig, URI)
類WebsocketClientEndpoint
擴展Endpoint
,且應匹配簽名connectToServer(Class<? extends Endpoint> endpointClass, ClientEndpointConfig cec, URI path)
。但事實並非如此。我在eclipse中出現語法錯誤。
我失蹤了什麼?
下面是代碼:
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
}
'Class <?擴展端點>和端點是兩個完全不同的東西。 – tkausl