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> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>${org.glassfish.jersey}</version> </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?
source share