[RESOLVIDO] erro de getOutputStream() ao gerar um PDF

2 respostas
cezarlamann

Olá pessoal!

Bem, estou desenvolvendo uma aplicação web aqui com essas coisas: JSF2 + GlassFish v3 + Facelets. Estou tentando gerar um pdf de um boleto (JRimum), porém na hora da geração estou recebendo do GF o erro “getOutputStream() has already been called for this response”. Olhando outros tópicos no fórum, observei vários exemplos de problemas com quebra de linha nos JSP’s, porém como não estou usando JSP aqui, eu travei neste erro… Segue o código:

/**
         * Método que transmite varios boletos contidos em uma lista
         * para download em formato PDF com várias páginas.
         */

        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse)
        context.getExternalContext().getResponse();
        try {
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition","attachment;filename=boletos.pdf");            
            OutputStream output = response.getOutputStream();
            output.write(groupInOnePDF(listaBoletos)); //o groupInOnePDF retorna um byte[]
            response.flushBuffer();
            FacesContext.getCurrentInstance().responseComplete();
        } catch (Exception e) {
            JsfUtil.addErrorMessage("Erro ao criar arquivo de boleto: "+e.getMessage());
        }

Para poder escrever no OutputStream (output.write) precisamos instanciar antes um OutputStream à partir do response, correto? Porém, no mesmo controller eu não tenho nenhuma outra chamada do tipo OutputStream, a não ser neste local…

alguma sugestão?

Desde já agradeço.

2 Respostas

CintiaDR

A única diferença aqui é que eu faço ‘output.close();’ antes do ‘FacesContext.getCurrentInstance().responseComplete();’.

E retorno ‘null’ nesse método.

cezarlamann

Olá pessoal…

O problema não estava no OutputStream, mas sim no que ele estava tentando escrever…

o meu método estava recebendo uma lista vazia, e o método estava retornando um null… Logo, o OutputStream tentava escrever o null, e “explodia” com o erro do OutputStream… Mas olhando os logs do GF, achei o NullPointerException lá… Falha minha :roll:

Mesmo assim, obrigado por responder @CintiaDR

Abraço!

Criado 24 de fevereiro de 2011
Ultima resposta 24 de fev. de 2011
Respostas 2
Participantes 2