Relatório nao abre via browser no IE (abre no firefox)

[code] public String emitirRelatorioSituacaoAno() {
try {
byte[] stream;
FacesContext facesContext = FacesContext.getCurrentInstance();
ServletContext servletContext = (ServletContext) facesContext
.getExternalContext().getContext();

		String dirBase = servletContext.getRealPath("");

		String caminhoImagem = dirBase
				+ PropertiesUtil.getInstance().getResourceBundle(
						"ApplicationConfigurator", "pt", "BR").getString(
						"report.image.dir").replace("[BARRA]",
						File.separator);

		String caminhoJasper = dirBase
				+ PropertiesUtil.getInstance().getResourceBundle(
						"ApplicationConfigurator", "pt", "BR").getString(
						"report.jasper.dir").replace("[BARRA]",
						File.separator);

		Map parametros = new HashMap();
		parametros.put("IMAGES_URI", caminhoImagem);

		stream = ReportUtil.gerarPdfBD(parametros, caminhoJasper
				+ "report_Denuncia_Situacao_Ano.jasper");

		HttpServletResponse res = (HttpServletResponse) facesContext
				.getExternalContext().getResponse();

		res.setContentType("application/pdf");
		res.setHeader("Pragma", "public");
		res.setHeader("Cache-control", "must-revalidate");
		res.setHeader("Content-Disposition",
				"attachment; filename=\"Relatorio_Situacao_Ano.pdf\"");

		ServletOutputStream servletOutputStream = res.getOutputStream();
		servletOutputStream.write(stream);

		FacesContext.getCurrentInstance().responseComplete();
	} catch (IOException ex) {
		WebUtil.error(PropertiesUtil.getInstance().getResourceBundle(
				"mensagens", "pt", "BR").getString("relatorio_msgErro"));

		throw new ApplicationException(ex);
	} catch (JRException ex) {
		WebUtil.error(PropertiesUtil.getInstance().getResourceBundle(
				"mensagens", "pt", "BR").getString("relatorio_msgErro"));

		throw new ApplicationException(ex);
	} catch (SQLException ex) {
		WebUtil.error(PropertiesUtil.getInstance().getResourceBundle(
				"mensagens", "pt", "BR").getString("relatorio_msgErro"));

		throw new ApplicationException(ex);
	}

	return "RELATORIO_SITUACAO_ANO_EMITIDO";
} [/code]

Estou usando o código acima para criar um relatório e abrir aquela janela do browser com opção de abrir o arquivo ou salvar. Só que no IE quando eu seleciono a opção de abrir o arquivo ele abre o adobe, mas exibe esta mensagem: “Houve um erro ao abrir este documento. Este arquivo não pôde ser encontrado.”

Quando eu tento a mesma ação no firefox ele funciona normalmente, mas no IE só estou conseguindo vizualizar o arquivo PDF se eu salvar no disco. Alguem sabe o que pode estar causando isso?

[]'s

Experimente dar um response.reset no inicio do código.

[quote=aleck]Experimente dar um response.reset no inicio do código.

[/quote]

res.reset(); res.setContentType("application/pdf"); res.setHeader("Pragma", "public"); res.setHeader("Cache-control", "must-revalidate"); res.setHeader("Content-Disposition", "attachment; filename=\"Relatorio_Situacao_Ano.pdf\"");

continua dando a mesma mensagem

Não sei se estou falando besteira. Faz muito tempo que não uso servlet diretamente, mas tenta por isso no fim do processo todo:

servletOutputStream.close();

tenta ai.

[quote=mvargens]Não sei se estou falando besteira. Faz muito tempo que não uso servlet diretamente, mas tenta por isso no fim do processo todo:

servletOutputStream.close();

tenta ai.[/quote]

dei o flush e o close, continua do mesmo jeito

Acho que o problema é do adobe com o IE. A mensagem é de erro é mostrada no Adobe ou no IE?

tenta comentar essa linha:
res.setHeader(“Cache-control”, “must-revalidate”);

[quote=mvargens]Acho que o problema é do adobe com o IE. A mensagem é de erro é mostrada no Adobe ou no IE?

tenta comentar essa linha:
res.setHeader(“Cache-control”, “must-revalidate”); [/quote]

A mensagem de erro acontece já no adobe, tentei comentar a linha, mas continua ocorrendo o erro.

Cara já vi isso acontecer em com outros aplicativos além do adobe. Por algum motivo o IE não está guardando o arquivo na cache. Dai o Adobe vai la pegar ele para abrir e não acha. O firefox deve estar guardando corretamente o arquivo na cache.
Se o problema não for essas tags para controle de cache do browser eu não sei mais como ajudar. Apostaria nesse caminho.
Pode haver outro motivo também. Já aconteceu comigo de o SVN se perder porque os arquivos ficavam em muitas subpastas e estando no Desktop da maquina o caminho do arquivo ficava muito grande. O SVN se perdia. A solução era colocar as pastas no C:\ para diminuir o tamanho.

Levando em consideração que o caminho da cache do IE fica dentro do documentos and settings etc… Pode ser que o caminha esteja muito grande para o Acrobat entender. A versão 8 usa uma biblioteca chamada QT que é usada também no linux que não sofre desse mau.

Para eliminar essa duvida seria interessante você tentar abrir com outro aplicativo de leitura de PDF. Ou enviar um arquivo Word ao invés de PDF para ver se abre o Microsoft Word.

Não consigo ver outras possibilidades.
Se puder tentar isso para eliminar a possibilidade, tenta ai.

cara… com o resp.reset(); funcionou certinho… resolvido (por hora) meus problemas de cache no IE…

no meu caso eh um pouco diferente, pois to tentando gerar um captcha, porém o ie tava armazenando em cache e o captcha nunca era validado, porém resolvi isso antes de dar um responseOutputStream.write(“imagem.jpg”) na minha imagem, acrescentei o resp.reset(), em:

resp.setHeader(“Cache-Control”, “no-store”);
resp.setHeader(“Pragma”, “no-cache”);
resp.setDateHeader(“Expires”, 0);
resp.setContentType(“image/jpeg”);
resp.reset();

e depois:

responseOutputStream.write(“imagem.jpg”);

aí funcionou…

creio q deve ser o mesmo problema do rollei…

flw

Ta faltando este cara aki:

	res.setContentType("application/force-download");

:wink: