Loadingβ¦
Six converter steps turn a payload into a different format without a line of code. Chain four of them CSV β XML β JSON and back, run them backwards, then deliberately break them and read the error.
A converter changes the format of the payload without changing what it says. The same order, expressed as CSV instead of XML. No mapping, no script β you drop the step in, point it at the shape of your data, and the body comes out the other side in a different notation.
Open the Converter palette and you will find six of them. Look at the names and something jumps out: every single one has XML on one side.
There is no CSV-to-JSON converter, and there never will be. If you searched for one, that is the answer: XML is the hub, and anything-to-anything means two steps through it. CSV in, XML in the middle, JSON out. That is not a limitation to work around β it is the design, and once you see it the palette stops looking arbitrary.
The other thing worth knowing before you start: converting JSON is not symmetrical. One record becomes an object, several become an array, and the same converter produces a different shape depending on how many rows happened to arrive that day. That is the trap this lab walks you into on purpose in Task 2, because it is far better to meet it here than in production on a quiet Tuesday when only one order came through.
In this lab you will chain four converters in both directions, then deliberately break three payloads and name the error from the symptom alone β which is the skill that actually saves you time later.
Look at the six entries in the Converter palette and one thing jumps out: every single one has XML on one side. There is no CSV-to-JSON converter, and there never will be β everything routes through XML.
| Converter step | Direction | In this lab |
|---|---|---|
| CSV to XML | flat file → hub | Task 1 |
| XML to JSON | hub → REST | Task 2 |
| JSON to XML | REST → hub | Task 3 |
| XML to CSV | hub → flat file | Task 4 |
| EDI ↔ XML | B2B | Out of scope |
| Item | Why |
|---|---|
| Lab 01 β Content Modifier | You reuse the sender-with-no-receiver trick and Content Modifier headers. |
CPI trial tenant + ESBMessaging.send | To create three flows and deploy them. |
| Postman | Send raw text/csv, application/json, application/xml and read the response. |
Training_Converters_XX and three flows: Conv_A_CSV_to_JSON, Conv_B_JSON_to_XML, Conv_C_XML_to_CSV./conv-a-XX, /conv-b-XX, /conv-c-XX), ESBMessaging.send, no receiver, Log Level Trace.The CSV converter cannot guess a structure β you hand it one. Writing that little XSD is the whole lesson.
| Field | Value |
|---|---|
| XML Schema | Orders.xsd (add it to the flow resources) |
| Path to Target Element | /Orders/Order |
| Field Separator | , |
<Order> elements, six children each, values in the right elements. If a SKU lands inside <CustomerId>, your XSD element order does not match the column order.Why is Quantity a string, not a number? · 5 marks. A CSV file carries no type information at all.
Two converters back to back give CSV→JSON, which no single step can do. Then you meet the behaviour that breaks more REST integrations than any other.
Order is an array. POST one row → it is an object. With a single occurrence the XML looks like a non-repeating element, so the converter emits no array β and an API expecting [ ] rejects it.Write it up · 8 marks. Paste both responses, say why the shape changed, and name one way to force an array every time.
This converter needs no schema β JSON already describes its structure. It has one hard rule, and you hit it on purpose.
Deliverable · 8 marks. Copy the error text from Monitor → Error Details and describe the fix if a partner really sent that payload.
Going out to a file share means flattening. Here you point the converter at the repeating element yourself β no schema needed.
| Field | Value |
|---|---|
| Path to Source Element | /Orders/Order |
| Field Separator | , |
| Include Field Names as Headers | tick it |
Then probe the limit · 8 marks. Wrap a nested element inside one <Order> and send it again. Report what happened to the nested data and why a CSV row cannot represent it.
Every one of these arrives in real projects most weeks. Telling them apart from the symptom is the skill this lab builds.
<Order> elements. Fix it in the converter.[ ] and gets { }.SO-100234,2026-09-01,CUST-8891,BIKE-RD-54,2,899.00
SO-100234,2026-09-01,CUST-8891,HELM-BLK-M,2,79.50
SO-100235,2026-09-02,CUST-4410,BIKE-GR-56,1,1249.00<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Orders"><xs:complexType><xs:sequence>
<xs:element name="Order" maxOccurs="unbounded"><xs:complexType><xs:sequence>
<xs:element name="OrderNumber" type="xs:string"/>
<xs:element name="OrderDate" type="xs:string"/>
<xs:element name="CustomerId" type="xs:string"/>
<xs:element name="Sku" type="xs:string"/>
<xs:element name="Quantity" type="xs:string"/>
<xs:element name="NetPrice" type="xs:string"/>
</xs:sequence></xs:complexType></xs:element>
</xs:sequence></xs:complexType></xs:element>
</xs:schema>Task 5 has three right-ish answers β post yours and see how others fixed the European export.