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

标签 java jersey jax-rs

虽然这是一个古老的问题,但我仍然找不到解决这个问题的答案。 如果您发现我的任何陈述不正确,请更正。

我有一个 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 复制到应用程序 WEB-INF/lib 中。我这样做了,但它仍然没有用。 我发现这个建议有点奇怪,因为 WEB-INF/lib 是 Eclipse 将从构建路径安装所有依赖库的地方。这不是我们手动放置库的地方。

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

谁能向我解释为什么我一直有这个问题?

跟进: 尽管来自 REST 网站,但定义为 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 类 NOT FOUND 是一条重要消息吗?

最佳答案

我有同样的错误信息,并通过修改我的 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 - Jersey REST ResourceConfig 实例不包含任何根资源类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6111074/

相关文章:

java - 使用 Spring roo 在 GWT 中进行菜单导航

java - BeanUtils : Different property names

java - 泽西编码成员名单问题

java - 如何在 OSGi 上使用 Jersey 解析 jersey.internal.RuntimeDelegateImpl

java - JEE 无法运行 JAX-RS WebService 框架应用程序

java - 在asm中什么时候会调用ClassVisitor的visitMethod?

java - IntelliJ Java插件自动创建代码

Scala 类型(推理)问题?

java - 不用 Maven 构建动态 Web 项目

java - 为什么我的Ajax调用刷新页面? (即再次调用servlet)