2012-11-08 22 views
13

当我尝试击中使用Jersey和Maven在Apache Tomcat上实现的HelloWorld RESTful Web服务时,出现以下异常。com.sun.jersey.api.container.ContainerException:ResourceConfig实例不包含任何根资源类

URL: http://localhost:8080/TestRest/rest/hello/abcd 

com.sun.jersey.api.container.ContainerException:ResourceConfig实例不包含任何根资源类。

我查看了互联网上的各种资源,他们说由于没有在web.xml中给出的包结构中的类而发生异常,但我确信它们都是正确的。

任何有关这方面的帮助,非常感谢。

下面是pom.xml的

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
     <modelVersion>4.0.0</modelVersion> 
     <groupId>my.test.rest</groupId> 
     <artifactId>TestRest</artifactId> 
     <packaging>war</packaging> 
     <version>0.0.1-SNAPSHOT</version> 
     <name>TestRest Maven Webapp</name> 
     <url>http://maven.apache.org</url> 
     <repositories> 
       <repository> 
       <id>maven2-repository.java.net</id> 
       <name>Java.net Repository for Maven</name> 
       <url>http://download.java.net/maven/2/</url> 
       <layout>default</layout> 
     </repository> 
    </repositories> 
    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
      <groupId>com.sun.jersey</groupId> 
      <artifactId>jersey-server</artifactId> 
      <version>1.8</version> 
    </dependency> 
    </dependencies> 
    <build> 
    <finalName>TestRest</finalName> 
    </build> 
</project> 

的代码 - 这是简单的HelloWorldService。

package com.rest; 

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 HelloWorldService { 

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

     String output = "Hello, " + msg; 

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

    } 

} 

最后,在web.xml

<web-app id="WebApp_ID" version="2.4" 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <display-name>Restful Web Application</display-name> 

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

    <servlet-mapping> 
     <servlet-name>HelloServlet</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

我希望我的目录结构是正确的也是如此,请纠正我,如果事实并非如此。

Directory Structure

回答

16

你有HelloWorldService.java在错误的源文件夹。它必须位于src/main/resources中的src/main/java 而不是。这是一个很大的区别!

这意味着你的Java代码没有被编译,这就是为什么你会得到错误。没有可以处理请求的类。请参阅Maven Standard Directory Layout

+1

感谢您指出我的错误...真的很感激! –

8

是的,它是Eclipse Indigo中的一个问题,同时使用Maven在Java中开发RESTful Web服务,因为它不会创建正确的目录结构。因此,删除给定的源代码目录并将@maba作为src/main/java添加为正确的解决方法是正确的。 你可以参考本作详细的解释上使用Maven开发使用Java在Eclipse靛蓝RESTful Web服务...

http://kausalmalladi.blogspot.in/2012/11/developing-restful-java-web-service-in.html

相关问题