1

I am strugging to make a Hello World Jersey web service on my Tomcat 5.5.30. I am using Eclipse Galileo. I am NOT using Maven.

  • created a Dynamic Web Module in version 2.4
  • created a new Package com.company.webservice in Java Resources: src folder of the Eclipse project
  • added the following libraries to the project, from jaxrs-ri-2.19:

    • javax.ws.rs-api-2.0.1.jar
    • jersey-client.jar
    • jersey-common.jar
    • jersey-container-servlet.jar
    • jersey-container-servlet-core.jar
    • jersey-media-jaxb.jar
    • jersey-server.jar
    • aopalliance-repackaged-2.4.0-b25.jar
    • asm-debug-all-5.0.3.jar
    • hk2-api-2.4.0-b25.jar
    • hk2-locator-2.4.0-b25.jar
    • hk2-utils-2.4.0-b25.jar
    • javassist-3.18.1-GA.jar
    • javax.annotation-api-1.2.jar
    • javax.inject-2.4.0-b25.jar
    • javax.servlet-api-3.0.1.jar
    • jaxb-api-2.2.7.jar
    • jersey-guava-2.19.jar
    • org.osgi.core-4.2.0.jar
    • osgi-resource-locator-1.0.1.jar
    • persistence-api-1.0.jar
    • validation-api-1.1.0.Final.jar

Here is my web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="2.4">
 <display-name>WS_Server</display-name>

  <welcome-file-list>
   <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>

 <servlet>
   <servlet-name>HelloService</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.company.webservice</param-value>
   </init-param>

   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>HelloService</servlet-name>
   <url-pattern>/rest/*</url-pattern>
 </servlet-mapping>
</web-app>

I then added the following HelloService.java in the package created:

package com.company.webservice;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;


@Path("/hello")
public class HelloService {

    @GET
    @Path("/{param}")
    public Response getMsg(@PathParam("param")
    String msg) {

        String output = "Jersey answers : " + msg;

        return Response.status(200).entity(output).build();

    }
}

But when I start the Tomcat Server I get the following error:

4 août 2015 09:31:29 org.apache.catalina.core.ApplicationContext log
INFO: La servlet HelloService est marqué comme indisponible
4 août 2015 09:31:29 org.apache.catalina.core.ApplicationContext log
GRAVE: Error loading WebappClassLoader
  delegate: false
  repositories:
    /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@1522de2
 org.glassfish.jersey.servlet.ServletContainer
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1436)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1282)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1068)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3996)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4266)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:448)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
4 août 2015 09:31:29 org.apache.catalina.core.StandardContext loadOnStartup
GRAVE: La servlet /ServeurWS a généré une exception "load()"
java.lang.ClassNotFoundException: org.glassfish.jersey.servlet.ServletContainer
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1436)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1282)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1068)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3996)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4266)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:448)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)

UPDATE

If I deploy the jars in the apache-tomcat-5.5.30\webapps\ServeurWS\WEB-INF\lib folder (thank you peeskillet for this), I have another error, looks like a version error:

5 août 2015 14:10:41 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(F:\Java\apache-tomcat-5.5.30\webapps\ServeurWS\WEB-INF\lib\javax.servlet-api-3.0.1.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433)
Caused by: java.lang.UnsupportedClassVersionError: Bad version number in .class file (unable to load class org.glassfish.jersey.servlet.ServletContainer)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1962)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:931)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1403)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1282)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1068)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:966)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3996)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4266)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:736)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
    at org.apache.catalina.core.StandardService.start(StandardService.java:448)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:700)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
    ... 6 more
  • Everything looks good. I would look into whether the jars are actually getting deployed with the application. This is a problem I see alot with Tomcat/Eclipse users. The ServletContainer _does_ exist in one of those jars, so you shouldn't get this exception if the jars are there. – Paul Samsotha Aug 05 '15 at 10:42
  • Yes you're right. I just copied these Jars in the **apache-tomcat-5.5.30\webapps\ServeurWS\WEB-INF\lib** folder, and now I've got another error: –  Aug 05 '15 at 14:16
  • If you're working with Java 6, you might need an older Jersey version. Jersey 2.7 (I believe) and up are compiled with Java 7 – Paul Samsotha Aug 05 '15 at 14:27
  • I am using **Java 5** (jdk1.5.0_09) –  Aug 05 '15 at 14:50
  • You might want to try with older Jersey 1.x versions. Not sure if Java 5 is compatible with 2.x. Or change Java version if possible. Download one of the _earlier_ 1.x [bundles from here](http://mvnrepository.com/artifact/com.sun.jersey/jersey-bundle). Remove all the jars you have above. The single jersey-bundle jar should give you basic functionality. You will also need to change the web.xml configuration. You can see [here](https://jersey.java.net/documentation/1.18/user-guide.html#d4e188) – Paul Samsotha Aug 05 '15 at 14:59

1 Answers1

2

So what I had to do was to remove all previous libraries and to use only these libraries:

jersey-bundle-1.1.5.1.jar
asm-3.1.jar
jsr311-api-1.1.1.jar

Change the web.xml into:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="2.4">
 <display-name>ServeurWS2</display-name>

  <welcome-file-list>
   <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>

 <servlet>
   <servlet-name>HelloService</servlet-name>
   <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

   <init-param>
     <param-name>com.sun.jersey.config.property.packages</param-name>
     <param-value>com.company.webservice</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
 </servlet>
 <servlet-mapping>
   <servlet-name>HelloService</servlet-name>
   <url-pattern>/rest/*</url-pattern>
 </servlet-mapping>
 </web-app>

and to copy the libraries in the WEB-INF\lib folder of the application in the webapps folder of tomcat server.

Big thanks go to peeskillet