Result オブジェクト

Result オブジェクトは、コンポーネントの実行結果を表します。このオブジェクトは、コンポーネントがメッセージペイロードに値を設定して戻す必要があるケースだけではなく、メッセージ属性や MIME タイプを指定するケースでも使用されます。

クラスには、ペイロードに格納される値の型と、返されるメッセージ属性の型の 2 つの汎用型があります。

ファイルコネクタの read 操作を大幅に簡素化した例を示します。この操作は、ペイロードをファイルの内容を含む InputStream に設定します。また、属性をファイル名、サイズ、タイムスタンプ、権限などの情報が入った FileAttributes オブジェクトに設定します。

public Result<InputStream, FileAttributes> read(String path) { (1)
  InputStream content = getContent(path);
  FileAttributes attributes = getAttributes(path);

  return Result.<InputStream, FileAttributes>builder() (2)
        .output(content) (3)
        .attributes(attributes) (4)
        .build(); (5)
}
1 操作は Result<InputStream, FileAttributes> を返します。これは、操作が InputStream をペイロードとして、FileAttributes を属性として返すことを Runtime に通知します。
2 結果値を取得すると、Result.builder() を使用して新しいインスタンスを作成します。この値は厳密に型指定されているため、ビルダーを作成する際には汎用型を指定する必要があります。
3 ビルダーの output(Object) メソッドは、ペイロードの設定に使用します。
4 attributes(Object) は、属性の設定に使用します。
5 例では、build() メソッドをコールして、作成された Result を返しています。

MIME タイプの設定

Result オブジェクトを使用して出力の MIME タイプを設定できます。前述の例を少し変えて、操作でファイルの最適な MIME タイプをファイル拡張子から推定します。

public Result<InputStream, FileAttributes> read(String path) {
  InputStream content = getContent(path);
  FileAttributes attributes = getAttributes(path);

  MediaType guessedMediaType = MediaType.ANY;
  if (path.endsWith(".json")) {
    guessedMediaType = MediaType.APPLICATION_JSON;
  } else if (path.endsWith("*.xml")) {
    guessedMediaType = MediaType.APPLICATION_XML;
  } else if (path.endsWith("*.bin")) {
    guessedMediaType = MediaType.BINARY;
  }

  return Result.<InputStream, FileAttributes>builder()
        .output(content)
        .attributes(attributes)
        .mediaType(guessedMediaType)
        .build();
}
上記の例では、MediaType クラスは @MediaType アノテーション付きではなく、Mule API の org.mule.runtime.api.metadata.MediaType となっています。

void 属性

ペイロードと MIME タイプを設定し、属性は設定しない場合、void 型を使用します。次に例を示します。

public Result<InputStream, Void> read(String path) {
  InputStream content = getContent(path);

  return Result.<InputStream, Void>builder()
        .output(content)
        .mediaType(bestGuessMediaType(path))
        .build();
}

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub