How to configure jax-rs web service web.xml properly

19,845

Solution 1

You've set the wrong servlet. Assuming that you're using Jersey, You need to specify your servlet as follows:

<servlet>
    <servlet-name>Rest</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>org.LMS.Controller.Test</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Rest</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

And when you want to access it, you use the following url

http://(host)[:port]/(context path)/rest/test
e.g. 
http://localhost:8080/MyRestProject/rest/test

Solution 2

To configure jax-rs webservice using jersey, you can configure with most simple and with only 2 configurations on web.xml (using more steps at java code and annotations), follow steps:

1) Write a Application (Java code):

package your.package.example;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.core.Application;

public class ExampleApplication extends Application {

     public Set<Class<?>> getClasses() {
           Set<Class<?>> s = new HashSet<Class<?>>();

           // Annotated @Path endpoint
           s.add(ExampleWebServiceRestClass.class); 

           return s;
       }
}

2) Add config reference (to Application code) on your web.xml:

<web-app>

    <servlet>
        <servlet-name>your.package.example.ExampleApplication
        </servlet-name>

        <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>

    </servlet>
    <servlet-mapping>
        <servlet-name>your.package.example.ExampleApplication
        </servlet-name>
        <url-pattern>/wspath/*</url-pattern>
    </servlet-mapping>
</web-app>
Share:
19,845
Mario Dennis
Author by

Mario Dennis

Updated on June 04, 2022

Comments

  • Mario Dennis
    Mario Dennis almost 2 years

    I am trying to implement a jax-rs web service using jersey framework. I have written the web service but I don't fully understand what the web.xml tags mean so I don't know if I have configured it correct but when I try to access the service I get an error. Here is the web service:

    package org.LMS.Controller;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    @Path ("/test")
    public class Test {
        private String name = "Worked";
    
        @GET
        @Produces (MediaType.APPLICATION_XHTML_XML)
        public String getTest ()
        {
            return name;
        }
    }
    

    my web.xml is:

     <!-- Test web service mapping -->
      <servlet> 
        <display-name>Test</display-name>
        <servlet-name>Test</servlet-name>
        <servlet-class>org.LMS.Controller</servlet-class>
        <init-param>
            <param-name>org.LMS.Controller.Test</param-name>
            <param-value>eduscope</param-value>
        </init-param>
      </servlet>
      <servlet-mapping>
        <servlet-name>Test</servlet-name>
        <url-pattern>/test</url-pattern>
      </servlet-mapping>
    <!--end Test web service mapping -->
    

    and this is the error I'm getting when I try to access my application: HTTP Status 500 - type Exception report message

    description The server encountered an internal error () that prevented it from fulfilling this request.

    exception

    javax.servlet.ServletException: Wrapper cannot find servlet class org.LMS.Controller or a class it depends on
        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
        org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
        org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        java.lang.Thread.run(Thread.java:679)
    root cause
    
    java.lang.ClassNotFoundException: org.LMS.Controller
        org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
        org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
        org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
        org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        java.lang.Thread.run(Thread.java:679)
    

    Can you guys tell me what I'm doing wrong and explain what each tag in the web.xml file means has it relates to web services