27.9. REST リクエストの使用 - シンプルなバインディングスタイル


Camel 2.11 以降

Default のバインディングスタイルはかなり低レベルであり、ユーザーはルートに入ってくる MessageContentsList オブジェクトを手動で処理する必要があります。したがって、ルートロジックは、JAX-RS 操作のメソッドシグネチャーおよびパラメーターインデックスと密接に結合されますが、これはやや洗練されておらず、難しく、エラーが発生しやすくなります。

対照的に、SimpleConsumer バインディングスタイルは、キャメルメッセージ内で リクエストデータにアクセスしやすくする ために、次のマッピングを実行します。

  • JAX-RS パラメーター (@HeaderParam@QueryParam など) は、IN メッセージヘッダーとして挿入されます。ヘッダー名は、アノテーションの値と一致します。
  • リクエストエンティティー (POJO またはその他のタイプ) は、IN メッセージの本文になります。単一のエンティティーが JAX-RS メソッド署名で識別できない場合、元の MessageContentsList にフォールバックします。
  • バイナリー @Multipart ボディパーツは IN メッセージの添付になり、DataHandlerInputStreamDataSource、および CXF の Attachment クラスをサポートします。
  • 非バイナリー @Multipart ボディパーツは、IN メッセージヘッダーとしてマップされます。ヘッダー名はボディパーツ名と一致します。

さらに、次のルールが Response マッピング に適用されます。

  • メッセージボディーのタイプが javax.ws.rs.core.Response (ユーザー作成のレスポンス) と異なる場合、新しい Response が作成され、メッセージボディーがエンティティーとして設定されます (null でない限り)。レスポンスステータスコードは、Exchange.HTTP_RESPONSE_CODE ヘッダーから取得されるか、存在しない場合はデフォルトで 200 OK になります。
  • メッセージボディーのタイプが javax.ws.rs.core.Response と等しい場合、ユーザーがカスタムレスポンスを作成したことを意味し、それが尊重されて最終的なレスポンスになります。
  • いずれの場合も、カスタムまたはデフォルトの HeaderFilterStrategy によって許可された Camel ヘッダーが HTTP 応答に追加されます。

27.9.1. Simple Binding Style の有効化

このバインディングスタイルは、コンシューマーエンドポイントの bindingStyle パラメーターを値 SimpleConsumer に設定することで有効化できます。

  from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer")
    .to("log:TEST?showAll=true");

27.9.2. 異なるメソッドシグネチャーを使用したリクエストバインディングの例

以下は、Simple バインディングから期待される結果と一緒にメソッドシグネチャーのリストです。

  • public Response doAction(BusinessObject request);: リクエストペイロードは、元の MessageContentsList を置き換えて、IN メッセージボディーに配置されます。
  • public Response doAction(BusinessObject request, @HeaderParam("abcd") String abcd, @QueryParam("defg") String defg);: 元の MessageContentsList を置き換えて、IN メッセージボディーに配置されたリクエストペイロード。両方のリクエストパラメーターは、"abcd" および "defg" という名前の IN メッセージヘッダーとしてマップされます。
  • public Response doAction(@HeaderParam("abcd") String abcd, @QueryParam("defg") String defg);: 両方のリクエストパラメーターは、"abcd" および "defg" という名前の IN メッセージヘッダーとしてマップされます。元の MessageContentsList は、2 個のパラメーターしか含まれていませんが、保持されます。
  • public Response doAction(@Multipart(value="body1") BusinessObject request, @Multipart(value="body2") BusinessObject request2);: 最初のパラメーターは "body1" という名前のヘッダーとして転送され、2 番目のパラメーターはヘッダー "body2" としてマップされます。元の MessageContentsListIN メッセージボディーとして保持されます。
  • public Response doAction(InputStream abcd);: InputStreamMessageContentsList からアンラップされ、IN メッセージボディーとして保存されます。
  • public Response doAction(DataHandler abcd);: DataHandlerMessageContentsList からアンラップされ、IN メッセージボディーとして保存されます。

27.9.3. Simple Binding Style の例

このメソッドで JAX-RS リソースクラスを指定すると、次のようになります。

@POST @Path("/customers/{type}")
public Response newCustomer(Customer customer, @PathParam("type") String type, @QueryParam("active") @DefaultValue("true") boolean active) {
    return null;
}

以下のルートでサービスを提供します。

from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer")
    .recipientList(simple("direct:${header.operationName}"));

from("direct:newCustomer")
    .log("Request: type=${header.type}, active=${header.active}, customerData=${body}");

XML ペイロードを含む次の HTTP リクエスト (Customer DTO が JAXB アノテーション付きである場合):

POST /customers/gold?active=true

Payload:
<Customer>
  <fullName>Raul Kripalani</fullName>
  <country>Spain</country>
  <project>Apache Camel</project>
</Customer>

メッセージを出力します:

Request: type=gold, active=true, customerData=<Customer.toString() representation>
注記
リクエストの処理方法とレスポンスの書き込み方法に関するその他の例は、こちら を参照してください。
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

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

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

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

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

Legal Notice

Theme

© 2026 Red Hat
トップに戻る