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>

上記の簡素化された例の実際の実装は、 XPathFunction.java​ を参照してください。

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

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