Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MULE ESB -DataWeave

ramya
December 21, 2015

MULE ESB -DataWeave

MULE ESB -DataWeave

ramya

December 21, 2015
Tweet

More Decks by ramya

Other Decks in Education

Transcript

  1. Using the DataWeave Transformer  In Anypoint Studio, you can

    place a Transform Message element in a flow to create transformations using the DataWeave language.  The editor helps you do this by offering intelligent autocomplete suggestions, an output preview that is updated in real time as you make changes.  This generates a .dwl transformation file (or several of them) that stores your code and is packaged with your Mule application. Ramya
  2.  When adding a Transform Message element to a Mule

    Flow, it takes the elements from the incoming Mule Message as its inputs. It then performs the necessary actions to produce a Mule message as output for the next element in the flow Ramya
  3.  The DataWeave Text Editor GUI  The Transform Message

    element allows you to freely write DataWeave code.  If you click on an instance of the Transform Message element in your flow, its properties editor will be displayed. This editor is divided into three sections:  Input  Transform  Output Ramya
  4. Input Section In the main tab, a tree view shows

    the known metadata contents of the incoming Mule Message, allowing you to explore it and know what data is available for using as an input, and how to reference each part of it. If the Mule flow doesn’t expose Metadata about the elements you need from the incoming message, you can manually specify it. To do so, select the element of the input you desire to define, note that the pencil icon at the top right is no longer grayed out. Click this icon to open a new tab in your input section where you can define a sample with the structure of this data. Ramya
  5. Ramya When the input is of JSON or XML types,

    the sample input contains plain XML or JSON code. When the input is of type POJO or DataWeave, the sample input is written in DataWeave for more simplicity. In these cases the sample DataWeave code is merely a way to display the sample data, not a transformation in itself.
  6. Setting Reader Parameters  Some input formats, like CSV, allow

    you to define a reader with specific properties that make DataWeave parse inputs differently. Select the input element you wish to configure on the tree view of the input section, then click the gear icon. Ramya
  7. Transform Section  you write the actual DataWeave code that

    carries out the transform. Notice that changing the type of your output directive changes the output section of the editor. Although DataWeave as a language supports adding input directives and naming these by any name you like, in Studio the elements of the input message are implicitly considered input directives and so they don’t need to be defined in the header. Ramya
  8. If Studio has any metadata about the components that are

    upstream or downstream from your Transform Message element at the time when you add the component to your flow, a scaffolding for your DataWeave code is written out automatically, with as much depth as Studio can intelligently deduce. In some cases, this code may be enough to carry out the transformation you need, and no additional coding is needed. Sometimes, all you need to do is fill in the blank spaces in the scaffolding with references to the input fields, other times you may want to carry out more complex operations that involve aggregation, filtering, calculations, defining custom functions, etc and there you must write this out in DataWeave code. Ramya
  9. Re-scaffolding  Once you’ve added the Transform Message element to

    your flow, any further changes you make to the surrounding message processors and their metadata won’t affect your `.dw`l file. You may still click the Scaffolding button on the top left of the DataWeave properties editor any time you want and have a new scaffolding built, note that this will erase anything you’ve written in the DataWeave body. Doing this won’t affect any directives you defined in your header (except for the output directive). Use this button if you’ve made any changes to elements that come after the Transform Message element on the flow that expose metadata and don’t mind loosing what you’ve already written into the transform’s body. Ramya
  10. Referencing Existing Transforms Instead of defining a new .dwl file,

    you can reference an existing one by clicking theData Source button, selecting On File as the source and referencing the correct file. Ramya
  11. Handling Multiple Outputs A single Transform Message element can give

    shape to several different components of the output Mule message. Each of these output components must be defined in a separate .dwl file, written out in a separate tab of the Transform section. For example in one tab you may be defining the payload contents, in another those of an outbound property, and these will both be parts of the same output Mule message Ramya
  12. To add a new output, click the Plus sign at

    the bottom right of the section:new+output.png[image] A new tab will then appear, there you can specify where in the output Mule message to place the output of this DataWeave transform. In case you’re creating a new variable or property, you must also set a name for it. Ramya
  13. In the XML editor you can do the same by

    adding multiple child elements inside thedw:transform-message component. Ramya <dw:transform-message> <dw:set-payload resource="classpath:path/transform.dwl"/> <dw:set-variable variableName="myVariable" resource="classpath:path/transform.dwl"/> <dw:set-session-variable variableName="mySessionVariable" resource="classpath:path/transform.dwl"/> </dw:transform-message>
  14. Output Section  This section has two tabs, one of

    them shows you a neat expandable tree view of the output data structure, the other shows you a preview of what the actual output looks like, built from any sample data you provide in the input section. As you make changes in the transport section, notice how the data structure changes. The output of the transformer is made into the selected component of the output mule message. If your transformer has multiple outputs, the Preview tab will display the one corresponding to the currently selected transform. Ramya
  15. Using DataWeave Language Elsewhere  All components in Mule that

    support Mule Expression Language also support expressions written in DataWeave Language. To invoke an expression written in DataWeave language, simply invoke the dw() function, the expression will return whatever the transform outputs.  DataWeave expressions defined within this function work just as those defined within a Transform Message element, the only difference is that the output is returned into the expression’s result, wherever it may be. Ramya
  16.  For example, you can define a custom object and

    populate it with elements from the payload:  That same expression could be added inside a Logger,  within a MEL expression, to print out its result: Ramya dw(myobject:{id:payload.accountid, user:payload.user}) #[`dw(myobject:{id:payload.accountid, user:payload.user})`]