0

我正在尝试使用 Tomcat 7.0.34.0 上的 Servlet 3.0 Application类开发 RESTful webapp,但似乎没有任何效果。我以前使用 Jersey ServletContainer 方法并在 web.xml 中声明所有 REST 服务的应用程序没有问题。

我当前的应用程序子类:

package aaa;

@ApplicationPath("/test")
public class ApplicationConfig extends Application
{
    @Override
    public Set<Class<?>> getClasses ()
    {
        Set<Class<?>> resources = new java.util.HashSet<Class<?>> ();
        resources.add (aaa.TestResource.class);
        return resources;
    }
}

和网络服务:

package aaa;

@Path("test")
public class TestResource
{
    public TestResource () {}

    @GET
    @Produces("text/html")
    public String getXml ()
    {
        return "TEST SUCCESS";
    }
}

当我尝试部署应用程序时,Tomcat 告诉我上下文已重新加载:

INFO: Reloading Context with name [/WebApplication1] has started
Nov 10, 2013 7:06:25 PM org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/WebApplication1] is completed

Web 应用程序本身已部署(我可以访问其 JSP 页面) - 但是,“测试”资源仍然不可用。我已经尝试了所有可能的 URL,但只得到 404 响应。似乎 ApplicationConfig 甚至从未加载过。

兴趣点:按照this question中的建议,我尝试添加一个不带no的小web.xml并删除@ApplicationPath。结果是 NullPointerException,这正是我在 Servlet 2.x 环境中所期望的行为(未指定类,因此 ClassLoader 崩溃)。

我在这里不知所措。关于我做错了什么有什么建议吗?

PS:我使用的是 NetBeans 7.3.1,项目是 [Java Web -> Web Application -> Java EE 6 Web],没有额外的库,也没有上下文/依赖注入。

4

1 回答 1

1

您的test资源是在TestResource类中定义的,而被覆盖的getClasses方法只返回一个集合SimpletestResource.class。虽然不知道SimpletestResource长什么样子,但是AFAIK@Path不是遗传的。所以,我认为你应该把TestResource.class那一套。

使用 NetBeans 7.4 在 Tomcat 7.0.27 上进行了尝试和测试。添加了库:JAX-RS 2.0 和 Jersey 2.0。

于 2013-11-10T20:13:46.870 回答