Jersey application running on tomcat leads to NoSuchMethodError

I recently tried to port my app to Jersey from Glassfish 4.1 to launch Tomcat 8.

The application has been successfully deployed to tomcat:

  03-Aug-2015 18: 42: 07.982 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive /Users/shikloshi/Installed/apache-tomcat-8.0.24/webapps /lit-2.war has finished in 1,763 ms 

But when creating a request to the server, it leads to this stack trace:

  java.lang.NoSuchMethodError: org.glassfish.hk2.utilities.reflection.ReflectionHelper.getFirstTypeArgument (Ljava / lang / reflect / Type;) Ljava / lang / reflect / Type;
     org.jvnet.hk2.internal.Utilities.getInjectionResolverType (Utilities.java:497)
     org.jvnet.hk2.internal.ServiceLocatorImpl.checkConfiguration (ServiceLocatorImpl.java:1589)
     org.jvnet.hk2.internal.ServiceLocatorImpl.addConfiguration (ServiceLocatorImpl.java:1964)
     org.jvnet.hk2.internal.DynamicConfigurationImpl.commit (DynamicConfigurationImpl.java:245)
     org.jvnet.hk2.external.generator.ServiceLocatorGeneratorImpl.initialize (ServiceLocatorGeneratorImpl.java:88)
     org.jvnet.hk2.external.generator.ServiceLocatorGeneratorImpl.create (ServiceLocatorGeneratorImpl.java:98)
     org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.internalCreate (ServiceLocatorFactoryImpl.java:270)
     org.glassfish.hk2.internal.ServiceLocatorFactoryImpl.create (ServiceLocatorFactoryImpl.java:230)
     org.glassfish.jersey.internal.inject.Injections._createLocator (Injections.java:138)
     org.glassfish.jersey.internal.inject.Injections.createLocator (Injections.java:123)
     org.glassfish.jersey.server.ApplicationHandler. <init> (ApplicationHandler.java:308)
     org.glassfish.jersey.servlet.WebComponent. <init> (WebComponent.java data36)
     org.glassfish.jersey.servlet.ServletContainer.init (ServletContainer.java:170)
     org.glassfish.jersey.servlet.ServletContainer.init (ServletContainer.javahaps58)
     javax.servlet.GenericServlet.init (GenericServlet.java:158)
     org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:502)
     org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:79)
     org.apache.catalina.valves.AbstractAccessLogValve.invoke (AbstractAccessLogValve.java:617)
     org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java∗18)
     org.apache.coyote.http11.AbstractHttp11Processor.process (AbstractHttp11Processor.java:1091)
     org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:668)
     org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1527)
     org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run (NioEndpoint.java:1484)
     java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)
     java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617)
     org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61)
     java.lang.Thread.run (Thread.java:745)

My web.xml looks like this:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <servlet> <servlet-name>lit-servlet</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>com.lit.providers.application.LitApplication</param-value> </init-param> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.lit.providers</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>lit-servlet</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping> </web-app> 

Relevant parts of my pom.xml:

 <properties> <org.glassfish.jersey>2.16</org.glassfish.jersey> <com.fasterxml.jackson>2.5.1</com.fasterxml.jackson> </properties> <artifactId>resources</artifactId> <dependencies> <dependency> <groupId>com.lit.server</groupId> <artifactId>common</artifactId> </dependency> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>javax.ws.rs-api</artifactId> <version>2.0.1</version> <!--<scope>provided</scope>--> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>${org.glassfish.jersey}</version> <!--<scope>provided</scope>--> </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>${com.fasterxml.jackson}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>${com.fasterxml.jackson}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${com.fasterxml.jackson}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jaxb-annotations</artifactId> <version>${com.fasterxml.jackson}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> </dependencies> 

When working on Glassfish, it worked fine.

I am using Java 8 ant Tomcat 8.

What to do to make my application work on tomcat?

+4
source share

All Articles