47.4. Apache CXF エクステンションの使用

概要

Apache CXF では、標準の JAX-WS インジェクションメカニズムへのエクステンションを提供しており、開発者が一連のインジェクションアノテーションを単一のアノテーションで置き換えることができます。アノテーションを使用して抽出されたデータのフィールドを含む Bean に、単一のアノテーションが配置されます。たとえば、リソースメソッドに idtype、および size という 3 つのクエリーパラメーターが含まれることが想定される場合、単一の @QueryParam アノテーションを使用して、対応するフィールドを持つ Bean にすべてのパラメーターを注入できます。

注記

代わりに @BeanParam アノテーションの使用を検討してください (JAX-RS 2.0 以降で利用可能)。標準的な @BeanParam のアプローチはプロプライエタリー Apache CXF エクステンションよりも柔軟性が高いため、推奨される代替手段となります。詳細は、「Java Bean へのパラメーターの挿入」 を参照してください。

サポートされるインジェクションアノテーション

このエクステンションは、すべてのインジェクションパラメーターをサポートする訳ではありません。以下のみをサポートします。

  • @PathParam
  • @QueryParam
  • @MatrixParam
  • @FormParam

構文

アノテーションが Bean へのシリアルインジェクションを使用することを指定するには、以下の 2 点を実行する必要があります。

  1. アノテーションのパラメーターを空の文字列として指定します。たとえば、@PathParam("") は、URI テンプレート変数のシーケンスを Bean にシリアライズするように指定します。
  2. アノテーション付きのパラメーターが、挿入される値と一致するフィールドを含む Bean であることを確認します。

例47.7「クエリーパラメーターの Bean へのインジェクト」 は、多数のクエリーパラメーターを Bean に挿入する例を示しています。リソースメソッドでは、リクエスト URI に type および id の 2 つのクエリーパラメーターが含まれることが想定されています。これらの値は、Monster Bean の対応するフィールドに注入されます。

例47.7 クエリーパラメーターの Bean へのインジェクト

import javax.ws.rs.QueryParam;
import javax.ws.rs.PathParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
...

@Path("/monstersforhire/")
public class MonsterService
{
  ...
  @POST
  public void updateMonster(@QueryParam("") Monster bean)
  {
    ...
  }
  ...
}

public class Monster
{
  String type;
  String id;

  ...
}