2

I'm creating a simple REST application but I get a ClassNotFoundException for class com.sun.jersey.core.util.FeaturesAndProperties which is part of jersey-core . Looks like conflict in the jersey dependencies that I've added here but I'm not able to get around it.

Pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.rest.example</groupId>
<artifactId>RESTExample2</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>RESTExample2 Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>1.17.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-servlet</artifactId>
        <version>1.17.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.17.1</version>
    </dependency>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-core</artifactId>
        <version>1.17.1</version>
    </dependency>
</dependencies>
<build>
    <finalName>RESTExample2</finalName>
</build>

EDIT : Following the suggestion to maintain the same version of JAX-RS and Jersey, I changed the dependencies as follows and it all works fine!

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.23.2</version>
    </dependency>
    <!-- Required only when you are using JAX-RS Client -->
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>2.23.2</version>
    </dependency>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0</version>
    </dependency>
</dependencies>

Also, the web.xml was changed to reflect the new jersey-servlet class.

<servlet>
    <servlet-name>jersey-serlvet</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.example.rest</param-value>
    </init-param>
    <init-param>
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
    <param-value>true</param-value>
</init-param>

    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
shark1608
  • 649
  • 11
  • 24
  • Possible duplicate of [java.lang.NoClassDefFoundError error when running my project](https://stackoverflow.com/questions/23521647/java-lang-noclassdeffounderror-error-when-running-my-project) – rogerdpack Oct 12 '17 at 16:10

1 Answers1

3

You can't mix JAX-RS / Jersey versions

Jersey version 1 is the reference implementation for JAX-RS 1. Jersey version 1 uses the com.sun.jersey group / package prefix. Jersey version 2 is the reference implementation for JAX-RS 2. Jersey version 2 uses the org.glassfish.jersey group / package prefix

If possible use JAX-RS / Jersey version 2.

RITZ XAVI
  • 3,633
  • 1
  • 25
  • 35
  • That was my first guess. I'm working on it right now and updating my web.xml. I'll update my post accordingly. – shark1608 Aug 25 '16 at 19:18