Mule SDK での関数の寄稿

DataWeave は、Mule 4 の主要な式言語であり、Mule SDK もそれに準拠しています。そのため、Mule 操作をコーディングするのと同じように、モジュールのコードから DataWeave に関数を寄稿することができます。カスタム関数を使用することで、新しい方法でコードが再利用できるようになり、単一モジュール内で機能が追加され、宣言方法に関するオーバーヘッドも Mule 操作と比較して非常に少なくて済みます。

関数の宣言

Extension レベルで @ExpressionFunctions アノテーションを使用することで、DataWeave 関数を表す公開メソッドを含むクラスを参照できます。このメソッドのコードは、名前を識別子として DataWeave スクリプトから直接実行されます。

@Extension(name = "Docs")
@ExpressionFunctions(DocsFunction.class)
public class DocsModule {

}

この例は、DocsFunction クラスで次のメソッドを定義しています。

public Object xpath(@Optional(defaultValue = PAYLOAD) InputStream item,
                    String expression){
    try {
      return xPathFactory.newXPath().evaluate(expression, documentBuilder.parse(item));
    } catch (Exception e) {
      return null;
    }
  }

この xpath 関数は、DataWeave スクリプト内から使用して、モジュールの名前空間内で​参照できます。

次の例では XML を読み取って、新しい xpath 関数を使用して XPath 検索条件を設定しています。

<flow name="xpathFunctionUsingPayloadAsDefault">
  <file:read path="files/bookstore.xml"/>
  <set-payload value="#[Docs::xpath("/bookstore/book[price>35]/title")]"/>
</flow>

制限: 設定と接続には非対応

定義上、関数は特定の設定接続に依存したり、それらを受け取ったりすることはできません。

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub