When invoking a Web Service, you may have the requirement to retrieve, from its response binary, data, such as files. This can be performed quite easily with the Designer in a mapping.
This example shows how to retrieve a pdf sent by a WebService. It would be exactly the same procedure to retrieve an Excel file.
In this article, you will find the following steps :
- First step : reverse the http Rest metadata
- Third step : create your mapping
- Bonus step : how to make the file name dynamic ?
First step : reverse the http Rest metadata
You will find indications to help you to reverse the http Rest metadata here.
Once the nodes have been reversed, you'll have a BINARY node, which is automatically detected by the reverse wizard, in the response body.
Second step : create a file metadata
We need a metadata to save the binary content sent in the response, in a dedicated file. For that, you will create a File Server metadata and add a directory to store the files sent by the API :
In this directory, you need to add a new file :
Be sure that :
- Name is set.
- Physical Name is set, with the expected name of the pdf file.
- Type is set to DELIMITED or POSITIONAL, it doesn't matter, but needs to be set.
Then you need to add a property field to get the binary content of the file.
Call this property field exactly : 'binary_content' :
Third step : create your mapping
Remember that, to call the API, you need to map a rdbms source to the main node of the httpRest metadata, here the GET node.
In this example, we have chosen to map a field from a query, which selects one line.
For that, you can create a H2 metadata, with a H2 base in memory :
And create a query which returns one line :
Then, the binary content needs to be loaded through a stage, before being integrated into the file.
In this example, the stage is done on the H2 PUBLIC schema.
Be sure that the stage is configured like that :
Select the binary field and click on Enable Datatype
Set the datatype to BLOB :
And set the Execution Location to the source :
Finally, you can map the BINARY field to the binary_content property field of the file.
You're ready to execute your mapping !
Bonus step : how to make the file name dynamic ?
You need to add another property field and call it exactly 'file_path' :
Then this new field can be set with a dynamic value in the mapping :
Do not forget to add the extension '.pdf' at the end of the file_path !
You will find more information about flat file property fields here.