webentwicklung-frage-antwort-db.com.de

Websocket-Client Es konnte keine Implementierungsklasse gefunden werden

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)
11
Michael Miner

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.

21
Rajendar Reddy

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.

1
dlaagniechy

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 Datei META-INF/services/javax.websocket.ContainerProvider aufgeführt ist, und gibt die WebSocketContainer-Implementierung aus der ContainerProvider-Implementierung zurück, die nicht null 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!

1
James Taylor