1. ホーム
  2. java

[解決済み] アノテーションのみ(web.xmlなし)を使用してJAX-RSアプリケーションをセットアップする方法は?

2023-07-19 02:42:55

質問

アノテーションだけでJAX-RSアプリケーションを構築することは可能でしょうか?(サーブレット3.0とJAX-RSジャージー1.1.0を使用しています)。

私は試してみましたが、うまくいきませんでした。いくつかの web.xml が必要なようです。


設定A (動作しているが、web.xmlの設定がある)

web.xml

   ...
   <servlet>
      <servlet-name>org.foo.rest.MyApplication</servlet-name>
   </servlet>
   <servlet-mapping>
       <servlet-name>org.foo.rest.MyApplication</servlet-name>
       <url-pattern>/*</url-pattern>
   </servlet-mapping>
   ...

Java

@ApplicationPath("/")
public class MyApplication extends Application {
    ...
}


設定B (動作せず、例外が発生)

@ApplicationPath("/")
@WebServlet("/*") // <-- 
public class MyApplication extends Application {
    ...
}

後者は、ApplicationがServletのサブクラスであることを主張しているようです(例外は推測の域を出ません)。

java.lang.ClassCastException: org.foo.rest.MyApplication cannot be cast to javax.servlet.Servlet


質問

  1. web.xmlの定義はうまくいったのに、アノテーションはうまくいかなかったのはなぜですか?何が違うのでしょうか?

  2. web.xmlがないJAX-RSアプリケーションを持つなど、うまくいく方法はありますか?

どのように解決するのですか?

必要なのはこれだけだったようです(Servlet 3.0以上)。

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/*")
public class MyApplication extends Application {
    ...
}

また、web.xmlの設定は不要だったようです(Tomcat 7で試しました)。