...
Tip |
---|
Note that if you edit an API's synapse configuration as mentioned in this guide and then go back to the API Publisher and save the API, your changes will be overwritten. As a resultTherefore, we do not recommend changing the API's synapse configuration directly. The recommended way to extend an API's mediation flow is by engaging In /Out sequences. |
Also see the following sections in the WSO2 ESB documentation. WSO2 ESB is used to implement the API Gateway through which API messages are transformed:
There are two types of message builders and formatters for JSON. The default builder and formatter keep the JSON representation intact without converting it to XML. You can access the payload content using the JSON Path or XPath and convert the payload to XML at any point in the mediation flow.
...
Note |
---|
When you modify the builders/formatters in Axis2 configuration, make sure that you have enabled only one correct message builder/formatter pair for a given media type. |
When building the XML tree, JSON builders attach the converted XML infoset to a special XML element that acts as the root element of the final XML tree. If the original JSON payload is of type object
, the special element is <jsonObject/>
. If it is an array
, the special element is <jsonArray/>
. Following are examples of JSON and XML representations of various objects and arrays.
JSON:
Code Block |
---|
|
{"object":null} |
...
Code Block |
---|
|
<jsonObject>
<object></object>
</jsonObject> |
JSON:
...
Code Block |
---|
|
<jsonObject>
<object></object>
</jsonObject> |
JSON:
...
Code Block |
---|
|
<jsonObject>
<object></object>
</jsonObject> |
JSON:
...
Code Block |
---|
|
<jsonArray>
<?xml-multiple jsonElement?>
</jsonArray> |
JSON:
Code Block |
---|
|
{"array":[1,2]} |
...
Code Block |
---|
|
<jsonObject>
<?xml-multiple array?>
</jsonObject> |
JSON:
...
Code Block |
---|
|
<jsonArray>
<?xml-multiple jsonElement?>
<jsonElement>1</jsonElement>
<jsonElement>
<jsonArray>
<?xml-multiple jsonElement?>
</jsonArray>
</jsonElement>
</jsonArray> |
Note that the addition of xml-multiple
processing instructions to the XML payloads whose JSON representations contain arrays. JsonBuilder
(via StAXON) adds these instructions to the XML payload that it builds during the JSON to XML conversion so that during the XML to JSON conversion, JsonFormatter
can reconstruct the arrays that are present in the original JSON payload. JsonFormatter
interprets the elements immediately following a processing instruction to construct an array.
When building XML elements, the ‘$’ character and digits are handled in a special manner when they appear as the first character of a JSON key. Following are examples of two such occurrences. Note the addition of the _JsonReader_PS_
and _JsonReader_PD_
prefixes in place of the ‘$’ and digit characters, respectively.
...
Code Block |
---|
|
<jsonObject>
<_JsonReader_PD_32X32>image_32x32.png</_JsonReader_PD_32X32>
</jsonObject> |
To convert an XML payload to JSON, set the messageType
property to application/json
in the axis2 scope before sending message to an endpoint. Similarly, to convert a JSON payload to XML, set the messageType
property to application/xml
or text/xml
. For example:
...