If you need to send large binary files over SOAP I suggest to use MTOM/XOP and not the common base64 encoding. ( One of the common types to transfer binary data over SOAP).
The benefit of using MTOM is that it not increasing the size of the original message. base64 converts each 6 bits to 8. if working with UTF-8 the encoded data will be larger in about 33%.
The data will be transfered as binary over soap. no conversion.
When setting type of an element as base46binary the Axis2 framework ( Web services in WMB handled by Axis2).
From Alex Linder's Blog - C&SI |
Archive Service - Soap --> File
I made a sample project to test this technology with WMB V7.0.2.
I implemented an archive service, using SOAP Input node and FileOutput node.
The consumer invoke the service with file name and file data attached to soap using MTOM.
for the testing I worked with SoapUI, great testing tool for Web Services. use the following link to configure SoapUI work with MTOM : Adding Headers and Attachments
I exposed the following WSDL
The method get to input parameters, fileName and fileBuffer ( base64binary type).
here the image of soapUi console with the request and mtom configuration
From Alex Linder's Blog - C&SI |
When invoking the WS the binary data sent in binary mode ( MIME).
From Alex Linder's Blog - C&SI |
On the server side, the base64binary is encoded as BLOB, you can see this in the following debug screen shot :
From Alex Linder's Blog - C&SI |
to save the file buffer to disk I create an output message of BLOB domain in the compute node.
From Alex Linder's Blog - C&SI |
don't forget to built the soap reply message.
During my testing I notice that when handling files over 1 MB during debug mode the message flow use about 50% CPU and crash.
When not in debug mode I sent files over 6 MB with no problem.
links for the tester projects:
message flow project
message set project