简体   繁体   English

为servlet Jersey REST服务错误分配异常

[英]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. 我正在重新编写一个我已经创建的Web服务,这样我就可以为我的小组中将接管该项目的其他成员用git创建一个“how-to”。

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). 这一次,我在尝试使用我的webservice时遇到了错误,我似乎无法找到问题,因为代码看起来与我之前编写的代码完全相同(代码有效)。

I am using apache tomcat and Jersey with JSON. 我正在使用apache tomcat和Jersey与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: 这是我的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_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: 这是一个使用@Path注释的类:

//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. 我一直在寻找和阅读相同的文章3天,我还没有找到解决我的错误的解决方案。

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. 在创建我的教程时我犯了一个非常愚蠢的错误:我的web服务的“url”是,例如,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. 当重新执行我的项目时,我决定更改我的包的名称以与新url相对应:所以我的具有路径注释的类,比方说@PATH(“/ v1 / inventory”)已更改为com。 webservice.inventory。

When typing the new package name, I rushed and forgot to include the word rest in com.webservice. 在输入新的包名时,我匆匆忙忙地忘了在com.webservice中加入rest这个词。 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. 编写Web服务时,您必须记住确保包含路径注释的每个包的前缀是Web服务的URL。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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