4.4. REST DSL の設定

Java DSL を使用した設定

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

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

XML DSL を使用した設定

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 などのコンポーネントで使用することができます。これらのコンポーネントは、curl の設定を使用してアプリケーションをデプロイします。

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 に対応しています。