Caelum Stella - boleto gerando 'Java Heap Space'

15 respostas
zorba

boa tarde pessoal.
tenho esse método aqui: http://gist.github.com/572303 que gera um boleto.
coloquei isso dentro de um for:

public void gerarBoletos() {
        try {
            selecionarParcelasBaixa();
            int mes = 0;
            List<Boleto> boletos = new ArrayList<Boleto>();
            
            for(MovimentacaoParcela mp : parcelasABaixar)
            {
                Aluno aluno = mp.getMovimentacao().getAluno();
                String valorPagar = mp.getMovimentacao().getVlUnitario().toString();
                Date dataProcessamento = new Date();
                Calendar vencimento = Calendar.getInstance();
                vencimento.add(Calendar.MONTH, mes);
                
                Date dataVencimento = vencimento.getTime();
                
                Boleto boleto = BoletoUtils.gerarBoleto(
                        dataProcessamento, 
                        dataVencimento,
                        contaCorrente,
                        aluno, valorPagar, instrucoes, locaisPagamento);
                boletos.add(boleto);
                mes++;
            }
            
            BoletoUtils.gerarArquivoBoleto(boletos.toArray(new Boleto[boletos.size()]));
        } catch (Exception e) {
            e.printStackTrace();
            addMensagemErro(e);
        }
    }
mas acontece isso:
Caused by: javax.faces.el.EvaluationException: java.lang.OutOfMemoryError: Java heap space
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98)
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
    ... 66 more
Caused by: java.lang.OutOfMemoryError: Java heap space
    at com.lowagie.text.Image.getInstance(Unknown Source)
    at com.lowagie.text.Image.getInstance(Unknown Source)
    at br.com.caelum.stella.boleto.transformer.PDFBoletoWriter.writeImage(PDFBoletoWriter.java:117)
    at br.com.caelum.stella.boleto.transformer.BoletoTransformer.transform(BoletoTransformer.java:76)
    at br.com.caelum.stella.boleto.transformer.BoletoGenerator.to(BoletoGenerator.java:123)
    at br.com.caelum.stella.boleto.transformer.BoletoGenerator.toPDF(BoletoGenerator.java:110)
    at br.com.caelum.stella.boleto.transformer.BoletoGenerator.toPDF(BoletoGenerator.java:50)
    at br.com.caelum.stella.boleto.transformer.BoletoGenerator.toPDF(BoletoGenerator.java:38)
    at br.com.athus.util.BoletoUtils.gerarArquivoBoleto(BoletoUtils.java:93)
    at br.com.athus.manageds.ManagedMovimentoCaixa.gerarBoletos(ManagedMovimentoCaixa.java:173)
segundo o trace, é neste metodo:
public static void gerarArquivoBoleto(Boleto...boletos) throws IOException
    {        
        String nomeArquivo = 
            CaminhoUtils.CAMINHO_PASTA_ATHUS + NossoNumeroUtils.getNossoNumeroAtual().toString()
            +".pdf";

        //Se gerar mais de um boleto, cria um nome aleatório para o arquivo
        if (boletos.length > 1)
            nomeArquivo = CaminhoUtils.CAMINHO_PASTA_ATHUS + RandomStringUtils.random(5) + ".pdf";

        BoletoGenerator gerador = new BoletoGenerator(boletos);
        gerador.toPDF(nomeArquivo);
        
        //Após a geração, abre o arquivo pdf
        if(Desktop.isDesktopSupported())
            Desktop.getDesktop().open(new File(nomeArquivo));
    }

li em um posto do blog da caelum que o stella boleto consome memória...tem algo que possa ser feito?

15 Respostas

gilmatryx

Para a geração de boletos tem também o Bopepo do projeto JRimum:

Além de gerar um boleto padrão sem esforço algum…

Se vc quiser personalizar o boleto, ele permite personalização através de templates PDFs.
Você pode usar o OpenOffice para desenhar o boleto e depois exportar para pdf. É simples.

Ver tutoriais.

Se vc quer gerar vários boletos em um único PDF vc pode fazer da seguinte forma:

BoletoViewer.groupInOnePDF("TesteVariosEmUmUnicoArquivo.pdf", boletos);

Ou se vc quer em arquivos separados:

List&lt;File&gt; files = BoletoViewer.onePerPDF("./", ".pdf", boletos);

Se precisar de ajuda e dúvidas no grupo o pessoal te ajuda. Eles são especialistas em boletos e arquivos bancários.

