---
schema_version: "1"
id: e119f580daba27b763c3ba334f1bec119675ef59152a3a11b894418a05833f55
title: Mule SDK を使用したルーターの作成
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/mule-sdk/1.1/routers.md
canonical_url: https://docs.mulesoft.com/jp/mule-sdk/1.1/routers
source_site: docs.mulesoft.com
content_type: documentation
content_hash: 3d247aeb4334b2f59c642870abfe995a398fe600257570a1a6cfcd66083cb4d5
description: MuleSoft Documentation Site
release: "1.1"
latest: false
---
# Mule SDK を使用したルーターの作成

概念上、ルーターは多くの実行可能なルートと一連のパラメーター (1 つルートまたはすべてのルートの実行を処理するパラメーター、あるいはどのルートの実行も処理しないパラメーター) を受け取ることができる​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​です。

複数の実行パスの候補を受け取る場合、ルートを使用する必要があります。ルートのパラメーターを使用すると、含まれているプロセッサーを実行する必要があるかどうかを判断できます。ステレオタイプは、含まれているチェーンのステレオタイプを定義するためにルートの宣言で使用できます。要素の DSL コンテンツには、パラメーター化された​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​が含まれないため、ルートでは複雑なパラメーターをインラインで定義できません。

## [](#ルートの定義)ルートの定義

まず、​`Route`​ 基本クラスを拡張して、モジュールで 1 つ以上のルートを宣言する必要があります。

```java
public class WhenRoute extends Route {

  @Parameter
  @Optional
  private boolean shouldExecute;

  public boolean shouldExecute() {
    return shouldExecute;
  }

}
```

## [](#ルーターの宣言)ルーターの宣言

次に、いずれかのモジュールの​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​として、ルーターメソッドを宣言します。​`RouterCompletionCallback`​ と共に 1 つ以上の ​`Route`​ 実装を受け取る操作は、ルーターとして登録されます。

```java
@Extension(name = "Docs")
@Operations(ChoiceRouter.class)
public class DocsModule {

}
```

`ChoiceRouter`​ クラスは、次のメソッドを定義します。

```java
public void choice(WhenRoute when,
                   @Optional OtherwiseRoute otherwise,
                   RouterCompletionCallback callback) {

  if (when.shouldExecute()) {
    when.getChain().process(callback::success, (error, previous) -> callback.error(error));

  } else if (otherwise != null && otherwise.shouldExecute()) {
    otherwise.getChain().process(callback::success, (e, r) -> callback.error(e));

  } else {
    callback.success(Result.builder().build());
  }
}
```

上記では、ルーターの宣言方法と、設定に基づいてどのようにルートが実行されるのかがわかります。ルートの実行は、各ルート自体がスコープであるかのようにチェーンを介して行われます。

ルーターを使用するには、ルーターパラメーターを設定して、その独自のパラメーターで各ルート宣言を追加します。

```xml
<flow name="logDecoratorSampleFlow">
    <docs:choice>
      <docs:when shouldExecute="#[payload != null]">
        <http:request config-ref="config" path="/" method="GET"/>
      </docs:when>
      <docs:otherwise>
        <logger message="Payload was null"/>
      </docs:otherwise>
    </docs:choice>
</flow>
```

これにより、​`payload`​ が null でないたびに ​`when`​ ルートに含まれている ​`http:request`​ 操作が実行されます。null の ​`payload`​ が到達すると、代替の ​`otherwise`​ が実行されます。

## [](#void-ルーター)Void ルーター

**バージョン 1.1 以降で使用可能**​

実行の終了時に実行前と同じイベントやメッセージを残すルーターを作成することが必要になる場合もあります。この種のルーターは、Void ルーターと呼ばれます。

Void ルーターを実装するには、メソッドに ​`RouterCompletionCallback`​ ではなく ​`VoidCompletionCallback`​ 型の引数が必要です。このコールバックは、以前と同じように (​`success`​ および ​`error`​ メソッドで) 使用します。ただし、このケースでは ​`success`​ でどのパラメーターも受け取りません。

## [](#制限)制限

次の制限が適用されます。

### [](#設定と接続には非対応)設定と接続には非対応

ルーターには、​[操作](https://docs.mulesoft.com/jp/mule-sdk/1.1/operations)​とは異なる制限があります。定義上、ルーターは特定の設定や接続に依存したり、それらを受け取ったりすることはできません。

### [](#常に非ブロック)常に非ブロック

すべてのルーターは、その結果を伝えるために ​`RouterCompletionCallback`​ を受け取る ​`void`​ メソッドとして定義されている必要があります。つまり、すべてのルーターはデフォルトで非ブロックになります。