DataWeave を使用した型の強制

DataWeave 2.2 は Mule 4.2 と互換性があり、Mule 4.2 にバンドルされています。 このバージョンの Mule は、拡張サポートが終了する 2023 年 5 月 2 日にその すべてのサポート​が終了しました。

このバージョンの Mule を使用する CloudHub には新しいアプリケーションをデプロイできなくなります。許可されるのはアプリケーションへのインプレース更新のみになります。

標準サポートが適用されている最新バージョンの Mule 4 にアップグレード​することをお勧めします。これにより、最新の修正とセキュリティ機能強化を備えたアプリケーションが実行されます。

DataWeave では、​as​ 演算子を使用して、型を別の型に強制的に変換できます。型強制は実行時に適用されます。 開始する前に、DataWeave バージョン 2 は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントの ​DataWeave 1.0 ドキュメントセット​を参照してください。他の Mule バージョンの場合は、Mule Runtime の目次のバージョンセレクターを使用できます。

期待される型に一致しないプロパティを演算子に提供した場合、DataWeave は、自動的に、提供されたプロパティを必須の型に強制的に変換しようとします。

型強制のための DataWeave 型の定義

この DataWeave 例では、​String​ 型を使用して型 ​Currency​ を定義し、Java DecimalFormat パターン (​##​) を使用して値を書式設定し、​as​ を使用して ​price​ 値を ​Currency​ 型に強制的に変換します。

入力
<items>
    <item>
        <price>22.30</price>
    </item>
    <item>
        <price>20.31</price>
    </item>
</items>
DataWeave
%dw 2.0
output application/json
type Currency = String { format: "\$#,###.00"}
---
books: payload.items.*item map
    book:
        price: $.price as Currency
出力
{
  "books": [
    {
      "book": {
        "price": "22.30"
      }
    },
    {
      "book": {
        "price": "20.31"
      }
    }
  ]
}

型強制表

次の表は、可能な組み合わせと、変換で使用するスキーマからのプロパティを示しています。

変換元 変換先 プロパティ

Range

Array

Number

Binary

String

Binary

String

Boolean

Number

DateTime

unit

LocalDateTime

DateTime

String

DateTime

format​ / ​locale

DateTime

LocalDate

LocalDateTime

LocalDate

String

LocalDate

format​ / ​locale

DateTime

LocalDateTime

String

LocalDateTime

format​ / ​locale

DateTime

LocalTime

LocalDateTime

LocalTime

Time

LocalTime

String

LocalTime

format​ / ​locale

DateTime

Number

unit

String

Number

format​ / ​locale

String

Period

String

Regex

DateTime

String

format​ / ​locale

LocalDateTime

String

format​ / ​locale

LocalTime

String

format​ / ​locale

LocalDate

String

format​ / ​locale

Time

String

format​ / ​locale

Period

String

TimeZone

String

Number

String

format​ / ​locale

Boolean

String

Range

String

,​ を区切り文字として使用して、範囲のすべての値を含む文字列を返します。

Type

String

DateTime

Time

LocalDateTime

Time

LocalTime

Time

String

Time

format

DateTime

TimeZone

Time

TimeZone`

String

TimeZone

型強制のプロパティ

プロパティ 説明

class

Object (オブジェクト) 型の Java クラスを受け入れます。

format

数値と日付を書式設定するための Java ​DecimalFormat​ パターンを受け入れます。

locale

Java ロケールを受け入れます。Java ​Locale​ オブジェクトは地域 (地理的、政治的、または文化的) を表します。

unit

値には ​milliseconds​ または ​seconds​ を使用できます。これは、Number (数値) から DateTime (日時) への変換で使用されます。

Java ブリッジの使用

DataWeave では、Java ブリッジを使用して Java の任意の静的関数やコンストラクターをコールできます。この機能は、Java で記述されたビジネスロジックを再利用する必要がある場合や、空の公開コンストラクターがない Java オブジェクトをインスタンス化する必要がある場合に役立ちます。

Java ブリッジを使用するには、完全修飾された Java 名を DataWeave 名に変換します。

  1. プレフィックス ​!java​ を追加します。

  2. 完全修飾名のドットを ​::​ に置き換えます。

Java 関数を呼び出すときには、DataWeave は各引数を関数パラメーターで想定される型に変換します。

次の例は、​java.lang.NullPointerException​ の新しいインスタンスを作成する方法を示しています。

%dw 2.0
output application/json
---
java!java::lang::NullPointerException::new("foo")

次の例では、関数 ​java.lang.String.valueOf​ を呼び出しています。

%dw 2.0
output text/plain
import valueOf from java!java::lang::String
---
valueOf(true)