DataSense is Anypoint Studio’s ability to proactively discover metadata from internal and external resources.
5-1) Setting Message Data
Structure of Mule messages:
- Inbound properties
--- Set from the message source (read-only & persist throughout the flow)
- Outbound properties
--- Added by the message processor (read/write access & can set/remove/copy)
--- The core of the message (Java Object)
--- Ancillary info to the message.
Image: Example Inbound Message Properties
- Raw data
--- E.g.: String, InputStream, Byte ...
- Structured data:
--- E.g.: Map, Structured Java Object ...
Setting message properties:
- Set Payload (Transformer)
- Property (Transformer): Sets/removes/copies properties on the outbound scope of a message
Image: Examples Flow
5-2) Debugging Mule applications
Can add breakpoints to processors and step through the application.
By default, Debugger listens for incoming TCP connections on localhost port 6666.
Image: ‘Debug project...’ from the Canvas
Image: Debug As > Mule Application (configure) > Mule Debug... (Tab) > Debugger Port: 6666
Image: Toggle breakpoint
Image: Expression Evaluator box
5-3) Using Expressions to read and write message data
MEL = Mule Expression Language
Note: MEL is case-sensitive.
Basic MEL syntax:
# Encapsulates all Mule expressions.
#[message] Holds a context object.
#[message.payload] Dot notation to access fields or methods.
server Operating system that message processor is running.
mule The mule instance that the application is running.
application User application the current flow is deployed in.
message The Mule message that the message processor is processing.
Image: Accessing message data
Image: Accessing message payload data
Image: Accessing relational map data
Image: Operators: +, -, /, *, %, ==, != ...
Testing for emptiness:
The literal empty tests the emptiness of a value.
- XPath: #[xpath(‘expression’)]
- RegEx: #[regex(‘expression’)]
Image: Example: Getting ‘Logger’ to just log http.query.params name
Note: You can only set outbound properties in a flow. So if you use the ‘Property’ element to set something, the logger then needs to read it in outbound properties.
5-4) Creating Variables
Variable Transformer to set Flow Variable.
Session Variable Transformer to set Session Variable.
flow variables - tied to the message event as it moves through flows: #[flowVars.X]
session variables - also tied to the message event, but they persist across some but not all transport barriers: #[sessionVars.foobar]
Image: Variable persistence
Image: Using flowVars in Logger
“Session variables are typically not used - mainly if you want a variable to persist over a VM queue. Example: It does not persist across HTTP transport.”