title: Allocate exception for servlet Jersey REST Service Error
body: <p>I'm re-coding a webservice that I've already created so that I can create a "how-to" with git for the other members of my group who will be taking over the project.</p>
  
  <p>This time around, I started to get an error when trying to use my webservice and I can't seem to find the problem because the code looks exactly like what I've previously coded (a code that worked).</p>
  
  <p>I am using apache tomcat and Jersey with JSON.</p>
  
  <p>Here is the error:</p>
  
  <p><code>mai 14, 2015 6:08:02 PM org.apache.catalina.core.StandardWrapperValve invoke
  SEVERE: Allocate exception for servlet Jersey REST Service
  com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
      at com.sun.jersey.server.impl.application.RootResourceUriRules.&lt;init&gt;(RootResourceUriRules.java:99)
      at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1359)
      at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:180)
      at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:799)
      at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:795)
      at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
      at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795)
      at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790)
      at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509)
      at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339)
      at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605)
      at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207)
      at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394)
      at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577)
      at javax.servlet.GenericServlet.init(GenericServlet.java:212)
      at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1213)
      at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:827)
      at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
      at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
      at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
      at java.lang.Thread.run(Unknown Source)</code></p>
  
  <p>Here is my web.xml file:</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
  &lt;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_2_5.xsd" id="WebApp_ID" version="2.5"&gt;
  &lt;display-name&gt;com.labtabdb.rest&lt;/display-name&gt;
  &lt;welcome-file-list&gt;
    &lt;welcome-file&gt;readme.html&lt;/welcome-file&gt;   
    &lt;welcome-file&gt;index.html&lt;/welcome-file&gt;
    &lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;
    &lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;
    &lt;welcome-file&gt;default.html&lt;/welcome-file&gt;
    &lt;welcome-file&gt;default.htm&lt;/welcome-file&gt;
    &lt;welcome-file&gt;default.jsp&lt;/welcome-file&gt;
  &lt;/welcome-file-list&gt;
  
  &lt;servlet&gt;
    &lt;servlet-name&gt;Jersey REST Service&lt;/servlet-name&gt;
    &lt;servlet-class&gt;com.sun.jersey.spi.container.servlet.ServletContainer&lt;/servlet-class&gt;
      &lt;init-param&gt;
        &lt;param-name&gt;com.sun.jersey.config.property.packages&lt;/param-name&gt; 
        &lt;param-value&gt;com.labtabdb.rest&lt;/param-value&gt; 
     &lt;/init-param&gt;
    &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; 
  &lt;/servlet&gt;
  
  &lt;servlet-mapping&gt;
     &lt;servlet-name&gt;Jersey REST Service&lt;/servlet-name&gt;
     &lt;url-pattern&gt;/nxp/*&lt;/url-pattern&gt; 
  &lt;/servlet-mapping&gt;
  
  &lt;/web-app&gt;
  </code></pre>
  
  <p>Here is a class that uses the @Path annotation:</p>
  
  <pre><code>//url path for class it's methods/chemin url pour la classe et ses methodes
  @Path ("/v1/inventory") 
  public class V1__inventory
  {
  
  
  @GET //url ending in only /v1/inventory /chemin terminé par /v1/inventory
  @Produces(MediaType.APPLICATION_JSON) 
  public Response errorIfNoQueryParamSpecified() throws Exception
  {
          return Response
                  .status(400) //bad request
                  .entity("Error: Please specify extension and parameter for this search.") 
                  .build();
  }
  
  /**
   * Method that returns materials filter by material name
   * @param material name
   * @return Response
   * @throws Exception
   */
  
  @Path("/{material_label}") 
  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public Response returnMaterial(@PathParam("material_label") String material) throws Exception
  {
  
      material = URLDecoder.decode(material, "UTF-8"); //decode URL param
      String returnString = null;
      JSONArray json;
  
      try
      {   
  
          json = LabTab_MySQLQuerys 
                  .getMaterialsByName(material);
  
          //if there are no results to the query
          if(json.length() == 0) 
              throw new CustomException("No results returned");
          else //otherwise return results
              returnString = json.toString();
  
      }
      catch(CustomException e)
      {
          return Response
                  .status(204)
                  .entity(e.getMessage())
                  .build();
      }
      catch (Exception e)
      {
          e.printStackTrace();
          return Response
                  .status(500) //internal server error
                  .entity("Server was not able to process your request")
                  .build();
      }
  
      return Response
              .ok(returnString)
              .build();
  }
  </code></pre>
  
  <p>I've been searching and reading the same articles over and over for 3 days now and I have yet to find a solution that solves my error.</p>
  
  <p>All help is appreciated</p>