Atualmente o Bopepo tem um total de 8 bancos suportados:

http://www.jrimum.org/bopepo/wiki/Componente/BancosSuportados

E com mais implementações em andamento, com o que o pessoal vai pedindo:

Novo caso (SICOB) da Caixa Econômica Federal
http://groups.google.com.br/group/javasf/browse_thread/thread/c4a2d20f69f7d900

Novo caso (SIGCB) da Caixa Econômica Federal
http://groups.google.com/group/jrimum-community/browse_thread/thread/8462b94d6f479eac?hl=pt-BR_US

Novo banco (adição do Santander)
http://groups.google.com/group/jrimum-community/browse_thread/thread/c8426227c877fa49?hl=pt-BR_US

Mais informações sobre o Projeto Bopepo …

T+, qualquer dúvida é só chegar lá no grupo.

zorba

hm, vou dar uma olhada
esotu participando do grupo, qualquer coisa posto la :stuck_out_tongue:

rod

zorba,

Quantos boletos estão sendo gerados dentro do for?

Eu utilizo o Stella-boleto, mas sempre gero 1 boleto por vez.

zorba

o pior é que é só um mesmo, mas o ‘for’ existe pq o usuário pode selecionar mais de uma parcela

zorba

ta, saca isso, no bopepo

contaBancariaCed.setNumeroDaConta( new NumeroDaConta(Integer.parseInt(cc.getContaCorrente()), ""+cc.getDvContaCorrente()));

e a minha conta do banco começa com 0, mas como e Integer, ele corta o zero a esquerda.
:S alguem ai do jrimum não pensou nisso :stuck_out_tongue: infelizmente.
ta dando erro aqui por causa desse 0 a esquerda que eu preciso :slight_smile:

gilmatryx

Ok zorba,

Tenta assim:

contaBancariaCed.setNumeroDaConta(new NumeroDaConta(Integer.valueOf(cc.getContaCorrente().trim()), ""+cc.getDvContaCorrente()));

Agora se tirver caracter que não seja dígito, tipo (".","/","-"), aí vai ter que tratar.

Se não for isso diz qual é o erro blz?

zorba

vou tentar
outra duvida: cada banco tem a sua validação para o numero e codigo da conta?

edit: deu certo o trim(), mas agora ta dando isso
Caused by: java.lang.NullPointerException
    at br.com.nordestefomento.jrimum.bopepo.view.ViewerPDF.setAbstractCPRFCedente(ViewerPDF.java:739)
    at br.com.nordestefomento.jrimum.bopepo.view.ViewerPDF.preencher(ViewerPDF.java:475)
    at br.com.nordestefomento.jrimum.bopepo.view.ViewerPDF.processarPdf(ViewerPDF.java:336)
    at br.com.nordestefomento.jrimum.bopepo.view.ViewerPDF.getBytes(ViewerPDF.java:282)
    at br.com.nordestefomento.jrimum.bopepo.view.BoletoViewer.getPdfAsByteArray(BoletoViewer.java:341)
    at br.com.nordestefomento.jrimum.bopepo.view.ViewerPDF.groupInOnePDF(ViewerPDF.java:157)
    at br.com.nordestefomento.jrimum.bopepo.view.BoletoViewer.groupInOnePDF(BoletoViewer.java:416)
    at br.com.nordestefomento.jrimum.bopepo.view.BoletoViewer.groupInOnePDF(BoletoViewer.java:145)
    at br.com.athus.util.BoletoBopepoUtils.showBoletos(BoletoBopepoUtils.java:112)
    at br.com.athus.manageds.ManagedMovimentoCaixa.gerarBoletos(ManagedMovimentoCaixa.java:175)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:191)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84)
    ... 67 more
meu metodo que gera o pdf:
public static void showBoletos(Boleto... boletos)
    {
        String nomeArquivo = 
            CaminhoUtils.CAMINHO_PASTA_ATHUS + NossoNumeroUtils.getNossoNumeroAtual().toString()
            +".pdf";
        
        File boletoViewer = BoletoViewer.groupInOnePDF(nomeArquivo, Arrays.asList(boletos));
        
        java.awt.Desktop desktop = java.awt.Desktop.getDesktop();

        try {
            desktop.open(boletoViewer);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
gilmatryx

Não, validamos apenas o necessário para gerar o código de barras…
Então, se vc passar o código da conta = 1 e o dígito verificador igual a zero, então esses serão os valores usados para gerar o código de barras.

Quanto a exceção,…

Vc deve fornecer um cnpj/cpf para o cedente do título.

Veja o exemplo completo em:

http://www.jrimum.org/bopepo/wiki/Componente/Documentacao/Tutoriais/GeracaoDeBoletoPadrao

zorba

funcionou :smiley: era só o cnpj mesmo
muito obrigado gilmar :slight_smile:
abraços

TheKill

gilmatryx:
Para a geração de boletos tem também o Bopepo do projeto JRimum:

Além de gerar um boleto padrão sem esforço algum…

Se vc quiser personalizar o boleto, ele permite personalização através de templates PDFs.
Você pode usar o OpenOffice para desenhar o boleto e depois exportar para pdf. É simples.

Ver tutoriais.

Se vc quer gerar vários boletos em um único PDF vc pode fazer da seguinte forma:

BoletoViewer.groupInOnePDF("TesteVariosEmUmUnicoArquivo.pdf", boletos);

Ou se vc quer em arquivos separados:

List&lt;File&gt; files = BoletoViewer.onePerPDF("./", ".pdf", boletos);

Se precisar de ajuda e dúvidas no grupo o pessoal te ajuda. Eles são especialistas em boletos e arquivos bancários.

Atualmente o Bopepo tem um total de 8 bancos suportados:

http://www.jrimum.org/bopepo/wiki/Componente/BancosSuportados

E com mais implementações em andamento, com o que o pessoal vai pedindo:

Novo caso (SICOB) da Caixa Econômica Federal
http://groups.google.com.br/group/javasf/browse_thread/thread/c4a2d20f69f7d900

Novo caso (SIGCB) da Caixa Econômica Federal
http://groups.google.com/group/jrimum-community/browse_thread/thread/8462b94d6f479eac?hl=pt-BR_US

Novo banco (adição do Santander)
http://groups.google.com/group/jrimum-community/browse_thread/thread/c8426227c877fa49?hl=pt-BR_US

Mais informações sobre o Projeto Bopepo …

T+, qualquer dúvida é só chegar lá no grupo.

Caro colega,

Estou desenvolvendo uma aplicação utilizando do seu projeto Bopepo
no qual estou adorando a forma como foi desenvolvido.
Uma coisa que me deixou em dúvida é a questão dos tipos de documentos do objeto Titulo ( TipoDeTitulo )
o projeto ainda não conta com os layouts para estes tipos de documentos?

Como que fica a possibilidade de implementação destes modelos?
Agradeço a atenção.
E fica meus parabens pelo projeto

R

Eu acho que você tá procurando alguma forma de personalizar o boleto, é isso?

Dá uma olhada na página de tutoriais do projeto. Lá tem um tutorial sobre a personalização e uma vídeo aula que pode ajudar também.

Se suas dúvidas continuarem, passa lá no grupo que o pessoal te ajuda com certeza!

Valeu!

J

Tem como saber se o boleto já foi pago na agencia, ou seja, existe algum serviço que verifica se tal boleto já foi pago, como funciona este serviço, caso não exista como você verificam se o boleto já foi pago.
Desde já agradeço pela atenção.

Descio_Oliveira

jabi:
Tem como saber se o boleto já foi pago na agencia, ou seja, existe algum serviço que verifica se tal boleto já foi pago, como funciona este serviço, caso não exista como você verificam se o boleto já foi pago.
Desde já agradeço pela atenção.

Tenho a mesma duvida … se alguem ajudar agradeço…

Att:
Déscio Oliveira

gilmatryx

Tem sim.

Bom, a emissão de boletos está vinculada a uma conta bancária, se a conta é sua, você pode ver o extrato da conta ou,… para serviços contratados, você pode receber um arquivo bancário contendo as situações dos boletos.

Em ambos, o boleto deve ter um número identificador, que é para vc saber como identificar o boleto. Nos serviços CNAB, por exemplo, vc pode verificar se o boleto foi pago ou não através desse número (normalmente chamando de “nosso número”).

Para mais informações entre em contato com o gerente da conta bancária em questão.

marcusco

Bom dia Amigos.

Alguém poderia me dizer como alterar
a parte de cima do boleto stella…

Agradeço desde já.

Criado 9 de setembro de 2010
Ultima resposta 1 de abr. de 2012
Respostas 15
Participantes 8