将Jersey资源部署到Servlet 3.0 API感知容器中失败了

时间:2011-10-13 07:36:19

标签: java jetty jersey jax-rs servlet-3.0

(我不小心删除了我在这个问题中提到的要点;抱歉给您带来不便。)

问题

我正在尝试使用Servlet 3.0 API@Path之后部署Jersey根资源(使用Jersey's user guide注释注释的资源)。

我创建了一个包含两个类的gist at GitHubFoo.java,它是Application的子类,通过其{{3}公开Bar.java(资源类) } 方法。 (也有一个getClasses(),所以任何人都可以轻易地为自己尝试这个。)

但是,当我尝试将打包的war部署到Jetty 8.0.x实例时,我得到了pom.xml

调用

Foo.java,调用其getClasses()方法,而永远不会调用Bar.java

我可以通过http://localhost:8080/访问Jetty的欢迎页面,但我无法访问http://localhost:8080/foohttp://localhost:8080/foo/bar。后两者导致以下错误:

  

未找到错误

     

自定义404页面

可能是什么问题?我在这里做错了吗?

答案

鉴于我使用的WAR(test-0.0.1-SNAPSHOT.war),我的应用程序路径变为http://localhost:8080/test-0.0.1-SNAPSHOT/foo/bar而不是http://localhost:8080/foo/bar。看看我在那里做了什么?好。在你的脑海中刻上这个或者你的生命中会损失3到5小时!

3 个答案:

答案 0 :(得分:1)

行。我已经解决了这个问题。

我的应用程序的路径不在http://localhost:8080/foo/bar,而在http://localhost:8080/<the name of my war file>foo/bar。因此,我发布的pom.xml已成为http://localhost:8080/test-0.0.1-SNAPSHOT/foo/bar

我讨厌WAR文件。

答案 1 :(得分:0)

您使用 @Path 进行了一次通话,而另一次使用 @ApplicationPath 进行了调用,方法中没有@Path。

尽可能here

  

JAX-RS API(来自版本1.1.4)引入了一个特定的注释(@ javax.ws.rs.ApplicationPath),它提供了web.xml配置的替代方法:

但是你需要在被调用的方法上至少有一个@Path。但是,最简单的事情可能是从经典的旧web.xml开始,然后在Resources上使用@Path。你会在网上得到很多例子,而@ApplicationPath并不常见。

答案 2 :(得分:0)

虽然这不是你的问题,如果你试图在Cargo的Jetty 8中部署,你可能会遇到这个错误:http://jira.codehaus.org/browse/CARGO-1133