I am using JERSEY 1.8. When my function runs normally it runs ok. but in case of exception it throws error :
com.sun.jersey.api.MessageException: A message body writer for Java class java.util.HashMap, and Java type class java.util.HashMap, and MIME media type application/octet-stream was not found.
I tried all solutions given but it just not going away.
JAVA Class :
@GET
@Path("/{programId}/export")
public Response exportProgramData(@PathParam(PROGRAM_ID) String programId, @Context HttpServletRequest request) {
ResponseBuilder respBuilder = null;
Map<String, Object> response = new HashMap<String, Object>();
try {
String programResponse = programsFacade.getProgramReportAsCSV(programId, userId);
if (programResponse != null) {
String csvFileName = programsFacade.buildFileNameForReport(programId, userId) + CSV_EXTN;
respBuilder = Response.ok().entity(new ByteArrayInputStream(programResponse.getBytes()));
respBuilder.header(HTTP.CONTENT_TYPE, CONTENT_CSV_TYPE);
respBuilder.header(CONTENT_DISPOSITION, "attachment; filename=\"" + csvFileName + "\"");
NewCookie downloadCookie = new NewCookie("fileDownload", "true", "/", null, "no comment", 1073741823,
false);
respBuilder.cookie(downloadCookie);
logger.info(LOGGER_PREFIX + "Exported program response for program: " + programId);
} else {
String message = "There was an error while getting the program response.";
logger.error(LOGGER_PREFIX + message);
respBuilder = Response.ok().entity(message);
respBuilder.header(HTTP.CONTENT_TYPE, MediaType.TEXT_PLAIN);
NewCookie downloadCookie = new NewCookie("fileDownload", "false", "/", null, "no comment", 1073741823,
false);
respBuilder.cookie(downloadCookie);
}
} catch (WorkflowManagerException wme) {
response.put(SUCCESS, false);
response.put(HTTP_STATUS, WfManagerUtil.getResponseErrorCode(wme).getStatusCode());
response.put(MESSAGE, wme.getMessage());
throw new WebApplicationException(Response.status(WfManagerUtil.getResponseErrorCode(wme)).entity(response)
.build());
}catch (Exception ex) {
String message = "There was an error while getting the program response.";
logger.error(LOGGER_PREFIX + message, ex);
respBuilder = Response.ok().entity(message);
respBuilder.header(HTTP.CONTENT_TYPE, MediaType.TEXT_PLAIN);
NewCookie downloadCookie = new NewCookie("fileDownload", "false", "/", null, "no comment", 1073741823,
false);
respBuilder.cookie(downloadCookie);
}
return respBuilder.build();
}
POM :
<dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20080701</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<version>3.0.5.Final</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
<!-- REST Dependency -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
<!-- <scope>provided</scope> -->
</dependency>
n is provided by velocity dep but is not available as artifact -->
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.8</version>
<!-- <scope>provided</scope> -->
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.8</version>
<!-- <scope>provided</scope> -->
</dependency>
In case of any WorkflowManagerException it just throws this error.
Please help
try giving
respBuilder = Response.ok().entity(new String("There was an error while getting the program response."));
in the exception catch