Je commencerai par dire que je n'utilise aucune dépendance maven, mais je sais qu'il me manque un fichier jar wls-api.jar
(du moins, c'est ce que j'ai lu).
Pour remédier à cela, j'ai téléchargé le Oracle-weblogic-7.9.jar
mais le problème persiste.
L'exception est levée à cette ligne
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
Quelqu'un peut-il me dire pourquoi cette ligne échoue continuellement?
UPDATE: après avoir lu les exemples, je vois utiliser cette dépendance
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0</version>
J'ai javax.websocket-api.jar
dans le chemin de compilation du serveur et du client tel que requis. Qu'est-ce que j'oublie ici?
Autre mise à jour: j'ai oublié d'inclure l'erreur renvoyée!
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 n’est que la spécification n’ayant pas une implémentation complète, vous devrez peut-être utiliser le fichier jar tyrus-standalone-client-1.9.jar et essayer le même exemple qui devrait résoudre votre problème. J'ai testé avec mon exemple et cela fonctionne bien.
j'espère que ceci vous aidera.
Ajouter
// https://mvnrepository.com/artifact/org.glassfish.tyrus.bundles/tyrus-standalone-client
groupe de compilation: 'org.glassfish.tyrus.bundles', nom: 'tyrus-standalone-client', version: '1.9'
à mon build.gradle le fichier a fonctionné pour moi.
Je pense que la RuntimeException
que vous rencontrez n’est heureusement pas générée par une faute de codage direct de votre part.
La méthode getWebSocketContainer()
, telle que décrite here , essaie simplement de charger d'autres classes et d'extraire l'instance statique de ContainerProvider
sur le serveur.
La méthode recherche la classe d'implémentation
ContainerProvider
dans l'ordre indiqué dans le fichierMETA-INF/services/javax.websocket.ContainerProvider
, en renvoyant l'implémentationWebSocketContainer
à partir de l'implémentationContainerProvider
qui n'est pasnull
.
Malheureusement, cela signifie que votre projet n'est pas configuré correctement. Vérifiez deux fois pour vous assurer que ce fichier est inclus dans le chemin de génération de votre projet.
Si d'autres projets que vous étudiez utilisent la dépendance Maven que vous avez décrite, j'essaierais de configurer votre projet de la même manière.
J'espère que cela a aidé!