23.4. RESTEasy を使用した RESTful HTTP Web サービス


Seam は JAX-RS 仕様 (JSR 311) の RESTEasy 実装を統合します。ご使用の Seam アプリケーションに統合する機能を以下から決定することができます。
  • RESTEasy ブートストラップと設定、リソースの自動削除、およびプロバイダ
  • SeamResourceServlet による HTTP/REST 要求、web.xml での外部のサーブレットおよび設定の必要性はなし
  • Seam コンポーネントとしてのリソースの記述、Seam の完全なライフサイクルの管理とバイジェクション

23.4.1. RESTEasy 設定と要求

まず、RESTEasy ライブラリと jaxrs-api.jar をダウンロードします。それらを統合ライブラリ (jboss-seam-resteasy.jar) やご使用のアプリケーションに必要な他のライブラリとともにデプロイします。
seam-gen ベースのプロジェクトでは、これは、jaxrs-api.jarresteasy-jaxrs.jar、および jboss-seam-resteasy.jardeployed-jars.list (war デプロイメント) または deployed-jars-ear.list (ear デプロイメント) ファイルに追加することによって行えます。JBDS ベースのプロジェクトの場合は、上記のライブラリを EarContent/lib (ear デプロイメント) または WebContent/WEB-INF/lib (war デプロイメント) フォルダにコピーし、IDE でプロジェクトをリロードします。
@javax.ws.rs.Path でアノテーション付与されたすべてのクラスは、起動時に自動的に発見され HTTP リソースとして登録されます。Seam は 組み込みSeamResourceServlet を使って自動的に HTTP 要求を受け入れ、提供します。リソースの URI は以下のように構築されます。
  • URI は例として /seam/resourceSeamResourceServletweb.xml でマップされたパターンで始まります。この設定を変更して、異なるベースでご使用の RESTful リソースを公開します。これは グローバルな 変更で、他の Seam リソース (s:graphicImage) もこのベースパスで提供されます。
  • Seam の RESTEasy 統合ではベースパスに設定可能な文字列を追加します (デフォルトは /rest)。このため、サンプルではリソースの完全なベースパスは /seam/resource/rest となるでしょう。今後の REST API のアップグレードに備えてバージョン番号を追加するなど、ご使用のアプリケーションのこの文字列をさらに記述的なものに変更することをお薦めします。これにより旧のクライアントは旧の URI ベースを維持することができます。
  • 最後に、リソースは定義された @Path で使用可能です。たとえば、@Path("/customer") でマップされたリソースは、/seam/resource/rest/customer で使用可能となります。
次のリソースの定義は、URI http://your.hostname/seam/resource/rest/customer/123 を使用した GET 要求に対するプレーンテキスト表現を返します。
@Path("/customer")
public class MyCustomerResource {

    @GET
    @Path("/{customerId}")
    @Produces("text/plain")
    public String getCustomer(@PathParam("customerId") int id) {
         return ...;
    }

}
Copy to Clipboard Toggle word wrap
これらのデフォルトで望ましい場合は、追加で設定する必要はありません。ただし、必要ならばご使用の Seam アプリケーションで RESTEasy を設定することが可能です。まず、resteasy 名前空間を XML 設定ファイルのヘッダーにインポートします。
<components
   xmlns="http://jboss.com/products/seam/components"
   xmlns:resteasy="http://jboss.com/products/seam/resteasy"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation=
     "http://jboss.com/products/seam/resteasy
      http://jboss.com/products/seam/resteasy-2.2.xsd
      http://jboss.com/products/seam/components
      http://jboss.com/products/seam/components-2.2.xsd">
Copy to Clipboard Toggle word wrap
<resteasy:application resource-path-prefix="/restv1"/>
Copy to Clipboard Toggle word wrap
リソースへの完全なベースパスは /seam/resource/restv1/{resource} です。@Path の定義とマッピングは変わらない点に注意してください。これはアプリケーション全体に及ぶスイッチであり、通常は HTTP API のバージョニングに使用されます。
リソースに完全なパスをマップしたい場合は、ベースパスのストリッピングを無効にできます。
<resteasy:application strip-seam-resource-path="false"/>
Copy to Clipboard Toggle word wrap
ここでリソースのパスが @Path("/seam/resource/rest/customer") にマップされました。この機能を無効にすることで、リソースクラスのマッピングを特定のデプロイメントシナリオにバインドします。これは 推奨されません
Seam はクラスパスをすべてのデプロイされた @javax.ws.rs.Path リソースまたは @javax.ws.rs.ext.Provider クラスにスキャンします。以下のようにスキャンを無効にして、これらのクラスを手動で設定することが可能です。
<resteasy:application
     scan-providers="false"
     scan-resources="false"
     use-builtin-providers="true">

  <resteasy:resource-class-names>
    <value>org.foo.MyCustomerResource</value>
    <value>org.foo.MyOrderResource</value>
         <value>org.foo.MyStatelessEJBImplementation</value>
  </resteasy:resource-class-names>

  <resteasy:provider-class-names> 
    <value>org.foo.MyFancyProvider</value> 
  </resteasy:provider-class-names> 

 </resteasy:application>
Copy to Clipboard Toggle word wrap
use-built-in-providers のスイッチは RESTEasy 組み込みプロバイダを有効 (デフォルト) または無効にします。これらはプレーンテキスト、JSON および JAXB マーシャリングを提供するため、有効にしておくことが推奨されます。
RESTEasy はリソースとして純粋な EJB (Seam コンポーネントでない EJB) に対応します。web.xml で移植可能でない方法で JNDI の名前を設定する代わりに (RESTEasy のドキュメントを参照)、上記に示したとおり components.xml でビジネスインターフェースではなく、単純に EJB 実装クラスを一覧にすることができます。EJB の @Local インターフェースに Bean 実装クラスではなく @Path@GET などでアノテーションを付与する必要がある点に注意してください。これによりご使用のアプリケーションをグローバルな Seam jndi-pattern のスイッチをオン <core:init/> にした状態で、デプロイメントで移植可能に保つことができます。純粋な (Seam コンポーネントでない) EJB リソースはリソースのスキャンが有効であっても見つからず、常に手動で一覧化する必要がある点に注意してください。繰り返しになりますが、このパラグラフ全体は Seam コンポーネントでなく、かつ @Name アノテーションを持っていない EJB リソースに関連しているだけです。
最後に、メディアタイプと言語 URI 拡張子を設定できます。
<resteasy:application>

    <resteasy:media-type-mappings>
      <key>txt</key>
      <value>text/plain</value>
    </resteasy:media-type-mappings>

    <resteasy:language-mappings>
       <key>deutsch</key><value>de-DE</value>
    </resteasy:language-mappings>

</resteasy:application>
Copy to Clipboard Toggle word wrap
この定義は .txt.deutsch の URI サフィックスを追加の AcceptAccept-Language ヘッダーの値、text/plainde-DE にマップします。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat