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.
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.