Migrating Transformers

Mule 4 does not require transformers anymore. Now that DataWeave is the default expression language and the repeatable streams feature is supported, most (if not all) scenarios that required a transformer no longer exist.

Migrating Type Transformers

In Mule 3, the same data can be represented using different types. For instance, a JSON can be stored using a String, InputStream, OutputHandler, or ByteArray. In the same way, an XML can be represented with those same types or in a Java DOM document.

In Mule 4, every format that is not binary is handled automatically by Mule. So you do not need to be concerned about the type that is carrying the content.

InputStream to String Transformations

In Mule 3, the <object-to-string-transformer> was commonly used so that data held by an InputStream could be consumed by more than one processor. Because Mule 4 has the concept of repeatable streams, this is no longer required.

Object Model Representation for JSON and XML

To access the content of an XML or JSON document in Mule 3, a conversion to a Java object representation model was needed so that Java code or MEL could be used later. In Mule 4, the expression language of the runtime completely supports JSON and XML (and many other formats), so this conversion is no longer needed. You simply use a DataWeave expression to access the data.

Migrating Custom Transformers

Most likely, any custom transformers you used to handle formats supported by DataWeave are no longer needed, so they can be migrated to use the expression language. The DataWeave script can be externalized to a file if the same transformation needs to be occur in several places.

For cases where you transform data in ways that DataWeave does not support, you should use the Java module or the Scripting module and use custom code to perform the transformation.