---
schema_version: "1"
id: 09b1c2d37e8b4f00f161865c7dba681107e9655282779df3fdccb064e7649013
title: Mule SDK のバリデーター
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/mule-sdk/1.1/validators.md
canonical_url: https://docs.mulesoft.com/jp/mule-sdk/1.1/validators
source_site: docs.mulesoft.com
content_type: documentation
content_hash: d90654c2f9bb63fa9f0493359c2150bf5ccbc181174e6b338f2af4d5de43f1ac
description: MuleSoft Documentation Site
release: "1.1"
latest: false
---
# Mule SDK のバリデーター

バリデーターとは、メッセージを変更することなく Mule メッセージを検証する操作です。バリデーターでは次の効果をもたらすことができます。

- バリデーターで課された条件が満たされた場合、フローは続行し、Mule メッセージは変更されません。
- バリデーターで課された条件が満たされない場合、エラーがスローされます。

## [](#バリデーターの要件は)バリデーターの要件は?

バリデーターになるには、操作は次の要件を満たす必要があります。

- `@Validator`​ アノテーションによって到達される必要があります。クラスレベルまたはメソッドレベルで割り当てることができます。​`@Validator`​ アノテーションをクラスレベルで使用すると、すべての公開メソッドがバリデーターとしてマークされます。
- `void`​ を返す必要があります。
- `MULE:VALIDATION`​ (またはこの拡張) である 1 つ以上のエラーをスローする必要があります。検証に失敗した場合、バリデーターは Mule 検証エラーまたはその子をスローする必要があります。

`@Validator`​ アノテーション付きのメソッドはステレオタイプ ​`ValidatorStereotype`​ に属します。コンポーネントは 2 つのステレオタイプを持つことができないため、複数のステレオタイプをメソッドに割り当てることはできません。

バリデーターは、操作と同じ UX を共有します。Studio で使用するモジュールを追加すると、バリデーターがパレットに表示されます。バリデーターをフローに追加すると、そのパラメーターは操作の場合と同様に割り当てられます。

## [](#バリデーターの作成方法)バリデーターの作成方法

次の例では、単純なバリデーターを作成する方法を示します。これは、​`balance`​ という名前の単純な拡張機能を作成します。

```java
@Operations({BalanceOperations.class})
@Extension(name = "balance")
@ErrorTypes(BalanceError.class)
public class BalanceExtension {

}
```

以下の ​`BalanceOperations`​ クラスは、​`@Validator`​ アノテーションが付加された検証メソッドを追加します。このメソッドは、汎用的な検証エラー種別から取得するエラー種別をスローします。​`BalanceOperations`​ クラスに ​`@Validator`​ アノテーションを付加することもできますが、これを行うと、その中の他の操作がバリデーターとしてフラグ付けされます。

```java
public class BalanceOperations {
  @Validator
  @Throws(BalanceErrorsProvider.class)
  public void hasSufficientFunds(Integer balance, Integer price) throws Exception {
    if (price > balance){
      throw new ModuleException(BalanceError.INSUFFICIENT_FUNDS, new IllegalArgumentException("There is not enough money to make the transaction"));
    }
  }
}
```

次の例では、検証が失敗した場合にスローするエラーを作成します。これには検証の失敗に応じた名前が付いています。

```java
public enum BalanceError implements ErrorTypeDefinition<BalanceError> {
  INSUFFICIENT_FUNDS(MuleErrors.VALIDATION);

  private ErrorTypeDefinition<? extends Enum<?>> parent;

  BalanceError(ErrorTypeDefinition<? extends Enum<?>> parent) {
    this.parent = parent;
  }

  @Override
  public Optional<ErrorTypeDefinition<? extends Enum<?>>> getParent() {
    return Optional.ofNullable(parent);
  }
}
```

バリデーターのメソッドには、検証がスローできるすべてのエラー種別を認識する ​`ErrorTypeProvider`​ が必要です。この例では、メソッドがスローできるエラーの種別は ​**BALANCE:INSUFFICIENT\_FUNDS**​ のみであることを指定する ​`ErrorTypeProvider`​ を作成します。

```java
public class BalanceErrorsProvider implements ErrorTypeProvider {
  @Override
  public Set<ErrorTypeDefinition> getErrorTypes() {
    HashSet<ErrorTypeDefinition> errors = new HashSet<>();
    errors.add(BalanceError.INSUFFICIENT_FUNDS);
    return errors;
  }
}
```

## [](#バリデーターの使用方法)バリデーターの使用方法

上記で作成したバリデーターをフローで使用するとします。構文は操作の場合と同じです。​`balance`​ と ​`price`​ は必須パラメーターのため、これらを割り当てる必要があります。この場合、変数 ​`price`​ と ​`balance`​ の値を使用して検証が実行されますが、ここでは任意の式を使用できます。

```xml
<balance:has-sufficient-funds balance="#[vars.balance]" price="#[vars.price]"/>
```

## [](#バリデーターおよびallスコープ)バリデーターおよび「all」スコープ

バリデーターはステレオタイプ ​`ValidatorStereotype`​ のため、検証モジュールから ​`all`​ スコープでバリデーターを使用できます。

次の例では、検証モジュールからバリデーターを使用します。また、これは、値が実際に正であるかどうかを検証する、​`isPositive`​ という名前のバリデーターを持つ数値拡張があることを想定します。

```xml
<validation:all>
  <validation:is-not-blank-string value="#[vars.buyerName]"/>
  <number:is-positive value="#[vars.price]"/>
  <number:is-positive value="#[vars.balance]"/>
  <balance:has-sufficient-funds balance="#[vars.balance]" price="#[vars.price]"/>
</validation:all>
```

この例では、空の文字列ではない ​`buyerName`​ 変数があることを確認します。その後、​`price`​ と ​`balance`​ の両方の変数に正の値が含まれていることを確認します。最後にバリデーターを使用して口座に十分な残高があるかどうかを確認します。