CertSafari

    Free Salesforce Certified MuleSoft Developer Sample Questions

    35 free sample questions from our bank of 348+, covering every exam domain, with answers and detailed explanations. Updated September 2026.

    Domain 1: Creating Application Networks

    Subdomain 1.2: Identify features of an API-led approach.

    1.A company migrates its on-premises order database to a new cloud-hosted database with a different connection protocol. Because the application network was built using an API-led approach, only one layer's implementation needs to change to accommodate the new backend. Which layer is that?

    1. A.Experience API
    2. B.Process API
    3. C.System API
    4. D.All three layers must change
    Show answer & explanation

    Correct answer: CSystem API

    • A. This layer only shapes data for a channel; it has no direct knowledge of the backend connection protocol, so it would not need to change.
    • B. This layer orchestrates calls to a stable backend interface and is unaware of what protocol the underlying database uses, so it stays unaffected by the migration.
    • C. This is the only layer that connects directly to the backend, so isolating the new connection protocol here is exactly what shields the other layers from the change.
    • D. Requiring every layer to change would mean the architecture failed to isolate backend changes, which defeats the purpose of separating these responsibilities into distinct layers.

    Subdomain 1.1: Identify core architectural concepts of the Application Network and modern APIs.

    2.A new developer joining the integration team needs to build a Process API that retrieves customer data. Before writing any new code, they want to check whether a System API already exposes this data so they can reuse it instead of duplicating the integration. Where should they look, and what characteristic of a modern API makes this reuse possible?

    1. A.They should search Anypoint Exchange, since modern APIs are published there as discoverable, reusable assets that teams can browse and reuse.
    2. B.They should search the shared file system, since modern APIs are stored as WSDL documents that any developer can open and copy.
    3. C.They should ask the network operations team, since modern APIs are registered in the corporate DNS server for internal lookup.
    4. D.They should search the source control commit history, since modern APIs are only discoverable by reading another team's private repository.
    Show answer & explanation

    Correct answer: AThey should search Anypoint Exchange, since modern APIs are published there as discoverable, reusable assets that teams can browse and reuse.

    • A. Anypoint Exchange is the catalog where modern, API-led assets are published and made discoverable and reusable, which is exactly what lets a new developer find and consume an existing System API instead of rebuilding it.
    • B. Modern APIs published for an application network are not distributed as WSDL files on a shared drive; that describes a legacy SOAP-style discovery pattern, not API-led reuse.
    • C. DNS registration resolves network addresses, not API discoverability; it plays no role in how teams find and reuse published API assets.
    • D. Requiring developers to dig through another team's private repository history is the opposite of discoverability — a modern API is meant to be found and reused without needing source-level access.

    Subdomain 1.3: Identify features of MuleSoft's recommended Operational Model (C4E).

    3.Which of the following are practices a Center for Enablement should adopt to drive an efficient application network? (Select all that apply.)(Select 3)

    1. A.Productize APIs so they are documented, discoverable, and easy for other teams to consume
    2. B.Publish reusable assets to Anypoint Exchange so business units can find and reuse them
    3. C.Collect adoption and reuse metrics from consumers to guide future asset investment
    4. D.Require central IT to author every API so that no line-of-business team writes integration code
    5. E.Prevent business units from accessing Anypoint Exchange until a formal ticket is approved
    6. F.Rebuild each requested integration from scratch rather than checking for an existing reusable asset
    Show answer & explanation

    Correct answers: A, B, CProductize APIs so they are documented, discoverable, and easy for other teams to consume; Publish reusable assets to Anypoint Exchange so business units can find and reuse them; Collect adoption and reuse metrics from consumers to guide future asset investment

    • A. Productizing APIs, giving them clear documentation and a consistent, discoverable interface, is one of the three core C4E activities that make reuse practical for other teams.
    • B. Publishing productized assets to Anypoint Exchange is how the C4E makes reusable APIs findable and consumable across business units, driving the application network's growth.
    • C. Harvesting adoption and reuse metrics from consumers lets the C4E prioritize which assets to invest in next, closing the feedback loop with the business units.
    • D. Requiring central IT to author every API recreates a centralized bottleneck and contradicts the C4E's goal of distributing API-led delivery across business units.
    • E. Gating Exchange access behind manual ticket approval blocks the self-service discovery the C4E is meant to enable, slowing reuse instead of accelerating it.
    • F. Rebuilding integrations from scratch instead of checking Exchange for an existing asset defeats the purpose of productizing and publishing reusable APIs in the first place.

    Subdomain 1.4: Apply correct processors / syntax and predict outcomes to consume RESTful web services (RAML-based) and predict outcomes.

    4.By default, without any custom Response Validator configuration, at which HTTP status code does the HTTP Request operation raise an error?

    1. A.Any status code of 400 or higher, per the default validator.
    2. B.Any status code of 500 or higher, treating 4xx codes as success.
    3. C.Any status code other than exactly 200, per the default validator.
    4. D.Any status code that the target RAML spec marks as invalid.
    Show answer & explanation

    Correct answer: AAny status code of 400 or higher, per the default validator.

    • A. The default response validator on the HTTP Request operation classifies any status code of 400 or above as a failure and raises an error, covering both 4xx and 5xx responses.
    • B. Treating 4xx codes as success is incorrect; the default validator raises an error starting at 400, not only at 500, so client-error responses also trigger a failure.
    • C. Success codes other than exactly 200, such as 201 or 204, are still treated as success by the default validator, so this threshold is too strict to describe the actual default behavior.
    • D. The default response validator evaluates the numeric status code returned by the server; it does not consult the RAML specification to decide what counts as an error.

    Domain 2: Designing APIs

    Subdomain 2.2: Define REST API parameters and responses.

    5.A `GET /books` resource should reject requests where the `sortOrder` query parameter is anything other than `asc` or `desc`, and the RAML file itself, not application code, should enforce this. Which facet accomplishes this?

    1. A.Add an `enum` facet to the `sortOrder` query parameter listing `asc` and `desc` as the only allowed values.
    2. B.Add a `pattern` facet to the `sortOrder` query parameter with a regular expression that matches any string.
    3. C.Add a `default` facet to the `sortOrder` query parameter set to `asc` so unrecognized values fall back automatically.
    4. D.Add a `required` facet to the `sortOrder` query parameter set to `true` so the client must always supply a value.
    Show answer & explanation

    Correct answer: AAdd an `enum` facet to the `sortOrder` query parameter listing `asc` and `desc` as the only allowed values.

    • A. This is correct: the `enum` facet declares the exact set of values a parameter may take, so the parser rejects any `sortOrder` value that is not `asc` or `desc` without needing custom application logic.
    • B. This is incorrect as written, because a regular expression that matches any string would not restrict `sortOrder` to the two allowed values; `pattern` could in principle be misused for this, but not with an unrestrictive expression.
    • C. This is incorrect because `default` only supplies a fallback value when the parameter is omitted; it does not validate or reject values that clients actually send.
    • D. This is incorrect because `required` only controls whether the parameter must be present at all; it says nothing about which values are acceptable once it is supplied.

    Subdomain 2.1: Use REST API methods and resources.

    6.A RAML method definition specifies a DELETE operation on `/orders/{orderId}` that removes the order and returns no response body. Which status code should this response be documented under?

    1. A.204
    2. B.200
    3. C.202
    4. D.404
    Show answer & explanation

    Correct answer: A204

    • A. This status code signals that the request succeeded and there is no body to return, which matches a delete operation that removes the resource and sends nothing back.
    • B. This status code conventionally accompanies a response body describing the result, but this delete operation is defined to return no body at all.
    • C. This status code indicates the request was accepted for later asynchronous processing, which does not describe a deletion that has already completed.
    • D. This status code indicates the target resource did not exist, describing a failure case rather than a successful deletion of an existing order.

    Subdomain 2.3: Identify when and how to define query parameters vs URI parameters.

    7.Which of the following statements correctly describe query parameters in RAML 1.0 API design? (Select all that apply.)(Select 3)

    1. A.They are appropriate for filtering, sorting, or paginating a collection without changing which resource is addressed.
    2. B.They must always be marked `required: true` to be valid RAML.
    3. C.They can be marked optional by setting `required: false` on the parameter.
    4. D.They are the correct mechanism for identifying a single specific resource instance.
    5. E.The `queryString` node and `queryParameters` node are mutually exclusive on the same method.
    6. F.They replace URI parameters entirely once a resource is deployed to CloudHub.
    Show answer & explanation

    Correct answers: A, C, EThey are appropriate for filtering, sorting, or paginating a collection without changing which resource is addressed.; They can be marked optional by setting `required: false` on the parameter.; The `queryString` node and `queryParameters` node are mutually exclusive on the same method.

    • A. This is correct because query parameters exist precisely to shape a collection response through filtering, sorting, or pagination while the underlying resource path stays the same.
    • B. This is incorrect because query parameters can be declared with `required: true` or `required: false`, and many real-world filters are intentionally optional.
    • C. This is correct because setting `required: false` is the standard way to mark a query parameter as optional, allowing a request to omit it entirely.
    • D. This is incorrect because identifying a single specific resource instance is the role of a URI parameter embedded in the path template, not a query parameter.
    • E. This is correct because the RAML 1.0 specification states that a method must use either `queryString` or `queryParameters` to describe its query, never both at once.
    • F. This is incorrect because deployment platform choices like CloudHub have no bearing on RAML's design-time distinction between query parameters and URI parameters; the two concepts remain independent regardless of where an API is deployed.

    Domain 3: Accessing and Modifying Mule Events

    Subdomain 3.2: Apply correct processors/DataWeave expressions to access and modify Mule event attributes, and predict outcomes.

    8.A Transform Message component converts the event payload into an array of order objects. Immediately afterward, a Set Payload component is configured with the DataWeave expression `payload[0].name`. What does the event's payload contain right after Set Payload executes?

    1. A.The name field value from the first object in the array, now set as the entire payload
    2. B.The full array of order objects, unchanged, because Set Payload cannot select individual elements
    3. C.A new array containing only the name field from every object in the original array
    4. D.An error, because indexing an array with [0] is not valid DataWeave 2.0 syntax
    Show answer & explanation

    Correct answer: AThe name field value from the first object in the array, now set as the entire payload

    • A. Set Payload replaces the payload with the result of its configured expression, and payload[0].name evaluates to the name value of the first array element.
    • B. Set Payload always replaces payload with the evaluated expression result; it does not leave the previous payload untouched.
    • C. The expression targets only the first element with [0], so it does not iterate across the whole array the way a map operation would.
    • D. Indexing with square brackets is standard DataWeave 2.0 syntax for accessing array elements by position.

    Subdomain 3.4: Apply correct processors/DataWeave expressions to enrich Mule events using Mule 4 connector targets, and predict outcomes.

    9.An HTTP Request operation is configured with its Target Variable set to `apiResponse`, but the Target Value field is left at its default setting. What value ends up stored in `vars.apiResponse`?

    1. A.The entire result of the HTTP Request operation, since the default Target Value expression resolves to the full response payload.
    2. B.Only the HTTP status code from the response attributes, because Target Value defaults to the status code for HTTP operations.
    3. C.An empty string, because a Target Value must be explicitly written or the variable is initialized blank.
    4. D.The response headers only, since the default behavior targets metadata rather than the response body.
    Show answer & explanation

    Correct answer: AThe entire result of the HTTP Request operation, since the default Target Value expression resolves to the full response payload.

    • A. When Target Value is left blank, it defaults to an expression equivalent to `#[payload]`, so the full response payload produced by the operation is what gets stored in the target variable.
    • B. This is incorrect; the default Target Value expression targets the payload, not the status code specifically. Capturing only the status code would require a custom Target Value expression referencing attributes.
    • C. This is incorrect because leaving Target Value at its default does not produce an empty result. A default expression is still applied and it evaluates to the operation's payload.
    • D. This is incorrect because the default Target Value expression is based on the payload of the operation's result, not the response headers or attributes.

    Domain 4: Structuring Mule Applications

    Subdomain 4.2: Specify when and how to pass events between flows and subflows using connectors and flow references, and predict outcomes.

    10.What is the primary purpose of the Flow Reference component in a Mule 4 application?

    1. A.Route the current event into another flow, run its processors, and return control here once complete.
    2. B.Publish the current message onto a queue so a separate flow can pick it up later without blocking the caller.
    3. C.Expose a flow as an HTTP endpoint so external systems can invoke it directly over the network.
    4. D.Register a flow with a scheduler so it runs automatically without any explicit invocation.
    Show answer & explanation

    Correct answer: ARoute the current event into another flow, run its processors, and return control here once complete.

    • A. This is correct: Flow Reference routes the current Mule event into the target flow, runs all of its processors synchronously, and then returns control back to the point right after the reference.
    • B. This describes asynchronous messaging through a connector like VM, not Flow Reference, which invokes another flow directly rather than publishing to a queue.
    • C. Exposing a flow over HTTP is the job of an HTTP Listener or an APIkit router acting as a message source, not an internal processor like Flow Reference.
    • D. Automatically triggering a flow on a schedule is the role of a Scheduler source, which is unrelated to invoking a flow from within another flow.

    Subdomain 4.1: Specify when and how to structure Mule applications into separate configuration and properties files, and predict outcomes.

    11.A project defines `<global-property name="logLevel" value="INFO"/>` and references it as `${logLevel}` in the logging configuration. Before deploying to CloudHub, the team adds a deployment property `logLevel=DEBUG` in Runtime Manager. What log level does the deployed application use?

    1. A.DEBUG, because a deployment property set at deploy time overrides the default supplied by a global property.
    2. B.INFO, because global properties always take precedence over properties added in Runtime Manager.
    3. C.Both levels are active at once, so the application logs at DEBUG and INFO simultaneously.
    4. D.The application fails to deploy, because a global property cannot share a name with a deployment property.
    Show answer & explanation

    Correct answer: ADEBUG, because a deployment property set at deploy time overrides the default supplied by a global property.

    • A. A global property only supplies a fallback value used when no higher-precedence source defines the same name, and deployment properties sit above global properties in Mule's resolution order. The deployment property set in Runtime Manager therefore wins, resolving `${logLevel}` to DEBUG.
    • B. This describes the reverse of the actual precedence order; a global property is the lowest-precedence, default-style source, not one that overrides values set at deploy time. Runtime Manager's deployment property takes priority instead.
    • C. A single placeholder resolves to exactly one value at runtime, so the logging configuration cannot apply two log levels simultaneously. Only the highest-precedence value is used.
    • D. Sharing a property name between a global property and a deployment property is expected and supported; it is precisely how overriding a default value is meant to work. It does not cause a deployment failure.

    Domain 5: Building API Implementation Interfaces

    Subdomain 5.1: Manually build API implementations from an API specification, RAML or not.

    12.The RAML resource `/orders`, action `post`, must be implemented differently depending on whether the request body is JSON or XML, while keeping a single resource and action declared in the specification. How should this be implemented with APIkit?

    1. A.Add two `apikit:flow-mapping` elements for the same resource and action, each with a different `content-type` attribute routing to its own flow.
    2. B.Add two separate `apikit:router` components in the same flow, one configured to accept JSON and the other to accept XML.
    3. C.Duplicate the `/orders` resource in the RAML file with a distinct path for each content type, then scaffold two independent flows.
    4. D.Add a single `apikit:flow-mapping` element and use a DataWeave `when` expression inside its `flow-ref` attribute to select the flow at runtime.
    Show answer & explanation

    Correct answer: AAdd two `apikit:flow-mapping` elements for the same resource and action, each with a different `content-type` attribute routing to its own flow.

    • A. The `content-type` attribute on `apikit:flow-mapping` is designed exactly for this case, letting the same resource and action route to different flows based on the incoming media type.
    • B. A flow is meant to contain a single router instance handling all incoming requests for its listener; adding multiple routers in one flow is not the supported mechanism for content-type-based dispatch.
    • C. Splitting the resource path in the RAML changes the contract itself and no longer keeps a single resource and action, which the requirement explicitly rules out.
    • D. The `flow-ref` attribute on `apikit:flow-mapping` takes a static flow name, not a dynamic DataWeave expression, so it cannot select a flow conditionally at runtime this way.

    Subdomain 5.2: Predict the results of APIkit based upon a RAML specification.

    13.A developer adds the following configuration inside the flow that contains the `apikit:router`: ```xml <apikit:flow-mapping resource="/invoices" action="get" flow-ref="retrieveInvoicesFlow" /> ``` When a GET request arrives for `/invoices`, which flow does the router invoke?

    1. A.The router invokes `retrieveInvoicesFlow`, since the flow-mapping explicitly overrides the default flow name for that action.
    2. B.The router still invokes `get:\invoices:api-config`, treating the flow-mapping element as purely cosmetic documentation.
    3. C.The router invokes both flows in sequence, chaining the default flow into the explicitly mapped flow.
    4. D.The router invokes no flow at all, since adding a flow-mapping element disables the `get` method for that resource.
    Show answer & explanation

    Correct answer: AThe router invokes `retrieveInvoicesFlow`, since the flow-mapping explicitly overrides the default flow name for that action.

    • A. The `apikit:flow-mapping` element exists specifically to override which flow handles a given resource and action, so a GET on `/invoices` is routed to `retrieveInvoicesFlow` instead of the auto-generated flow name.
    • B. The flow-mapping element is not cosmetic; it actively changes routing behavior, so the router does not fall back to the default generated flow name once a mapping is defined for that resource and action.
    • C. APIkit does not chain the default flow and the mapped flow together; defining a flow-mapping replaces the routing target rather than adding an extra step.
    • D. Defining a flow-mapping does not disable the method; it simply redirects that resource and action to a specific flow, so requests continue to be handled, just by a different flow.

    Subdomain 5.3: Implement correct responses based on a RAML specification, either manually or with APIkit.

    14.For a REST API implemented with APIkit, which of the following pairings of an APIkit-raised error type and its corresponding default HTTP status code are correct? (Select all that apply.)(Select 3)

    1. A.`APIKIT:UNSUPPORTED_MEDIA_TYPE` maps to HTTP `409`
    2. B.`APIKIT:BAD_REQUEST` maps to HTTP `400`
    3. C.`APIKIT:NOT_FOUND` maps to HTTP `400`
    4. D.`APIKIT:METHOD_NOT_ALLOWED` maps to HTTP `405`
    5. E.`APIKIT:NOT_IMPLEMENTED` maps to HTTP `500`
    6. F.`APIKIT:NOT_ACCEPTABLE` maps to HTTP `406`
    Show answer & explanation

    Correct answers: B, D, F`APIKIT:BAD_REQUEST` maps to HTTP `400`; `APIKIT:METHOD_NOT_ALLOWED` maps to HTTP `405`; `APIKIT:NOT_ACCEPTABLE` maps to HTTP `406`

    • A. `APIKIT:UNSUPPORTED_MEDIA_TYPE` corresponds to HTTP 415, not 409, so this pairing is incorrect.
    • B. `APIKIT:BAD_REQUEST` is the error APIkit raises for request validation failures against the RAML spec, and it maps to HTTP 400 by default.
    • C. `APIKIT:NOT_FOUND` corresponds to HTTP 404 for an undefined resource path, not 400, so this pairing is incorrect.
    • D. `APIKIT:METHOD_NOT_ALLOWED` is raised when a resource exists in the RAML spec but the requested HTTP method isn't defined for it, and it maps to HTTP 405 by default.
    • E. `APIKIT:NOT_IMPLEMENTED` corresponds to HTTP 501, not 500, so this pairing is incorrect.
    • F. `APIKIT:NOT_ACCEPTABLE` is raised when the requested representation in the `Accept` header can't be satisfied, and it maps to HTTP 406 by default.

    Domain 6: Using Connectors

    Subdomain 6.1: Apply correct processors/syntax to connect to databases, and predict outcomes.

    15.A flow receives a list of 500 customer records as its payload and passes it to a Database Insert operation with Bulk mode enabled and a parameterized insert statement that references fields from each record. What does the operation return after execution?

    1. A.An array of integers, one per record, indicating the number of rows each individual insert affected
    2. B.A single integer representing the total number of records successfully inserted across the whole batch
    3. C.A list of the generated primary key values for every newly inserted customer record
    4. D.A boolean flag that is true only if every one of the 500 inserts succeeded without error
    Show answer & explanation

    Correct answer: AAn array of integers, one per record, indicating the number of rows each individual insert affected

    • A. Bulk mode executes the insert statement once per input record and returns an array of affected-row counts, with one entry per executed statement. For a list of 500 records this produces an array of 500 integers, matching how JDBC batch execution reports results.
    • B. The operation does not collapse the per-statement results into a single summary integer; it preserves one result per executed statement in the batch. A single total count would discard the per-record detail that bulk execution reports.
    • C. Bulk mode does not automatically collect generated keys into a return value the way this option describes; its output is the array of affected-row counts from the batch execution. Retrieving generated keys would require separate configuration, not the default bulk result.
    • D. The operation does not reduce the outcome to a single success/failure flag; each statement in the batch reports its own affected-row count. A boolean summary would hide which specific records succeeded or failed within the batch.

    Subdomain 6.2: Apply correct processors/syntax to connect to files or FTP servers, and predict outcomes.

    16.A Mule flow uses the File connector's Write operation with the default write mode against a target file that already exists on disk. What happens to the existing file content when the operation executes?

    1. A.The new payload is appended to the end of the existing content, since APPEND is the default write mode
    2. B.The existing content is replaced entirely with the new payload, since OVERWRITE is the default write mode
    3. C.The operation throws FILE:FILE_ALREADY_EXISTS, since CREATE_NEW is the default write mode
    4. D.The operation pauses and waits for a lock to release before writing any content to the file
    Show answer & explanation

    Correct answer: BThe existing content is replaced entirely with the new payload, since OVERWRITE is the default write mode

    • A. APPEND is a selectable write mode but is not the default, so content is not appended unless the mode parameter is explicitly set to APPEND.
    • B. OVERWRITE is the default write mode for the File connector's Write operation, so an existing target file is fully replaced by the new payload content.
    • C. CREATE_NEW is a selectable write mode that raises FILE:FILE_ALREADY_EXISTS when the target exists, but it is not the mode applied unless explicitly configured.
    • D. The Write operation does not pause for lock release by default; locking behavior is a separate, explicitly configured concern and does not describe the default write outcome.

    Subdomain 6.3: Apply correct processors/syntax to retrieve and combine data in the middle of a flow, and predict outcomes.

    17.A flow needs to combine data from an HTTP Request call and a Database Select call into a single JSON payload for the response, without either operation clobbering the other's result. Which approach achieves this correctly?

    1. A.Configure `target` on both the HTTP Request and Database Select operations to store each result in its own variable, then merge both variables into the payload with a Transform Message component.
    2. B.Chain the operations directly, letting the Database Select operation overwrite the payload from the HTTP Request, then reconstruct the HTTP data manually inside the Select operation's SQL query.
    3. C.Wrap both operations inside a single Try scope, since the Try scope automatically merges the payload outputs of every component nested within it into one combined result.
    4. D.Place both operations inside a For Each scope so each loop iteration merges the HTTP response and the database rows directly into the same shared payload variable.
    Show answer & explanation

    Correct answer: AConfigure `target` on both the HTTP Request and Database Select operations to store each result in its own variable, then merge both variables into the payload with a Transform Message component.

    • A. Giving each operation its own `target` variable avoids either one overwriting the other's result, and a Transform Message component can then reference both variables to build the combined payload — this is the standard mid-flow combination pattern.
    • B. Chaining without targets lets the Select operation overwrite the HTTP response payload, and a SQL query string has no way to reconstruct arbitrary HTTP response data that has already been discarded.
    • C. A Try scope exists to isolate and handle errors from nested components; it has no built-in feature that merges the payload outputs of the components inside it.
    • D. For Each is built to iterate over a collection, and there is no collection to iterate over here; using it would not merge two independent operation results, it would just overwrite the shared variable on each pass.

    Domain 7: Processing Records

    Subdomain 7.1: Apply correct processors/syntax to process individual records in a collection using For Each scopes, and predict outcomes.

    18.A developer wants to accumulate a running total of order amounts as a For Each scope iterates over an array of order records. Before the scope, a flow variable `runningTotal` is initialized to 0. Inside the scope, an expression component updates `runningTotal` by adding the current record's amount. What is true about `runningTotal` after the For Each scope completes?

    1. A.It holds the sum of all processed order amounts, because variables persist across iterations and after the scope ends
    2. B.It resets to 0 immediately after the scope completes, because For Each variables are scoped only to the loop
    3. C.It holds only the amount from the final record, because each iteration overwrites the variable with a fresh value
    4. D.It becomes unavailable outside the scope, because For Each variables cannot be referenced after the loop
    Show answer & explanation

    Correct answer: AIt holds the sum of all processed order amounts, because variables persist across iterations and after the scope ends

    • A. Variables set or modified inside a For Each scope carry their state forward across iterations and remain available after the loop finishes, which is exactly what allows an accumulator pattern like a running total to work correctly.
    • B. For Each does not reset variables to their pre-loop values once it finishes; variables are not scoped exclusively to the loop's lifetime, so this reset behavior does not occur.
    • C. This would be true only if the expression replaced the variable each time instead of adding to it. Since the update adds the current amount to the existing value, the variable accumulates rather than being overwritten with just the last record's amount.
    • D. Flow variables modified inside a For Each scope remain accessible in the flow after the scope completes; they are not removed or scoped away once iteration ends.

    Subdomain 7.2: Apply correct processors/syntax to process individual records in a collection using batch scopes, and predict outcomes.

    19.Which two statements accurately describe how a Batch Job processes records during the Process Records phase? (Choose two.)(Select 2)

    1. A.Batch Step components pull blocks of records from the queue and can process multiple blocks concurrently on separate threads.
    2. B.Records within a single block are processed sequentially through the Batch Step's configured operations.
    3. C.Each Batch Step waits for every record in the entire batch to finish the previous step before processing any block.
    4. D.The Load and Dispatch phase repeats for every Batch Step to re-split the original message into fresh records.
    5. E.A record must pass through every configured Batch Step, in the same fixed order, before the next record can start processing.
    6. F.Mule generates the final success and failure report as soon as the first Batch Step finishes, before later steps run.
    Show answer & explanation

    Correct answers: A, BBatch Step components pull blocks of records from the queue and can process multiple blocks concurrently on separate threads.; Records within a single block are processed sequentially through the Batch Step's configured operations.

    • A. Batch Steps pull record blocks from the queue and process multiple blocks in parallel across threads, which is what allows a batch job to process large record sets efficiently rather than one record at a time end to end.
    • B. Within a given block, the records are handled sequentially through the step's operations even though separate blocks run concurrently on different threads. This combination of parallel blocks and sequential in-block handling is standard Batch Step behavior.
    • C. A Batch Step does not wait for the entire batch to clear the previous step before starting; blocks move forward as they become available, which is why blocks can be processed concurrently in the first place.
    • D. The Load and Dispatch phase runs once at the start of the batch job to split the input into records; it is not repeated for each subsequent Batch Step, which instead operate on records already queued.
    • E. Records do not process one at a time end to end through every step before the next record begins; instead, blocks of many records move through steps concurrently, which is what gives batch processing its throughput.
    • F. The final report is compiled in the On Complete phase after all configured Batch Steps have finished running, not as soon as the first step completes.

    Subdomain 7.4: Apply correct processors/syntax to persist data between flow executions.

    20.A flow retrieves a running total counter from an Object Store at the start of each execution using the Retrieve operation. On the very first execution, the counter key does not exist yet, and the developer wants the flow to continue with a starting value of `0` instead of failing with `OS:KEY_NOT_FOUND`. Which approach achieves this?

    1. A.Configure the `defaultValue` parameter on the Retrieve operation to `0`, which is returned when the key is absent without being persisted
    2. B.Configure the `failIfPresent` parameter on the Retrieve operation to `false`, which returns `0` when the key is absent
    3. C.Wrap the Retrieve operation in a Try scope that catches `OS:KEY_NOT_FOUND` and stores `0` as the new value before continuing
    4. D.Configure the `entryTtl` parameter on the Retrieve operation to `0`, which returns an empty value instead of raising an error
    Show answer & explanation

    Correct answer: AConfigure the `defaultValue` parameter on the Retrieve operation to `0`, which is returned when the key is absent without being persisted

    • A. `defaultValue` is the Retrieve parameter built for a missing key: it returns the supplied fallback, here `0`, without ever writing that fallback into the store, so the flow keeps running with a sensible starting value.
    • B. `failIfPresent` is a Store-side parameter that controls overwrite behavior for existing keys; Retrieve has no such parameter, so this configuration does not exist and would not prevent the missing-key error.
    • C. Catching the error and writing an initial value would eventually work, but it requires extra error-handling logic and an additional Store call on every first run, when the built-in default-value behavior already covers the case directly.
    • D. `entryTtl` governs how long stored entries remain before expiring; it is not a Retrieve-time fallback and setting it to `0` does not suppress the missing-key error.

    Domain 8: Transforming Data

    Subdomain 8.1: Convert between output types and data types using DataWeave.

    21.A Mule flow receives a JSON payload where the field `orderTotal` arrives as the string `"149.99"`. A downstream Set Variable component must store this as a numeric value so a later expression can perform arithmetic on it. Which DataWeave expression correctly coerces the field to a numeric type?

    1. A.payload.orderTotal as Number
    2. B.payload.orderTotal to Number
    3. C.Number(payload.orderTotal)
    4. D.payload.orderTotal cast Number
    Show answer & explanation

    Correct answer: Apayload.orderTotal as Number

    • A. The `as` operator is the correct DataWeave mechanism for type coercion, so writing the selector followed by `as Number` converts the string value into a numeric type that supports arithmetic.
    • B. `to` is not a DataWeave coercion keyword; DataWeave has no infix `to` operator for converting a value's type, so this expression does not compile.
    • C. DataWeave does not use function-call syntax like `Number(...)` for type coercion; wrapping a selector in parentheses this way is not valid DataWeave syntax for changing a value's type.
    • D. `cast` is not a reserved keyword or operator in DataWeave; the language reserves `as` specifically for coercing a value from one type to another.

    Subdomain 8.3: Apply correct syntax to write DataWeave transformations to coerce, format, order, and filter data, and predict outcomes.

    22.A DataWeave transform receives `payload.orderDate` as the string `"15-01-2024"` and must produce a `Date` value in the output. Which expression correctly coerces the string to a `Date` using the source format?

    1. A.payload.orderDate as Date {format: "dd-MM-yyyy"}
    2. B.payload.orderDate as Date {format: "yyyy-MM-dd"}
    3. C.payload.orderDate to Date {format: "dd-MM-yyyy"}
    4. D.Date.parse(payload.orderDate, "dd-MM-yyyy")
    Show answer & explanation

    Correct answer: Apayload.orderDate as Date {format: "dd-MM-yyyy"}

    • A. The `as` operator is the correct DataWeave coercion operator, and the `{format: "dd-MM-yyyy"}` schema matches the day-month-year pattern of the source string, so the value parses into a valid `Date`.
    • B. The format schema `"yyyy-MM-dd"` describes a year-first pattern that does not match the source string's day-first layout, so parsing fails against the actual data.
    • C. `to` is not a valid DataWeave coercion operator; type coercion in DataWeave is expressed with `as` followed by the target type and an optional schema.
    • D. This function-call style is not valid DataWeave syntax for type coercion; DataWeave expresses coercion through the `as` operator rather than a `Date.parse` function call.

    Subdomain 8.2: Predict the result of core DataWeave functions.

    23.A flow's payload is: ``` [ {"name": "Ana", "role": "ADMIN"}, {"name": "Bob", "role": "USER"}, {"name": "Cara", "role": "ADMIN"}, {"name": "Dan", "role": "USER"} ] ``` A Transform Message component applies: ``` %dw 2.0 output application/json --- payload filter ($.role == "ADMIN") ``` What does the transform output?

    1. A.[{"name": "Ana", "role": "ADMIN"}, {"name": "Cara", "role": "ADMIN"}]
    2. B.[{"name": "Bob", "role": "USER"}, {"name": "Dan", "role": "USER"}]
    3. C.[{"name": "Ana", "role": "ADMIN"}, {"name": "Bob", "role": "USER"}]
    4. D.[{"name": "Cara", "role": "ADMIN"}, {"name": "Dan", "role": "USER"}]
    Show answer & explanation

    Correct answer: A[{"name": "Ana", "role": "ADMIN"}, {"name": "Cara", "role": "ADMIN"}]

    • A. This is correct because `filter` evaluates the condition `$.role == "ADMIN"` against every object and keeps only the elements where that condition is true, which are the two objects whose `role` equals `ADMIN`.
    • B. This is incorrect because it keeps the objects whose `role` is `USER`, which is the opposite of what the condition `$.role == "ADMIN"` selects; `filter` retains elements that satisfy the expression, not the ones that fail it.
    • C. This is incorrect because it simply takes the first two elements of the input array regardless of their `role` value; `filter` evaluates the boolean condition against each element rather than truncating the array by position.
    • D. This is incorrect because it takes the last two elements of the input array by position rather than evaluating each element's `role` against the condition; one of the retained objects here does not even satisfy `$.role == "ADMIN"`.

    Subdomain 8.4: Call Mule flows from a DataWeave script.

    24.What is the primary purpose of the DataWeave `lookup` function in a Mule 4 application?

    1. A.It queries values defined in an external `.properties` configuration file referenced by the running application.
    2. B.It invokes a top-level flow from inside a DataWeave script and returns that flow's resulting payload to the caller.
    3. C.It validates the DataWeave script's syntax against the target flow's expected input structure before deployment.
    4. D.It registers the DataWeave script as a reusable module that other flows can import with the `import` directive.
    Show answer & explanation

    Correct answer: BIt invokes a top-level flow from inside a DataWeave script and returns that flow's resulting payload to the caller.

    • A. This describes reading property placeholders such as `${propertyName}`, which is unrelated to invoking a flow from a DataWeave expression. The `lookup` function does not read configuration property files.
    • B. This is correct: `lookup` executes a named top-level flow, passing a payload to it, and returns that flow's resulting payload back into the calling DataWeave script. This lets a Transform Message component trigger flow execution as part of a transformation.
    • C. DataWeave scripts are not validated against a flow's input structure at design time by this function. `lookup` performs a runtime flow invocation, not a static compatibility check.
    • D. Reusable DataWeave modules are created and shared through the `import` directive with `.dwl` files, which is a separate mechanism from invoking a Mule flow. `lookup` does not register or package scripts as modules.

    Subdomain 8.5: Define, use, and reuse DataWeave modules, functions, and variables, and predict outcomes.

    25.Where must a custom DataWeave module `.dwl` file be placed in a Mule project so it can be imported with `import modules::ModuleName`?

    1. A.src/main/resources/modules
    2. B.src/main/java/modules
    3. C.src/main/app/modules
    4. D.src/test/resources/modules
    Show answer & explanation

    Correct answer: Asrc/main/resources/modules

    • A. Custom DataWeave modules are placed in a `modules` subfolder of `src/main/resources`, which is the location the runtime scans when resolving `import modules::ModuleName` references.
    • B. `src/main/java` is a Java source location and is not scanned by Mule for DataWeave module resolution, so a `.dwl` file placed there would not be importable this way.
    • C. There is no standard `src/main/app` folder used for DataWeave modules in a Mule project structure, so this path does not make the module available.
    • D. `src/test/resources` is scoped to test execution, not the main application classpath, so a module placed there is not available to application flows via this import.

    Domain 9: Routing Events

    Subdomain 9.1: Apply correct processors/syntax to route messages using DataWeave conditions within a choice router, and predict outcomes.

    26.A choice router routes batch import files based on record count: ``` <choice> <when expression="#[sizeOf(payload.records) == 0]"> <flow-ref name="emptyBatchFlow" /> </when> <when expression="#[sizeOf(payload.records) > 1000]"> <flow-ref name="largeBatchFlow" /> </when> <otherwise> <flow-ref name="standardBatchFlow" /> </otherwise> </choice> ``` An event arrives where `payload.records` is an array containing `250` elements. Which route processes this event?

    1. A.`standardBatchFlow`, because `250` satisfies neither the empty-array condition nor the large-batch condition, so the default route runs.
    2. B.`emptyBatchFlow`, because `sizeOf` returns `0` for any array that has not yet been fully streamed into memory.
    3. C.`largeBatchFlow`, because the router compares `250` against the nearest configured numeric threshold rather than each condition in order.
    4. D.Both `emptyBatchFlow` and `standardBatchFlow` execute, because `sizeOf` produces a range of matching values for mid-sized arrays.
    Show answer & explanation

    Correct answer: A`standardBatchFlow`, because `250` satisfies neither the empty-array condition nor the large-batch condition, so the default route runs.

    • A. `sizeOf(payload.records) == 0` is `false` because the array has 250 elements, and `sizeOf(payload.records) > 1000` is also `false` because 250 does not exceed 1000, so neither `when` condition matches and the `otherwise` route runs.
    • B. `sizeOf` returns the actual element count of the array regardless of streaming state; for an array of 250 elements it returns `250`, not `0`, so the empty-array condition evaluates to `false`.
    • C. The router does not compare a value against thresholds to find the nearest match; each `when` condition is an independent boolean check evaluated in declared order, and `250 > 1000` simply evaluates to `false`.
    • D. `sizeOf` returns a single numeric value for a given array, not a range, and a choice router only ever executes one route per event regardless of how many conditions might seem plausible.

    Subdomain 9.2: Apply correct processors/syntax to scatter and gather messages, and predict outcomes.

    27.A route inside a Scatter-Gather sets a variable named `region` to `"EMEA"`, and a second route sets the same variable named `region` to `"APAC"`. After the Scatter-Gather completes, what is the value of `vars.region` in the merged event?

    1. A.Only `"APAC"`, because the last route to finish always overwrites the variable.
    2. B.A list containing both assigned values, such as `["EMEA", "APAC"]` in vars.region.
    3. C.Only `"EMEA"`, because the first configured route always takes precedence.
    4. D.An error, because two routes are not permitted to set the same variable name.
    Show answer & explanation

    Correct answer: BA list containing both assigned values, such as `["EMEA", "APAC"]` in vars.region.

    • A. Route completion order does not determine the merged value; each route starts from an identical copy of the event, so there is no overwrite based on finishing last.
    • B. When multiple routes set the same variable to different values, Scatter-Gather merges them into a single list containing every value set across the routes.
    • C. Route configuration order in the XML does not give one route precedence over another for variable merging; both values are combined rather than one being dropped.
    • D. Setting the same variable name in multiple routes is valid and does not raise an error; Scatter-Gather is designed to merge such conflicting values into a list.

    Subdomain 9.3: Apply correct processors/syntax to validate Mule events, and predict outcomes.

    28.Which Validation module operation is designed to test whether a string value conforms to a regular expression pattern?

    1. A.`matches-regex`
    2. B.`is-not-blank-string`
    3. C.`validate-size`
    4. D.`is-allowed-ip`
    Show answer & explanation

    Correct answer: A`matches-regex`

    • A. Correct. `matches-regex` compares a string value against a configured regular expression pattern and raises a validation error if the value does not match, making it the operation used for pattern-based format checks.
    • B. Incorrect. `is-not-blank-string` only confirms that a string contains non-whitespace content; it has no concept of matching a regular expression pattern.
    • C. Incorrect. `validate-size` checks that a value's length or size falls within configured minimum and maximum bounds, which is unrelated to regex pattern matching.
    • D. Incorrect. `is-allowed-ip` checks whether an IP address appears in a configured allow list; it does not evaluate string values against a regular expression.

    Domain 10: Handling Errors

    Subdomain 10.1: Apply correct processors/syntax to implement global error handlers, and predict outcomes.

    29.A developer wants every flow in a Mule application to share one error-handling strategy without repeating the same `on-error` blocks in each flow's own error handler. Which approach correctly achieves this?

    1. A.Define an `<error-handler>` at the top level of the config, then reference its name from each flow's error handler
    2. B.Wrap the contents of every flow in its own Try scope so each flow repeats the same inline error strategy separately
    3. C.Add a `logger` component after each flow's source so every flow writes matching error output to one log file
    4. D.Place one `on-error-continue` block inside a single flow, expecting Mule to reuse it across every other flow
    Show answer & explanation

    Correct answer: ADefine an `<error-handler>` at the top level of the config, then reference its name from each flow's error handler

    • A. Correct. Declaring a named `<error-handler>` as a top-level (global) element and referencing it from individual flows lets multiple flows reuse the same set of On-Error blocks instead of duplicating the handling logic in each flow.
    • B. Incorrect. A Try scope defines its own inline error handler for the components it wraps and must be added separately to each flow; it does not create a shared, reusable configuration referenced across flows the way a global error handler does.
    • C. Incorrect. A `logger` component only writes messages to the application log and has no role in catching, matching, or handling raised errors.
    • D. Incorrect. Error handlers are scoped to the flow or Try/Until Successful scope where they are declared; Mule does not automatically extend one flow's error handler to unrelated flows.

    Subdomain 10.3: Apply correct processors/syntax to combine multiple error handlers, and predict outcomes.

    30.A flow's `error-handler` contains three `on-error-propagate` components, each with a different `type`, but none of their types matches an `EXPRESSION` error raised by a Transform Message component. What is the outcome?

    1. A.None of the declared components match, so the error is treated as unhandled and propagates to the caller by default.
    2. B.Mule automatically falls back to the first declared component even though its type does not match the raised error.
    3. C.The flow silently completes as successful because no handler explicitly matched the error.
    4. D.Mule raises a deployment-time validation error because every possible error type must be covered by a handler.
    Show answer & explanation

    Correct answer: ANone of the declared components match, so the error is treated as unhandled and propagates to the caller by default.

    • A. Correct. When no on-error component in the error-handler matches the raised error's type, none of them handles it, and Mule falls back to default behavior, which logs the error and propagates it up to the calling context just as if no error-handler had matched.
    • B. Incorrect. Mule never selects a handler whose type does not match the raised error just because it happens to be declared first; a component is only invoked when its type condition is satisfied.
    • C. Incorrect. An unmatched error is not silently swallowed. Only on-error-continue handlers that actually match produce a successful outcome; an unmatched error still results in a failure that propagates.
    • D. Incorrect. Mule does not require exhaustive coverage of every error type at deployment time; an incomplete error-handler is valid configuration and simply results in default propagation for unmatched errors at runtime.

    Subdomain 10.2: Apply correct processors/syntax to implement on-error continue and on-error propagate handlers, and predict outcomes.

    31.A flow calls a downstream HTTP API through an HTTP Requester. The flow's error handler contains a single `on-error-continue` block that matches `HTTP:CONNECTIVITY` and sets a fallback payload. When the downstream API is unreachable, what does the client that invoked this flow via an HTTP Listener receive?

    1. A.A 200 response carrying the fallback payload set inside the on-error-continue block
    2. B.A 500 response because the original HTTP:CONNECTIVITY error is re-raised to the listener
    3. C.No response returns, because on-error-continue closes the connection without a body
    4. D.A 404 response, since Mule maps HTTP:CONNECTIVITY errors to that status by default
    Show answer & explanation

    Correct answer: AA 200 response carrying the fallback payload set inside the on-error-continue block

    • A. on-error-continue marks the error as handled and lets the flow finish as if the original request had succeeded, so the message that exits the error handler - here, the fallback payload - becomes the flow's outcome and is returned by the HTTP Listener as a successful response.
    • B. A 500 response would only occur if the error propagated to the listener unhandled, which happens with on-error-propagate, not on-error-continue; continue swallows the error instead of re-raising it.
    • C. on-error-continue does not close the connection or suppress the body; it produces a normal completed response built from whatever message exits the handler block.
    • D. Mule does not auto-map error types to arbitrary HTTP status codes such as 404; the status returned depends on how the flow completes, and a continue handler that finishes successfully returns 200 by default.

    Subdomain 10.5: Apply correct processors/syntax to map custom errors, and predict outcomes.

    32.An HTTP Listener flow raises `HTTP:NOT_FOUND` when a requested record does not exist. The flow's `error-handler` has an `on-error-continue` block that logs the error and sets the payload to an error message, but never sets the HTTP response status code. What status code does the client receive?

    1. A.200 OK, because `on-error-continue` treats the flow as having succeeded unless the handler explicitly sets a different status code.
    2. B.404 Not Found, because `on-error-continue` automatically preserves the original error's HTTP status code for the response.
    3. C.500 Internal Server Error, because `on-error-continue` always defaults to a server error status when no status is set explicitly.
    4. D.No response reaches the client, because `on-error-continue` terminates the HTTP transaction before a response can be built.
    Show answer & explanation

    Correct answer: A200 OK, because `on-error-continue` treats the flow as having succeeded unless the handler explicitly sets a different status code.

    • A. On Error Continue completes the flow as if the original error never happened, so the HTTP Listener builds a normal success response. Unless the handler explicitly sets `httpStatus`, the listener sends back its default success code, 200, even though the underlying cause was a not-found condition.
    • B. On Error Continue does not carry the original error's status code forward automatically; it discards the error state as part of completing the flow successfully. Preserving `HTTP:NOT_FOUND` as 404 would require the handler to set the status explicitly.
    • C. There is no built-in default that maps an unset status to a server error; On Error Continue simply lets the listener fall back to its success status. A 500 response would only occur if the handler itself failed or explicitly set that code.
    • D. On Error Continue keeps processing rather than aborting the transaction, and the flow still completes and returns a response to the client. The HTTP transaction is not left hanging or dropped.

    Domain 11: Debugging and Troubleshooting Mule Applications

    Subdomain 11.1: Identify root causes for errors when debugging Mule applications, and predict outcomes.

    33.During a code review, a colleague points out that the flow relies entirely on `error.description` in a custom error-handling script to decide retry logic, but the script is misclassifying errors because the description text varies between environments. What is the most likely root cause of this misclassification?

    1. A.The description text is meant for human-readable diagnostics and is not guaranteed to be stable, so matching logic should use `error.errorType` instead
    2. B.The script is missing a `<try>` scope, which is the only component capable of producing a consistent error description
    3. C.Mule regenerates a new random `error.description` value on every retry attempt regardless of the underlying cause
    4. D.The application's `error-handler` element was declared at the application level instead of the flow level
    Show answer & explanation

    Correct answer: AThe description text is meant for human-readable diagnostics and is not guaranteed to be stable, so matching logic should use `error.errorType` instead

    • A. Correct. `error.description` is intended as a human-readable problem description and its exact wording can vary; matching or routing logic that needs a stable category should key off `error.errorType`, which is designed for that purpose.
    • B. Incorrect. A Try scope provides its own isolated error handler, but it has no special role in generating or stabilizing the text of `error.description`; adding one would not fix inconsistent description matching.
    • C. Incorrect. Mule does not randomize `error.description` between retries; the field reflects the actual problem encountered, and any variation across environments stems from genuinely different underlying conditions or messages, not randomization.
    • D. Incorrect. Whether an error-handler is declared at the application or flow level affects which handler catches the error, not the stability or content of the `error.description` text used inside a script.

    Domain 12: Deploying and Managing APIs and Integrations

    Subdomain 12.1: Deploy applications to CloudHub.

    34.A developer has finished building a Mule application in Anypoint Studio and wants to deploy it straight to CloudHub without leaving the IDE. Which action accomplishes this?

    1. A.Right-click the project and choose Anypoint Platform > Deploy to CloudHub
    2. B.Export the project as a Mule deployable archive and upload it through the API Manager proxy wizard
    3. C.Run the Anypoint CLI login command from the Studio terminal and wait for auto-sync
    4. D.Publish the project to Anypoint Exchange and let Runtime Manager pick it up automatically
    Show answer & explanation

    Correct answer: ARight-click the project and choose Anypoint Platform > Deploy to CloudHub

    • A. Anypoint Studio has a built-in Deploy to CloudHub action on the project context menu that packages the application and deploys it directly to CloudHub, prompting for deployment target and worker settings in the IDE.
    • B. API Manager's proxy wizard is used to deploy a generated API proxy, not a developer's own Mule application archive, so this path does not deploy the built application.
    • C. Authenticating with the Anypoint CLI lets a developer later run explicit deploy commands, but logging in alone does not deploy anything and there is no automatic sync from a Studio terminal session.
    • D. Publishing to Exchange makes an asset discoverable and reusable, but Runtime Manager does not automatically deploy Exchange assets without an explicit deployment action being triggered.

    Subdomain 12.2: Manage APIs using separate proxies and auto-discovery.

    35.A developer configures API Autodiscovery in a Mule 4 application but sets `flowRef` to a flow whose source component is a JMS listener rather than an HTTP Listener. What is the most likely outcome?

    1. A.Policy enforcement fails because the referenced flow must use an HTTP Listener component.
    2. B.Autodiscovery succeeds because any inbound connector satisfies the `flowRef` requirement in Mule 4.
    3. C.API Manager automatically converts the JMS listener into an HTTP Listener during deployment.
    4. D.The application deploys normally, but analytics data is duplicated across two separate API instances.
    Show answer & explanation

    Correct answer: APolicy enforcement fails because the referenced flow must use an HTTP Listener component.

    • A. Autodiscovery requires the referenced flow to use an HTTP Listener because policy enforcement relies on intercepting HTTP traffic. A JMS-sourced flow does not meet this requirement, so pairing and policy enforcement do not work correctly.
    • B. Not every inbound connector satisfies the `flowRef` requirement; connectors that only use HTTP as an underlying transport, or non-HTTP connectors like JMS, are unsupported for policy enforcement. This makes the configuration invalid rather than merely non-optimal.
    • C. Mule Runtime does not rewrite or convert connector types during deployment to satisfy autodiscovery requirements. The developer must point `flowRef` at a flow that already uses an HTTP Listener.
    • D. An invalid `flowRef` does not create a duplicate API instance; it simply prevents the pairing and policy enforcement from functioning as intended. Analytics duplication is not a documented behavior of a misconfigured autodiscovery element.

    Want the full experience?

    These are just samples. Practice the full Salesforce Certified MuleSoft Developer question bank in quiz mode — free, no signup, with domain practice and exam simulation.