java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;
java.lang.NoSuchMethodError: javax.ws.rs.core.Application.getProperties()Ljava/util/Map;
The Application#getProperties()
method was introduced in JAX-RS 2.0. And this error typically happens when you mix JAX-RS 1.x and JAX-RS 2.x.
So check the JARs on your classpath and remove everything that relates to JAX-RS 1.x (and Jersey 1.x).
Once you are using Maven, you can run mvn dependency:tree
and check what's going on with your dependencies.
I also see a few things that may cause some headaches:
See below the correct Servlet API dependency for Tomcat 8 (don't forget the
provided
scope):<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1</version> <scope>provided</scope> </dependency>
Ensure that all Jersey dependencies use the same version.
You probably don't need the
javax.ws.rs-api
,jersey-server
andjersey-common
dependencies.Use
jersey-container-servlet
,jersey-media-json-jackson
andjersey-media-multipart
dependencies.The
jersey-container-servlet
dependency usesjavax.ws.rs-api
,jersey-server
andjersey-common
as transitive dependencies.
You probably don't need
<type>jar</type>
in your dependencies.
It can be solved by excluding the jar as defined below, as JSR jar is conflicting with JAX-RS and creating the above error
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
Please remove it and run, it worked for me and i hope it will work for u too.
I agree with Cassio. There are a couple of things I would add:
- The dependency for me existed in jersey-core.
- I could only see the hierarchal dependency in mvn dependency:tree. I may have missed it, but it was not showing up in the Eclipse hierarchy tree view.