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 ?

30
demandé sur Will 2014-04-24 22:53:19

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 groupcom.sun.jerseyJersey 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.

41
répondu Will 2017-10-09 17:56:49

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.

22
répondu Sloloem 2017-10-12 15:32:30

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

3
répondu pedrosakki 2015-03-20 17:29:21

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

2
répondu Alessandra 2017-02-01 04:48:06

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.

1
répondu Nir Sivan 2015-01-14 09:31:26

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é.

1
répondu user3621633 2015-07-21 15:11:26

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>
0
répondu Subhasish Sahu 2017-06-07 08:56:42