Example
Example
This example shows an InterSystems IRIS web service that receives a binary file and sends it back to the caller.
The corresponding web client sends a file with a hardcoded filename, receives the same file from the web service, and then saves it with a new name to prove that it has been successfully sent.
Web Service
The web service is as follows:
/// Receive an attachment and send it back
Class MTOM.RoundTripWS Extends %SOAP.WebService
{
/// Name of the web service.
Parameter SERVICENAME = "RoundTrip";
/// SOAP namespace for the web service
Parameter NAMESPACE = "https://www.roundtrip.org";
/// Receive an attachment and send it back
Method ReceiveFile(attachment As %GlobalBinaryStream) As %GlobalBinaryStream [ WebMethod ]
{
Set ..MTOMRequired=1
Quit attachment
}
}
Web Client
The generated web client (MTOMClient.RoundTripSoap) contains the method ReceiveFile(), which invokes the web method of the same name. This method is originally as follows:
Method ReceiveFile(attachment As %xsd.base64Binary) As %xsd.base64Binary
[ Final, SoapBindingStyle = document, SoapBodyUse = literal, WebMethod ]
{
Quit ..WebMethod("ReceiveFile").Invoke($this,"https://www.roundtrip.org/MTOM.RoundTripWS.ReceiveFile",
.attachment)
}
Because the files we send might exceed the string length limit, we adjust the method signature as follows:
Method ReceiveFile(attachment As %GlobalBinaryStream) As %GlobalBinaryStream
[ Final, SoapBindingStyle = document, SoapBodyUse = literal, WebMethod ]
{
Quit ..WebMethod("ReceiveFile").Invoke($this,"https://www.roundtrip.org/MTOM.RoundTripWS.ReceiveFile",
.attachment)
}
MTOM is not required by default in the web client; that is, the MTOMREQUIRED parameter is not defined.
To use this proxy client, we create the following class:
Include %systemInclude
Class MTOMClient.UseClient
{
/// For this example, hardcode what we are sending
ClassMethod SendFile() As %GlobalBinaryStream
{
Set client=##class(MTOMClient.RoundTripSoap).%New()
Set client.MTOMRequired=1
//reset location to port 8080 to enable tracing
Set client.Location="https://devsys:8080/csp/mysamples/MTOM.RoundTripWS.cls"
//create file
Set filename="c:\sample.pdf"
Set file=##class(%Library.FileBinaryStream).%New()
Set file.Filename=filename
//create %GlobalBinaryStream
Set attachment=##class(%GlobalBinaryStream).%New()
Do attachment.CopyFrom(file)
//call the web service
Set answer=client.ReceiveFile(attachment)
//save the received file to prove we made the round trip successfully
Set newfilename="c:\roundtrip"_$h_"sample.pdf"
Set newfile=##class(%Library.FileBinaryStream).%New()
Set newfile.Filename=newfilename
Do newfile.CopyFromAndSave(answer)
Quit answer
}
}