JAX-RSアプリケーションと対応コンテナ
- 作者: Bill Burke,arton,菅野良二
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/08/23
- メディア: 大型本
- 購入: 28人 クリック: 804回
- この商品を含むブログ (41件) を見る
Java EE 6の場合、サーブレットコンテナはJAX-RS対応となり、web.xml内にApplicationクラスをサーブレットして宣言する記述を省略することが可能。Applicationクラスが存在しない場合、@Pathまたは@ProviderであのテートされたクラスがWARファイル内で検索される。
と書いてある。
しかし
@Path("/hello") public class HelloResource { @GET @Produces(MediaType.TEXT_PLAIN) public String sayHello() { return "hello this is jax-rs application."; } }
をそのままGlassFish v3サーバにデプロイしても404である。
試しに本の通り
public class JaxRsApplication extends Application{ public Set<Class<?>> getClasses(){ HashSet<Class<?>> set = new HashSet<Class<?>>(); set.add(HelloResource.class); return set; } }
Applicationクラスをつくり
<servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet-class>jaxrs.JaxRsApplication</servlet-class> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
web.xmlに登録。
すると今度は500に変わった。エラーが。
javax.servlet.ServletException: PWC1403: Class jaxrs.JaxRsApplication is not a Servlet
ちなみにJAX-RS実装たちは
Project Facets > JAX-RS(REST Web Services)1.1
をチェックすることでJAX-RS GlassFish Libraryを使用している。
GlassFish v3ってJAX-RS対応コンテナのはずだよなー。なんか足りない?
最終手段。
JAX-RS非対応コンテナ用にweb.xmlの記述を書いてみる。
<servlet> <servlet-name> Jersey REST Service </servlet-name> <servlet-class> com.sun.jersey.spi.container.servlet.ServletContainer </servlet-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <param-value>jaxrs.JaxRsApplication</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
いけた。
・・・うーんと。非対応ナンデスカ?
開発環境は結局
Eclipse3.5Eclipse3.6+GlassFish v3(Java EE 6対応)
それとも何かまだ設定が足りないのかな。。