Ich werde dem vorausgehen, dass ich keine Maven-Abhängigkeiten verwende, aber ich weiß, dass mir eine Jar-Datei wls-api.jar
fehlt (zumindest habe ich dies gelesen).
Um Abhilfe zu schaffen, habe ich den Oracle-weblogic-7.9.jar
heruntergeladen, das Problem bleibt jedoch bestehen.
Die Ausnahme wird auf diese Zeile geworfen
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
Kann mir jemand sagen, warum diese Leitung ständig versagt?
UPDATE: Beim weiteren Lesen der Beispiele sehe ich diese Abhängigkeit
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>
Ich habe javax.websocket-api.jar
im Erstellungspfad des Servers und des Clients, wie es erforderlich ist. Was fehlt mir hier?
Anderes Update: Ich habe vergessen, den Fehler einzufügen!
Exception in thread "main" Java.lang.RuntimeException: Could not find an implementation class.
at javax.websocket.ContainerProvider.getWebSocketContainer(ContainerProvider.Java:73)
at connect.<init>(connect.Java:21)
at test.main(test.Java:11)
javax.websocket api ist nur die Spezifikation, die nicht vollständig implementiert ist. Möglicherweise müssen Sie die jar-Datei tyrus-standalone-client-1.9.jar verwenden und dasselbe Beispiel verwenden, das Ihr Problem lösen sollte. Ich habe mein Beispiel getestet und es funktioniert gut.
hoffe das wird dir helfen.
Hinzufügen
// https://mvnrepository.com/artifact/org.glassfish.tyrus.bundles/tyrus-standalone-client
compile-Gruppe: 'org.glassfish.tyrus.bundles', Name: 'Tyrus-Standalone-Client', Version: '1.9'
zu meiner build.gradle datei funktionierte für mich.
Ich denke, die RuntimeException
, die Sie gerade erleben, wird zum Glück nicht durch einen direkten Codierungsfehler erzeugt.
Die Methode getWebSocketContainer()
versucht, wie in here beschrieben, einfach andere Klassen zu laden und die statische Instanz der ContainerProvider
auf dem Server abzurufen.
Die Methode sucht nach der Implementierungsklasse
ContainerProvider
in der Reihenfolge, die in der DateiMETA-INF/services/javax.websocket.ContainerProvider
aufgeführt ist, und gibt dieWebSocketContainer
-Implementierung aus derContainerProvider
-Implementierung zurück, die nichtnull
ist.
Dies bedeutet leider, dass Ihr Projekt nicht richtig konfiguriert ist. Prüfen Sie, ob diese Datei im Erstellungspfad des Projekts enthalten ist.
Wenn andere Projekte, die Sie betrachten, die von Ihnen beschriebene Maven-Abhängigkeit verwenden, würde ich versuchen, Ihr Projekt so einzurichten, dass es dasselbe ist.
Hoffe das hat geholfen!