4.4. REST DSL の設定


Java を使用した設定

Java では、restConfiguration() builder API を使用して REST DSL を設定することができます。たとえば、以下は Servlet コンポーネントをベースの実装として使用するように REST DSL を設定する場合になります。

restConfiguration().component("servlet").bindingMode("json").port("8181")
    .contextPath("/camel-example-servlet-rest-blueprint/rest");

XML を使用した設定

XML では、restConfiguration 要素を使用して REST DSL を設定できます。たとえば、以下は Servlet コンポーネントをベースの実装として使用するように REST DSL を設定する場合になります。

<?xml version="1.0" encoding="UTF-8"?>
<blueprint ...>
  ...
  <camelContext xmlns="http://camel.apache.org/schema/blueprint">
    ...
    <restConfiguration component="servlet"
                       bindingMode="json"
                       contextPath="/camel-example-servlet-rest-blueprint/rest"
                       port="8181">
      <dataFormatProperty key="prettyPrint" value="true"/>
    </restConfiguration>
    ...
  </camelContext>

</blueprint>

設定オプション

表4.3「REST DSL の設定オプション」 は、restConfiguration() ビルダー (Java DSL) または restConfiguration 要素 (XML DSL) を使用して、REST DSL を設定するオプションを示しています。

表4.3 REST DSL の設定オプション
Java DSLXML DSL説明

component()

@component

REST トランスポートとして使用する Camel コンポーネントを指定します (例: servletrestletspark-rest など)。この値は、標準コンポーネント名またはカスタムインスタンスの Bean ID のいずれかになります。このオプションが指定されていない場合、Camel はクラスパス上または Bean レジストリーで RestConsumerFactory のインスタンスを探します。

scheme()

@scheme

REST サービスの公開に使用するプロトコル。ベースとなる REST の実装に依存しますが、通常は httphttps はサポートされます。デフォルトは http です。

host()

@host

REST サービスの公開に使用するホスト名。

port()

@port

REST サービスの公開に使用するポート番号。

注意: この設定は Servlet コンポーネントによって無視され、代わりにコンテナーの標準 HTTP ポートが使用されます。Apache Karaf OSGi コンテナーの場合、標準の HTTP ポートは通常 8181 になります。JMX などのツールのためにポート値を明記するとよいでしょう。

contextPath()

@contextPath

REST サービスのリーディングコンテキストパスを指定します。これは Servlet などのコンポーネントで使用することができます。これらのコンポーネントは、context-path の設定を使用してアプリケーションをデプロイします。

hostNameResolver()

@hostNameResolver

ホスト名が明示的に設定されていない場合、このリゾルバーによって REST サービスのホストが決定されます。使用できる値は、ホスト名の形式に解決される RestHostNameResolver.localHostName (Java DSL) または localHostName (XML DSL)、およびドットの 10 進数の IP アドレス形式に解決される RestHostNameResolver.localIp (Java DSL) または localIp (XML DSL) になります。Camel 2.17 以降では、RestHostNameResolver.allLocalIp を使用して、すべてのローカル IP アドレスに解決することができます。

Camel 2.16 までのデフォルトは localHostName です。Camel 2.17 以降のデフォルトは allLocalIp です。

bindingMode()

@bindingMode

JSON または XML 形式のメッセージのバインディングモードを有効にします。使用できる値は offautojsonxml、または json_xml です。デフォルトは off です。

skipBindingOnErrorCode()

@skipBindingOnErrorCode

HTTP エラーがある場合、出力のバインディングをスキップするかどうかを指定します。これにより、JSON や XML にバインドせず、カスタムエラーメッセージを作成することができます。デフォルトは true です。

enableCORS()

@enableCORS

true の場合、HTTP レスポンスで CORS (オリジン間リソース共有) ヘッダーを有効にします。デフォルトは false です。

jsonDataFormat()

@jsonDataFormat

Camel が JSON データフォーマットを変換するために使用するコンポーネントを指定します。使用できる値は、json-jacksonjson-gsonjson-xstream です。デフォルトは json-jackson です。

