Tomcat 7.0.34.0 でServlet 3.0 Applicationクラスを使用して RESTful Web アプリケーションを開発しようとしていますが、何も機能していないようです。以前のアプリでは、Jersey ServletContainer アプローチを使用し、すべての REST サービスを web.xml で宣言することに問題はありませんでした。
私の現在の Application サブクラス:
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;
}
}
および Web サービス:
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 が読み込まれることさえないようです。
興味深い点:この質問の提案に従って、 no で小さな web.xml を追加し、@ApplicationPath を削除しようとしました。その結果、NullPointerException が発生します。これは、Servlet 2.x 環境で予想される動作とまったく同じです (クラスが指定されていないため、ClassLoader がクラッシュします)。
私はここで途方に暮れています。私が間違っていることについて何か提案はありますか?
PS: 私は NetBeans 7.3.1 を使用しています。プロジェクトは [Java Web -> Web アプリケーション -> Java EE 6 Web] で、余分なライブラリやコンテキスト/依存関係の注入はありません。