Jersey REST ResourceConfig 实例不包含任何根资源类
虽然这是一个古老的问题,但我仍然找不到解决这个问题的答案.如果您发现我的任何陈述不正确,请更正.
Although this is one ancient question, I still can not find the answer to make this work. Please correct if you find any of my statement is not correct.
我有一个 Java Face 应用程序,并将 REST 用于 Web 服务.我不认为 Face 与我的问题有任何关系.web.xml 是:
I have a Java Face app and use REST for the Web Services. I don't think Face has anything to do with my problem at all. The web.xml is:
<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 应用程序.
I have quite a few more servlets in the web.xml since is is a Face app with Trinidad, etc.
在com.bi.nd.webservice包中,我的资源类是:
In the package com.bi.nd.webservice, my resource class is:
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 文件中出现了这个错误:
The fact that my class has a @GET is enough to identify itself a resource class.
Let alone all other complexities, I compiled my source code with Ant in Eclipse and I got this error in the catalina.out file:
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 复制到应用程序 WEB-INF/lib 中.我这样做了,但它仍然没有用.我发现这个建议有点奇怪,因为 WEB-INF/lib 是 Eclipse 将从构建路径安装所有依赖库的地方.这不是我们手动放置库的地方.
Some suggested that copy the asm.jar, jsr-api.jar, jersey-server.jar and jersey-core.jar into the app WEB-INF/lib. I did that and it still did not work. I found the suggestion was a bit odd since WEB-INF/lib is a place where Eclipse will install all dependency libraries from the build path. It is not a place where we manually put libraries.
有人解释说这个错误与 Java 插件和 Jersey 的编写方式有关.但那是几年前的事了.
Some explained that this error had something to do with Java plug-in and the way Jersey was written. But that was years ago.
谁能向我解释为什么我一直有这个问题?
Can some one explains to me why I keep having this problem?
跟进:尽管来自 REST 网站,但定义为 Root 资源类的资源类是 POJO(普通旧 Java 对象),它们要么用 @Path 注释,要么至少有一个用 @Path 注释的方法或请求方法指示符,例如 @GET、@PUT、@POST 或@DELETE.资源方法是使用请求方法指示符注释的资源类的方法.本节介绍如何使用 Jersey 对 Java 对象进行注解以创建 RESTful Web 服务.
Followup: Although from REST web site, resource class defined as Root resource classes are POJOs (Plain Old Java Objects) that are either annotated with@Path or have at least one method annotated with @Path or a request method designator such as @GET, @PUT, @POST, or @DELETE. Resource methods are methods of a resource class annotated with a request method designator. This section describes how to use Jersey to annotate Java objects to create RESTful web services.
我必须在我的类中添加@Path("/hello"),突然Jersey 可以找到我的资源类
I have to add @Path("/hello") to my class, and suddenly Jersey can find my resource class
现在 catalina.out 文件看起来像:
Now the catalina.out file looks like:
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 类 NOT FOUND 是一条重要消息吗?
But the problem is far from over. I try to access the URL http://localhost:8080/nd/hello
and I still get the 404 NOT FOUND. Is the Provider class NOT FOUND an important message?
推荐答案
我有同样的错误信息,并通过修改我的 web.xml 文件解决了它.确保里面有这个:
I had the same error message and solved it by modifying my web.xml file. Make sure it has this in it:
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>your.package.name.here</param-value>
</init-param>
相关文章