xmlDataFormat()

@xmlDataFormat

Camel が XML データフォーマットを変換するために使用するコンポーネントを指定します。使用できる値は jaxb です。デフォルトは jaxb です。

componentProperty()

componentProperty

ベースにある REST 実装に対し、コンポーネントレベル の任意のプロパティーを設定できるようにします。

endpointProperty()

endpointProperty

ベースにある REST 実装に対し、エンドポイントレベル の任意のプロパティーを設定できるようにします。

consumerProperty()

consumerProperty

ベースにある REST 実装に対し、コンシューマーエンドポイント の任意のプロパティーを設定できます。

dataFormatProperty()

dataFormatProperty

ベースにあるデータフォーマットコンポーネント (Jackson や JAXB など) に対し、任意のプロパティーを設定できます。Camel 2.14.1 以降では、以下の接頭辞をプロパティーキーに割り当てることができます。

  • json.in
  • json.out
  • xml.in
  • xml.out

これによって、プロパティー設定を特定の形式 (JSON または XML) および特定のメッセージ方向 (IN または OUT) だけに適用することができます。

corsHeaderProperty()

corsHeaders

カスタム CORS ヘッダをキー/値のペアで指定できるようにします。

デフォルトの CORS ヘッダー

CORS (オリジン間リソース共有) を有効にすると、デフォルトで以下のヘッダーが設定されます。corsHeaderProperty DSL コマンドを呼び出すことで、デフォルト設定を任意で上書きできます。

表4.4 デフォルトの CORS ヘッダー
ヘッダーのキーヘッダーの値

Access-Control-Allow-Origin

\*

Access-Control-Allow-Methods

GETHEADPOSTPUTDELETETRACEOPTIONSCONNECTPATCH

Access-Control-Allow-Headers

OriginAcceptX-Requested-WithContent-TypeAccess-Control-Request-MethodAccess-Control-Request-Headers

Access-Control-Max-Age

3600

Jackson JSON 機能の有効化または無効化

dataFormatProperty オプションに以下のキーを設定すると、特定の Jackson JSON 機能を有効または無効にできます。

  • json.in.disableFeatures
  • json.in.enableFeatures

たとえば、Jackson の FAIL_ON_UNKNOWN_PROPERTIES 機能を無効にする場合は、以下のとおりです (JSON 入力に Java オブジェクトにマップできないプロパティーがある場合に Jackson は失敗します)。

restConfiguration().component("jetty")
    .host("localhost").port(getPort())
    .bindingMode(RestBindingMode.json)
    .dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES");

コンマ区切りにすると、複数 の機能を無効にできます。以下に例を示します。

.dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES,ADJUST_DATES_TO_CONTEXT_TIME_ZONE");

以下の例は、Java DSL で Jackson JSON 機能を有効および無効する方法を示しています。

restConfiguration().component("jetty")
    .host("localhost").port(getPort())
    .bindingMode(RestBindingMode.json)
    .dataFormatProperty("json.in.disableFeatures", "FAIL_ON_UNKNOWN_PROPERTIES,ADJUST_DATES_TO_CONTEXT_TIME_ZONE")
    .dataFormatProperty("json.in.enableFeatures", "FAIL_ON_NUMBERS_FOR_ENUMS,USE_BIG_DECIMAL_FOR_FLOATS");

以下の例は、XML DSL で Jackson JSON 機能を有効および無効する方法を示しています。

<restConfiguration component="jetty" host="localhost" port="9090" bindingMode="json">
  <dataFormatProperty key="json.in.disableFeatures" value="FAIL_ON_UNKNOWN_PROPERTIES,ADJUST_DATES_TO_CONTEXT_TIME_ZONE"/>
  <dataFormatProperty key="json.in.enableFeatures" value="FAIL_ON_NUMBERS_FOR_ENUMS,USE_BIG_DECIMAL_FOR_FLOATS"/>
</restConfiguration>

有効化または無効化できる Jackson 機能は、以下の Jackson クラスの enum ID に対応しています。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.