Forum Discussion
Binary is needed to support all kind of file types (.txt, .pdf, .docx, etc)
Also the code below doesn't work.
com.eviware.soapui.impl.rest.mock.RestMockResult mockResult = mockResponse.getMockResult()
InputStream inputS = new ByteArrayInputStream(fileBytes);
long length=fileBytes.length
com.eviware.soapui.support.Tools.readAndWrite(inputS, length, mockResult.getOutputStream());
inputS.close();When running, this exception is written to file:
java.io.IOException: Closed
I got it working:
import javax.servlet.http.HttpServletResponse
import com.eviware.soapui.support.Tools
import com.eviware.soapui.impl.rest.mock.RestMockResult
def fileDir = context.mockService.getProperty("fileDir").value
def projectPath = (new com.eviware.soapui.support.GroovyUtils(context)).projectPath
fileDir = fileDir.replace('$projectDir', projectPath)
fileDir = fileDir.replace("\\", "/")
def filename = requestContext.getProperty("filename")
def file = new File(fileDir + '\\' + filename)
def response = mockRequest.httpResponse
response.setContentType('application/octect-stream')
def headerKey = 'Content-Disposition'
def headerValue = 'attachment; filename="' + filename + '"'
response.addHeader(headerKey, headerValue)
if (file.exists() && file.isFile()){
byte[] fileBytes = file.getBytes()
if (fileBytes.length > 0){
try{
InputStream inputS = file.newInputStream()
long length=file.length()
response.setContentLength( ( int )length );
Tools.readAndWrite(inputS, length, response.getOutputStream());
inputS.close();
return new com.eviware.soapui.impl.rest.mock.RestMockResult(mockRequest);
}
catch(Exception e){
mockResponse.responseContent = "Exception:" + e.getMessage() + e
}
}
else{
mockResponse.responseContent = ""
}
}
else{
mockResponse.responseContent = "File does not exist!"
}- psy10 years agoOccasional Contributor
Your example from post 5 helped me to sent back a non plain text file like PDF / ZIP / JPEG or whatever, Tools.readAndWrite was the key.
But due to my project usage after successfully sent back the response with
"return new com.eviware.soapui.impl.rest.mock.RestMockResult(mockRequest);"
my SoapUI has thrown the Exception "Failed to find MockResonse"
I had to change the call of Response.
Instead of return directly the content, I put the output stream response.getOutputStream()) into a requestContext variable:
Tools.readAndWrite(inputS, length, response.getOutputStream()); inputS.close(); requestContext.myResponse = response.getOutputStream(); return "MockResponse";The "MockResponse" below the MockAction contains as Body only
${myResponse}No error log entry anymore and everything works as expected. :smileyhappy: