...
Parameters available to configure 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. |
...
When the JSON stream formatter and builder are enabled, if you specify a JSON expression in the 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
...
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> |
Example 7: Uploading a file to an HTTP endpoint via a multipart request
The below example configuration uses VFS to upload the file in the specified location to the given HTTP endpoint via a HTTP multipart request.
Code Block | ||
---|---|---|
| ||
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="smooksample"
startOnLoad="true"
statistics="disable"
trace="disable"
transports="vfs">
<target>
<inSequence>
<enrich>
<source clone="true" type="body"/>
<target property="originalBody" type="property"/>
</enrich>
<property name="messageType"
scope="axis2"
type="STRING"
value="multipart/form-data"/>
<payloadFactory media-type="xml">
<format>
<root xmlns="">
<customFieldOne>$1</customFieldOne>
<customFieldTwo>$2</customFieldTwo>
<file xmlns="http://org.apache.axis2/xsd/form-data"
charset="US-ASCII"
content-type="text/plain"
filename="$3"
name="file1">$4</file>
</root>
</format>
<args>
<arg value="Some value 1"/>
<arg value="Some value 2"/>
<arg evaluator="xml" expression="$trp:FILE_NAME"/>
<arg evaluator="xml" expression="$ctx:originalBody"/>
</args>
</payloadFactory>
<header name="Content-Type" scope="transport" value="multipart/form-data"/>
<property name="messageType"
scope="axis2"
type="STRING"
value="multipart/form-data"/>
<property name="OUT_ONLY" scope="default" type="STRING" value="true"/>
<send>
<endpoint>
<address format="rest" uri="http://localhost:3000/upload/"/>
</endpoint>
</send>
</inSequence>
</target>
<parameter name="transport.PollInterval">5</parameter>
<parameter name="transport.vfs.FileURI">file:///<YOUR_FILE_LOCATION></parameter>
<parameter name="transport.vfs.ContentType">application/octet-stream</parameter>
<parameter name="transport.vfs.ActionAfterProcess">DELETE</parameter>
<parameter name="transport.vfs.FileNamePattern">.*\..*</parameter>
<description/>
</proxy>
|
In the above example, the following property mediator configuration sets the message type as multipart/form-data
.
Code Block | ||
---|---|---|
| ||
<property name="messageType"
scope="axis2"
type="STRING"
value="multipart/form-data"/> |
The below file
parameter of the payload factory mediator defines the HTTP multipart request.
Tip |
---|
Do not change the |
Code Block | ||
---|---|---|
| ||
<file xmlns="http://org.apache.axis2/xsd/form-data"
charset="US-ASCII"
content-type="text/plain"
filename="$3"
name="file1">$4</file> |
Also, the below property mediator configuration sets the content of the uploaded file.
Code Block | ||
---|---|---|
| ||
<header name="Content-Type" scope="transport" value="multipart/form-data"/>
<property name="messageType"
scope="axis2"
type="STRING"
value="multipart/form-data"/> |
Samples
The following samples demonstrate the use of the PayloadFactory mediator.
...