简体   繁体   中英

Allocate exception for servlet Jersey REST Service Error

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.

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).

I am using apache tomcat and Jersey with JSON.

Here is the error:

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.<init>(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)

Here is my web.xml file:

<?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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>com.labtabdb.rest</display-name>
<welcome-file-list>
  <welcome-file>readme.html</welcome-file>   
  <welcome-file>index.html</welcome-file>
  <welcome-file>index.htm</welcome-file>
  <welcome-file>index.jsp</welcome-file>
  <welcome-file>default.html</welcome-file>
  <welcome-file>default.htm</welcome-file>
  <welcome-file>default.jsp</welcome-file>
</welcome-file-list>

<servlet>
  <servlet-name>Jersey REST Service</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.labtabdb.rest</param-value> 
   </init-param>
  <load-on-startup>1</load-on-startup> 
</servlet>

<servlet-mapping>
   <servlet-name>Jersey REST Service</servlet-name>
   <url-pattern>/nxp/*</url-pattern> 
</servlet-mapping>

</web-app>

Here is a class that uses the @Path annotation:

//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();
}

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.

All help is appreciated

I'm going to go ahead and respond to my own question in hopes that it helps someone new to rest.

I made a pretty stupid mistake while creating my tutorial: My "url" for my web service was, for example, com.webservice.rest. When re-doing my project, I decided to change the names of my packages to correspond with the new url: so my class that had a path annotation, let's say, @PATH ("/v1/inventory") was changed to com.webservice.inventory.

When typing the new package name, I rushed and forgot to include the word rest in com.webservice. rest .inventory .

When programming a webservice, you have to remember to make sure the the prefix of each package containing a path annotation is the url of the web service.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM