The PayloadFactory Mediator transforms The PayloadFactory Mediator transforms or replaces the contents of a message. Each argument in the mediator configuration can be a static value, or you can specify an XPath or JSON expression to get the value at runtime by evaluating the provided expression against the existing SOAP message. You can configure the format of the request or response and map it to the arguments provided.
...
Table of Contents | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...
Syntax
Code Block |
---|
<payloadFactory media-type="xml | json"> <format ../> <args> <arg (value="string" | expression=" {xpath} | {json} ")/>* </args> </payloadFactory> |
The The media-type
attribute attribute specifies whether to format the message in XML or JSON. If no media type is specified, the message is formatted in XML. If you want to change the payload type of the outgoing message, such as to change it to JSON, add the the messageType
property property after the the </payloadFactory>
tag tag. For example:
Code Block | ||
---|---|---|
| ||
... </payloadFactory> <property name="messageType" value="application/json" scope="axis2"/> |
...
UI Configuration
Parameters available to configure the PayloadFactory mediator the PayloadFactory mediator are as follows:
Parameter Name | Description |
---|---|
Payload Media-Type | This parameter is used to specify whether the message payload should be created in JSON or XML. |
Payload Format | Define Inline: If this is selected, the payload format can be defined within the PayloadFactory mediator configuration by entering it in the text field which appears. To add content to the payload, enter variables for each value you want to add using the format $n (starting with 1 and incrementing with each additional variable, i.e., $1, $2, etc.). You will then create arguments in the same order as the variables to specify each variable's actual value. Pick from Registry: If this is selected, an existing payload format which is saved in the Registry can be selected. Click either Governance Registry or Configuration Registry as relevant to select the payload format from the resource tree. |
Arguments | This section is used to add an argument that defines the actual value of each variable in the format definition. The arguments must be entered in the same order as the variables in |
theformat,so that the first argument defines the value for variable $1, the second argument defines the value for variable $2, etc. An argument can specify a literal string (e.g., "John") or an XPath or JSON expression that extracts the value from the content in the incoming payload. |
Info | ||
---|---|---|
| ||
You can configure the mediator using XML. Click switch to source view in the Mediator window. |
Examples
...
|
Info | ||
---|---|---|
| ||
You can configure the mediator using XML. Click switch to source view in the Mediator window. |
Examples
Table of Contents | ||||
---|---|---|---|---|
|
This section provides examples of using PayloadFactory mediator using PayloadFactory mediator to generate XML and JSON messages.
Example 1: XML
This example is based on on Sample 17: Transforming / Replacing Message Content with PayloadFactory Mediatorwith PayloadFactory Mediator.
Code Block | ||
---|---|---|
| ||
<definitions xmlns="http://ws.apache.org/ns/synapse"> <sequence name="main"> <in> <!-- using payloadFactory mediator to transform the request message --> <payloadFactory media-type="xml"> <format> <m:getQuote xmlns:m="http://services.samples"> <m:request> <m:symbol>$1</m:symbol> </m:request> </m:getQuote> </format> <args> <arg xmlns:m0="http://services.samples" expression="//m0:Code"/> </args> </payloadFactory> </in> <out> <!-- using payloadFactory mediator to transform the response message --> <payloadFactory media-type="xml"> <format> <m:CheckPriceResponse xmlns:m="http://services.samples/xsd"> <m:Code>$1</m:Code> <m:Price>$2</m:Price> </m:CheckPriceResponse> </format> <args> <arg xmlns:m0="http://services.samples/xsd" expression="//m0:symbol"/> <arg xmlns:m0="http://services.samples/xsd" expression="//m0:last"/> </args> </payloadFactory> </out> <send/> </sequence> </definitions> |
...
This example sends a JSON message to the back end. For more information on using JSON with the ESB, see see JSON Support.
Code Block | ||
---|---|---|
| ||
<payloadFactory media-type="json"> <format> { "coordinates": null, "created_at": "Fri Jun 24 17:43:26 +0000 2011", "truncated": false, "favorited": false, "id_str": "$1", "entities": { "urls": [ ], "hashtags": [ { "text": "$2", "indices": [ 35, 45 ] } ], "user_mentions": [ ] }, "in_reply_to_user_id_str": null, "contributors": null, "text": "$3", "retweet_count": 0, "id": "##", "in_reply_to_status_id_str": null, "geo": null, "retweeted": false, "in_reply_to_user_id": null, "source": "<a href=\"http://sites.google.com/site/yorufukurou/\" rel=\"nofollow\">YoruFukurou</a>", "in_reply_to_screen_name": null, "user": { "id_str": "##", "id": "##" }, "place": null, "in_reply_to_status_id": null } </format> <args> <arg expression="$.entities.hashtags[0].text" evaluator="json"/> <arg expression="//entities/hashtags/text"/> <arg expression="//user/id"/> <arg expression="//user/id_str"/> <arg expression="$.user.id" evaluator="json"/> <arg expression="$.user.id_str" evaluator="json"/> </args> </payloadFactory> <property name="messageType" value="application/json" scope="axis2"/> |
...
When the JSON stream formatter and builder are enabled, if you specify a JSON expression in the PayloadFactory mediatorthe PayloadFactory mediator, you must use the evaluator
attribute to specify that it is JSON. You can also use the evaluator to specify that an XPath expression is XML, or if you omit the evaluator attribute, XML is assumed by default. For example:
XML |
or
|
JSON | <arg expression="$.user.id" evaluator="json" /> |
Example 3: Adding arguments
For example, in In the following configuration, the values for format parameters code
and price
will be assigned with values that are evaluated from arguments given in the specified order.
Code Block | ||
---|---|---|
| ||
<payloadFactory media-type="xml"> <format> <m:checkpriceresponse xmlns:m="http://services.samples/xsd"> <m:code>$1<<m:code>$1</m:code> <m:price>$2</m:price> </m:checkpriceresponse> </format> <args> <arg expression="//m0:symbol" xmlns:m0="http://services.samples/xsd"> expression="//m0:symbol"/> <arg expression="//m0:last" xmlns:m0="http://services.samples/xsd" expression="//m0:last"/> </arg></arg></args> </payloadFactory> |
Example 4: Suppressing the namespace
Excerpt | ||
---|---|---|
| ||
NOTE TO WRITERS: The following info is from the FAQ http://docs.wso2.org/wiki/display/FAQ/Mediators#Mediators-PayloadFactory. If you update this section, also update it there! |
To prevent the ESB from adding the default Synapse namespace in an element in the payload format, use xmlns=""
as shown in the following example.
...
from adding the default Synapse namespace in an element in the payload format, use xmlns=""
as shown in the following example.
Code Block |
---|
<ser:getPersonByUmid xmlns:ser="http://service.directory.com>
<umid xmlns="">sagara</umid>
</ser:getPersonByUmid> |
Example 5: Including a complete SOAP envelope as the format
In the following configuration, an entire SOAP envelope is added as the format defined inline. This is useful when you want to generate the result of the PayloadFactory mediator as a complete SOAP message with SOAP headers.
Code Block | ||
---|---|---|
| ||
<payloadFactory media-type="xml">
<format>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<error>
<mes>$1</mes>
</error>
</soapenv:Body>
</soapenv:Envelope>
</format>
<args>
<arg value=" Your request did not return any results. Please enter a valid EIN and try again"/>
</args>
</payloadFactory> |
Samples
The following samples demonstrate the use of the PayloadFactory mediatorthe PayloadFactory mediator.
Excerpt | ||
---|---|---|
| ||
Description of the PayloadFactory Mediator in WSO2 ESB. |