私は JAX-RS をいじっていて、JSON を生成する REST サービスを呼び出すアプリケーションを作成しました。Jersey を試してみたところ、すべて問題なく動作しましたが、アプリケーションを JDK5 でビルドする必要があるため、RESTEasy に切り替える必要がありました。web.xml を次のように変更しました。
<web-app>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>
<servlet>
<servlet-name>RESTEasy</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RESTEasy</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<!-- ... -->
</web-app>
したがって、/rest で始まるすべての URL が RESTEasy によって処理されることを期待しています。私のサービスは次のとおりです。
@Path("/services")
public class MyRESTServices {
@GET
@Path("service1")
@Produces(MediaType.APPLICATION_JSON)
public Object service1(Blah blah) {
}
}
これは Jersey を使用して正常に機能し、http://localhost/MyContext/rest/services/service1が私の service1() メソッドにバインドされました。ただし、RESTEasy に変更すると、404 が発生しました。
HTTP ステータス 404 - フル パスの相対 : /rest/services/service1 のリソースが見つかりませんでした: http://localhost/MyContext/rest/services/service1
つまり、RESTEasy はリクエストを処理しましたが、この URL にバインドされたサービスを見つけることができませんでした。
私のクラスでは、うまく@Path("/services")
いき@Path("/rest/services")
ました。なぜ私がこの奇妙な行動をとったのか分かりますか? 私が読んだすべてのチュートリアル/ドキュメントには、/rest プレフィックスを含まない相対パスのみが記載されていました...