Home / crm-business-applications / Salesforce Certified MuleSoft Developer (Mule-Dev-201) / Cheat Sheet
Salesforce Certified MuleSoft Developer (Mule-Dev-201)

Mule-Dev-201 Cheat Sheet

Mule-Dev-201 Tests Predicting Exactly What the Mule Event Holds — Not Drag-and-Drop Familiarity

For developers building Mule 4 apps in Anypoint Studio. Most items show a flow, RAML fragment or DataWeave script and ask what happens next, so trace payload, attributes and variables processor by processor.

Check Your Readiness →
Among the harder certs
Avg: Not published by Salesforce
Pass: 750 / 1000
Most candidates understand Salesforce Certified MuleSoft Developer (Mule-Dev-201) concepts — and still fail. This exam tests how you apply knowledge under pressure.

Mule-Dev-201 Domain Map (12 sections, grouped)

Twelve official sections weighted 5% to 10% are grouped here into seven. Questions are prediction puzzles: read a short flow, RAML or script and choose the logged value, payload or HTTP status. The guide aligns to the Spring '24 release, and Mule 3 syntax is always a wrong answer.

  1. 01
    Events and structure (20%) — payload, attributes, vars, target and targetValue, flows vs private flows vs subflows, properties
  2. 02
    Connectors and records (20%) — Database and File operations, For Each, Parallel For Each, Batch Jobs, watermarks, Object Store
  3. 03
    Transforming Data (10%) — DataWeave map vs mapObject, groupBy, reduce, orderBy, coercion formats, modules, lookup
  4. 04
    Routing and errors (16%) — Choice, Scatter-Gather, validators, On Error Continue vs Propagate, Try scope, error mapping
  5. 05
    API design and interfaces (15%) — RAML resources and parameters, APIkit routing and status codes
  6. 06
    Application networks (7%) — API-led layers, C4E, Exchange, HTTP Request behaviour
  7. 07
    Deploy, manage and debug (12%) — CloudHub properties, autodiscovery, policies, SLA tiers, debugger, deployment failures

Wrong instinct vs correct approach

A child flow called by Flow Reference fails and handles the error with On Error Continue
✕ Wrong instinct

The parent's error handler runs next

✓ Correct approach

The child completed successfully from the parent's view, so the parent carries on after the Flow Reference with the child handler's payload. Had the child used On Error Propagate, the parent's handlers would see the error.

A request hits a RAML-declared resource with a verb the specification does not list
✕ Wrong instinct

APIkit returns 404 Not Found

✓ Correct approach

The router matches the resource, so it raises APIKIT:METHOD_NOT_ALLOWED, mapped to 405. Unknown paths give 404, invalid parameters or body give 400, and a declared method without a flow gives 501.

One of three Scatter-Gather routes calls an endpoint that fails
✕ Wrong instinct

The other routes are cancelled immediately

✓ Correct approach

Mule waits for every route, then raises MULE:COMPOSITE_ROUTING carrying successes and failures. On success the result is an object keyed by route index, so read a body as payload['0'].payload.

Error handler lists an ANY scope above an HTTP:NOT_FOUND scope and a 404 occurs
✕ Wrong instinct

The more specific NOT_FOUND scope runs

✓ Correct approach

On Error scopes are evaluated top to bottom and the first match wins, so ANY catches it. Put ANY last. A flow with its own handler ignores the global default handler for unmatched errors.

An app deploys to CloudHub but every API request returns 503 right after startup
✕ Wrong instinct

Debug the implementation's DataWeave logic

✓ Correct approach

Gatekeeper blocks traffic until API Manager policies download. Check that autodiscovery uses the API instance ID with valid environment client credentials; the listener should bind 0.0.0.0 on ${http.port}.

Know these cold

  • ▸ Message is payload plus attributes; variables sit beside the message, not inside it
  • ▸ A Logger never changes the event; an HTTP Request replaces payload and attributes
  • ▸ VM queues pass a new event; publisher variables never reach the listener flow
  • ▸ RAML query parameters are required unless marked required — alse; methods are not inherited
  • ▸ PUT replaces the whole resource; PATCH changes part; filters belong in the query string
  • ▸ Accept header mismatch gives 406; unsupported request Content-Type gives 415
  • ▸ orderBy sorts ascending; groupBy returns an object; reduce starts from the first element
  • ▸ In DataWeave formats MM is month and mm is minutes
  • ▸ lookup() calls flows only; DataWeave modules hold declarations with no output or body
  • ▸ Unresolved ${key} placeholders stop deployment; secure values use ${secure::key}

Can you answer these without checking your notes?

In this scenario: "A child flow called by Flow Reference fails and handles the error with On Error Continue" — what should you do first?
The child completed successfully from the parent's view, so the parent carries on after the Flow Reference with the child handler's payload. Had the child used On Error Propagate, the parent's handlers would see the error.
In this scenario: "A request hits a RAML-declared resource with a verb the specification does not list" — what should you do first?
The router matches the resource, so it raises APIKIT:METHOD_NOT_ALLOWED, mapped to 405. Unknown paths give 404, invalid parameters or body give 400, and a declared method without a flow gives 501.
In this scenario: "One of three Scatter-Gather routes calls an endpoint that fails" — what should you do first?
Mule waits for every route, then raises MULE:COMPOSITE_ROUTING carrying successes and failures. On success the result is an object keyed by route index, so read a body as payload['0'].payload.

Common Exam Mistakes — What candidates get wrong

Expecting the payload after For Each to hold the transformed elements

For Each restores the original collection when it finishes. Collect results in a variable, or use Parallel For Each, which outputs a collection of results, or a DataWeave map. vars.counter starts at 1.

Reading vars.result.id after an operation with a default target

targetValue defaults to #[message], so the body sits at vars.result.payload. Set targetValue to #[payload] to store the body only. A target leaves the current payload and attributes untouched.

Reading payload.email after a Database Select that matched one row

Select always returns an array of objects, so the value is payload[0].email. Bind request values through Input Parameters with :name placeholders rather than concatenating SQL, and add the vendor JDBC driver as a dependency.

Expecting a subflow to have its own error handler

Subflows have no source and no error handler and run in the caller's error scope. Use a private flow, which can define one, or wrap steps in a Try scope. Flow Reference shares payload, attributes and variables both ways.

Assuming a failed batch record still reaches the next Batch Step

The default accept policy NO_FAILURES skips it; ONLY_FAILURES or ALL change that. Max failed records 0 stops at the first failure and -1 means unlimited. Batch Jobs run asynchronously, so the calling flow continues immediately.

Resources to help you pass MuleSoft Developer on your first attempt

Mule-Dev-201 asks what the event holds after each processor. Test your tracing accuracy now.