java – Jersey REST ResourceConfig实例不包含任何根资源类

参见英文答案 > The ResourceConfig instance does not contain any root resource classes                                    25个
虽然这是一个古老的问题,但我仍然找不到能够做到这一点的答案.
如果您发现我的任何陈述不正确,请更正.

我有一个Java Face应用程序并使用REST作为Web服务.我不认为Face与我的问题有任何关系.
web.xml是:

<servlet>
    <servlet-name>NDREST</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.bi.nd.webservice</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>NDREST</servlet-name>
    <url-pattern>/nd/*</url-pattern>
</servlet-mapping>

我在web.xml中有更多的servlet,因为它是一个与Trinidad等的Face应用程序.

在com.bi.nd.webservice包中,我的资源类是:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Produces(MediaType.APPLICATION_XML)
@Path("/hello")
public class TransactionResource 
{
public TransactionResource() 
{
}

@GET
@Produces(MediaType.TEXT_PLAIN)
public String itWorks()
{
    return "Get is OK";
}
}

我的类有一个@GET的事实足以将自己标识为资源类.
更别说所有其他复杂性了,我在Eclipse中用Ant编译了我的源代码,我在catalina.out文件中遇到了这个错误:

May 24, 2011 8:48:46 AM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
     com.bi.nd.webservice
May 24, 2011 8:48:46 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.7 05/20/2011 11:04 AM'
May 24, 2011 8:48:46 AM com.sun.jersey.server.impl.application.RootResourceUriRules <init>
SEVERE: The ResourceConfig instance does not contain any root resource classes.

有人建议将asm.jar,jsr-api.jar,jersey-server.jar和jersey-core.jar复制到app WEB-INF / lib中.我这样做了,但仍然无效.
我发现这个建议有点奇怪,因为WEB-INF / lib是Eclipse将从构建路径安装所有依赖库的地方.它不是我们手动放置库的地方.

有人解释说这个错误与Java插件和Jersey编写方式有关.但那是几年前的事了.

有人可以向我解释为什么我一直有这个问题吗?

跟进:
虽然从REST Web站点,定义为Root资源类的资源类是POJO(普通旧Java对象),它们使用@Path注释或者至少有一个使用@Path注释的方法或者请求方法指示符,例如@GET,@ PUT ,@ POST或@DELETE.资源方法是使用请求方法指示符注释的资源类的方法.本节介绍如何使用Jersey注释Java对象以创建RESTful Web服务.

我必须将@Path(“/ hello”)添加到我的类中,突然Jersey可以找到我的资源类

现在catalina.out文件看起来像:

May 24, 2011 3:13:02 PM com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
com.bi.nd.webservice
May 24, 2011 3:13:02 PM com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
class com.bi.nd.webservice.TransactionResource
May 24, 2011 3:13:02 PM com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
May 24, 2011 3:13:02 PM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.7 05/20/2011 11:04 AM'

但问题远未结束.我尝试访问URL http:// localhost:8080 / nd / hello,我仍然得到404 NOT FOUND. Provider类找不到重要的消息吗?

解决方法:

我有相同的错误消息,并通过修改我的web.xml文件解决它.确保它有这个:

<init-param>
   <param-name>com.sun.jersey.config.property.packages</param-name>
   <param-value>your.package.name.here</param-value>
</init-param>
上一篇:java – 没有想法原因:ResourceConfig实例不包含任何根资源类


下一篇:java – @FormDataParam和@FormParam之间有什么区别