JSON モジュールの移行

Mule 4.1 の標準サポートは 2020 年 11 月 2 日に終了しました。このバージョンの Mule は、拡張サポートが終了する 2022 年 11 月 2 日にその すべてのサポート​が終了しました。

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

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

スキーマ検証用に Mule 3 にバンドルされていた JSON モジュールが、Mule 4 で新しい JSON モジュールに置き換わります。

JSON を使用する変換を移行するには、DataWeave を使用することをお勧めします。

トランスフォーマの移行

Mule 3 の場合、多くのコンポーネントでは、項目にアクセスできるようペイロードは POJO である必要がありました。Mule 4 では、JSON ペイロードで直接 DataWeave をクエリ言語として使用し、ペイロードを中間ステップとして POJO に変換する必要性を完全に回避できます。

JSON to Object トランスフォーマ

json:json-to-object-transformer​ に設定されるマッピングルールの場合は、DataWeave でルールを記述できます。

  • Mule 3 の場合:

    例: マッパー設定で使用される Mixin

    public abstract class AppleMixin
    {
        AppleMixin(@JsonProperty("bitten") boolean wasBitten)
        {
            super();
        }
    
    }

    例: マッパーを参照するトランスフォーマ

    <json:mapper name="myMapper">
        <json:mixin mixinClass="org.mule.module.json.transformers.AppleMixin"
                        targetClass="org.mule.tck.testmodels.fruit.Apple"/>
    </json:mapper>
    
    <flow name="flow">
        <json:json-to-object-transformer returnClass="org.mule.tck.testmodels.fruit.Apple"
                                         mapper-ref="myMapper"/>
    </flow>
  • Mule 4 の場合:

    例: DataWeave をマッパーとして使用

    <flow name="flow">
        <ee:transform>
            <ee:message>
                <ee:set-payload>
                    <![CDATA[%dw 2.0
                        type apple = Object { class: "org.mule.tck.testmodels.fruit.Apple"}
                        output application/java
                        ---
                        {
                            wasBitten = bitten
                        } as apple
                    ]]>
                </ee:set-payload>
            </ee:message>
        </ee:transform>
    </flow>

Mule 4 ではマッパーや mixin クラスを定義する必要がありません。マッピングルールは DataWeave コードを使用して定義されます。

Object to JSON トランスフォーマ

json:object-to-json-transformer​ のマッピングルールも DataWeave を使用して表されます。

Mule 3 の場合:

  • 例: Mixin を使用したトランスフォーマ

    <flow name="flow">
        <json:object-to-json-transformer returnClass="org.mule.tck.testmodels.fruit.Apple">
            <json:serialization-mixin mixinClass="org.mule.module.json.transformers.AppleMixin"
                                      targetClass="org.mule.tck.testmodels.fruit.Apple"/>
    
        </json:object-to-json-transformer>
    </flow>

Mule 4 の場合:

  • 例: DataWeave をマッパーとして使用

    <flow name="flow">
        <ee:transform>
            <ee:message>
                <ee:set-payload>
                    <![CDATA[%dw 2.0
                        output application/json
                        ---
                        {
                            bitten = wasBitten
                        }
                    ]]>
                </ee:set-payload>
            </ee:message>
        </ee:transform>
    </flow>

Mule 4 では変換で出力形式を設定できます。この場合は、変換関数が JSON ペイロードを返すように式で出力を ​application/json​ として定義します。

XSLT 操作の移行

Mule 4 の JSON モジュールは、XSLT マッピングに基づいて JSON を変換するコンポーネントは提供されていません。この場合には、次のような対処法があります。

  • XSLT を DataWeave 変換に移行する (推奨)。

  • XML モジュールの XSLT サポートを使用して最初にペイロードを XML に変換する。

Mule 4 の例: XSLT を使用した JSON の変換
<flow name="flow">
    ...
	<xml-module:xslt-transform>
	    <xml-module:content>#[output application/xml --- payload]</xml-module:content>
	    <xml-module:xslt>
	        (the XSLT transformation) ...
	    </xml-module:xslt>
	</xml-module:xslt-transform>
	...
</flow>