Obtenir NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName ()
Je suis confronté à un problème lors du déploiement d'un service Tomcat 8. L'obtention d'erreur suivant :
Causés par: java.lang.NoSuchMethodError:
javax.servlet.ServletContext.getVirtualServerName()Ljava/lang/String;
au org.apache.tomcat.websocket.serveur.WsServerContainer.(WsServerContainer.java:149)
au org.apache.tomcat.websocket.serveur.WsSci.init(WsSci.java:131)
au org.apache.tomcat.websocket.serveur.WsSci.onStartup(WsSci.java:47)
au org.apache.catalina.de base.StandardContext.startInternal(StandardContext.java:5244)
au org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 10 plus
Méthode getVirtualServerName
a été introduit dans le Servlet 3.1 et après l'extraction de MANIFEST.MF
de mon servlet-api
pot j'ai obtenu détails suivants :
Specification-Title: Java API for Servlets
Specification-Version: 3.1
Specification-Vendor: Sun Microsystems, Inc.
Implementation-Title: javax.servlet
Qui dit que son devoir 3.1. Donc, il y a une autre raison pour cette erreur? S'il vous plaît aider
source d'informationauteur Rehman
Vous devez vous connecter pour publier un commentaire.
De vérifier toutes vos Maven (ou l'équivalent) dépendances et assurez-vous que vous - ou, plus probablement une autre dépendance, ne sont pas en tirant dans une pré-version 3.1 de
javax.servlet /servlet-api
que peut prendre la priorité sur ce qui est dans votre Tomcat 8. Si vous avez déployé manuellement, assurez-vous que vous n'avez pas copié manuellement une servlet-api Bocaux dans Tomcat.Voir: https://stackoverflow.com/a/26232535/954442
J'ai eu cette erreur sur IntelliJ avec maven après la mise à jour de l'Ide.
Je pourrais exécuter les tests avec maven, mais pas de mon IDE.
J'ai résolu le problème en supprimant le
./idea
etproject.iml
fichiers et recharger le projet.la méthode
getVirtualServerName
a été ajouté dans ServletContext dans le Servlet 3.1. Trouver la java doc de la méthode getVirtualServerNamece problème peut avoir au moins 3 raisons:
votre servlet version est plus ancienne que 3.1.
autres bocal a la servlet version antérieure à la version 3.1.
votre version de tomcat est âgé de plus de 8
pour résoudre ce problème, vous pouvez essayer de le ci-dessous.
I. pour vérifier votre pom.xml si il y a le code ci-dessous.
si votre pom.xml a le code ci-dessus, il a toujours ce problème. vous pouvez faire la seconde.
II. pour vérifier votre autre pot a reportez-vous à la
javax.servlet-api
jar. par exemple, leorg.apache.santuario
a reportez-vous à lajavax.servlet-api
jar. l'pom.xml:mais quand vous regardez les dépendances maven, référez-vous à la
javax.servlet-api
pot dont la version est de 2,3 âgés de plus de 3.1.de sorte que vous devrait exclure la version 2.3. pom.xml:
III. printemps de démarrage exécuter la valeur par défaut de tomcat 7. afin de définir votre version de tomcat 8 au lieu de tomcat 7. il faut donc ajouter le code de votre pom.xml:
Printemps de démarrage sera exécuté tomcat 7 par défaut, vous devez remplacer maven build tomcat.version dans votre pom.xml. Voir ci-dessous pour exécuter tomcat 8.0.30
Devrait résoudre votre problème.
Résolu
Sur mon mac avec java 8 est en face d'un problème avec téléchargés tomcat de site et décompressez-le.
Ma question ai résolu, car il y avait un extra servlet-api.jar fichier qui était de faire rire. Il venait de
/Library/Java/Extensions/servlet-api.jar
Pour le trouver dans votre système, vous pouvez utiliser
sudo find /-name servlet-api.jar
Supprimé par la sauvegarder quelque part d'autre.
J'ai été par la suite pour installer
https://gist.github.com/ddanailov-nmdp/c97aba2ca926b9627f6b4f7174083a32
Cela a sûrement quelque chose à voir avec la version de javax.servlet et la version de Tomcat.
Dans mon cas, il s'en alla quand j'ai déclaré javax.servlet dépendance dans gradle avec aucune version. Ce