Exception dans le reste du Jersey
j'essaie de lancer l'application mais en utilisant <!-Et j'ai une exception comme celle-ci.
je pense que cela peut être quelque chose avec Maven dependency
, mais j'en suis sûr. Si certains savent ce qui se passe merci pour la réponse:)
Exception:
message Servlet execution threw an exception
description The server encountered an internal error that prevented it from fulfilling this request.
exception
javax.servlet.ServletException: Servlet execution threw an exception
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
java.lang.AbstractMethodError: javax.ws.rs.core.UriBuilder.uri(Ljava/lang/String;)Ljavax/ws/rs/core/UriBuilder;
javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:119)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:651)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.50 logs.
Maven POM
:
<properties>
<application.version>1.0</application.version>
<spring.version>4.0.0.RELEASE</spring.version>
<spring.security.version>3.2.0.RELEASE</spring.security.version>
<jersey.version>1.18.1</jersey.version>
</properties>
<dependencies>
<dependency>
<groupId>climbing-portal-facade</groupId>
<artifactId>climbing-portal-facade</artifactId>
<version>${application.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>${jersey.version}</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.test-framework.providers</groupId>
<artifactId>jersey-test-framework-provider-jdk-http</artifactId>
<version>2.7</version>
</dependency>
<!-- Jersey + Spring -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-spring</artifactId>
<version>${jersey.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
une idée ?
7 réponses
vous utilisez les deux Jersey 1 & 2
(Jersey 1 est une dépendance explicite, Jersey 2 est une dépendance transitive de jersey-test-framework-provider-jdk-http
) et ce n'est pas possible - si l' classloader
sélectionne le mauvais URIBuilder
classe.
Jersey
dépendances group
com.sun.jersey
Jersey version 1
.
Jersey version 2
utilise le groupe org.glassfish.jersey
.
vous avez les deux dans votre Maven
les dépendances qui causent ce problème.
Si possible, utilisez uniquement Jersey 2
.
cela peut aussi être causé en incluant les deux
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.xxx</version>
</dependency>
Et
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.xx</version>
</dependency>
com.sun.jersey
artefacts comprennent une version (1.0) de la javax.ws.rs espace de noms, donc il est le seul qui est probablement nécessaire. rs-api inclut également une version de JAX-RS (2.0) dans le même espace de noms, donc quand vous avez les deux ensemble, mais ce sont des versions différentes, il peut causer le conflit que vous voyez.
ceci peut être causé par le fait d'avoir "n'importe quel" conflit qui fournit à la fois JAX-RS 1.0 et JAX-RS 2.0. JAX-RS 1.0 est fréquemment fourni par le com.sun.jersey:jersey*
artefacts (plus précisément jersey-core), et JAX-RS 2.0 est fourni par l'un des org.glassfish.jersey.core:jersey*
artefacts, ou le javax.ws.rs:javax.ws.rs-api
artefact, ou, éventuellement, la javax:javaee-api
objet, ou le jsr311-api-1.0
artefact.
le problème est que puisqu'ils sont différents groupes+noms d'artefacts, maven par défaut va sans le savoir incluez les pots de version 1.0 et 2.0 dans votre distro final.
autres ce qui complique le problème, c'est qu'étant donné qu'il y a plusieurs jarres conflictuelles dans le chemin de classe, "parfois" cela pourrait marcher, et "parfois" cela pourrait ne pas marcher (d'où certains rapports de "cela a fonctionné avec tomcat7, mais échoue avec tomcat8", etc.)
ce qui complique encore le problème, c'est que si vous n'avez qu'une seule dépendance qui dépend de façon transitoire de l'une ou l'autre de ces versions, maven apportera les deux versions et vous serez privé. Vous pouvez trouver ce qui vient d'où avec mvn dependency:tree
Donc, vous devez soit aller "tous 1.0" ou "2.0."Dans notre cas, nous avons choisi la version 1.0 en ajoutant des exclusions transitoires de la dépendance à notre MOP. Si vous voulez aller tout 2.0 voir ici.
Je résous ce problème: je supprime la bibliothèque JAX-RS 2.0, j'Ajoute les bibliothèques jersey-server-1.8.jar, jersey-core-1.8.jar, jersey-servlet-1.12.jar et asm-3.3.1.jar
dans mon cas, les deux jsr311-api-0.10.pot et javax.ws.rs-api-2.0.jar étaient dans la demande lib. J'ai supprimé jsr311 jar et le problème a été résolu
j'ai eu exactement la question n'a pas pu trouver le problème. La première fois que le Tomcat est monté et tout a fonctionné mais après redémarrage du serveur J'avais l'exception.
la solution était de rétrograder tomcat à 7.0.26 il a fait le tour Pas sûr pourquoi cependant.
Je ne l'ai pas réalisé, mais il y avait un fichier nommé javax.ws-rs-api-2.0.jar déjà dans le WEB-INF / lib dossier sur le serveur. Il a été ajouté il y a deux ans par quelqu'un d'autre. Cela provoquait un conflit avec le jeu de fichiers jersey que j'ai copié sur le WEB-INF / lib dossier. J'ai sauvegardé/renommé le fichier, redémarré le service pour mon conteneur (Tomcat), et ça a fonctionné.
Nous avons besoin de faire les changements suivants :
web.xml
<servlet>
<servlet-name>RESTful Jersey Web Service Sample</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.subu.jersey.rest</param-value>
</init-param>
</servlet>
pom.xml
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.17</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.17</version>
</dependency>