caelum / caelum-stella

O Caelum Stella visa suprir as necessidades do dia a dia do desenvolvedor brasileiro

Home Page:http://stella.caelum.com.br

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Boletos Bradesco

leandrohsilveira opened this issue · comments

Olá, parabens pela API, está muito boa.
Porém tem um problema que encontrei para gerar boletos do bradesco, um erro pontual acredito que tem a ver com a mudança dos métodos "comCarteira(int)" para "comCarteira(String)".

Segue o problema:

A linha 83 da classe br.com.caelum.stella.boleto.bancos.Bradesco está:
StringBuilder builder = new StringBuilder().append( String.format("%02d", emissor.getCarteira()));

Isto lança exceção de formatter, pois o emissor.getCarteira() é uma String e o pattern de formatação é 02d (numérico de dois dígitos).

Caused by: java.util.IllegalFormatConversionException: d != java.lang.String
at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4045)
at java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2748)
at java.util.Formatter$FormatSpecifier.print(Formatter.java:2702)
at java.util.Formatter.format(Formatter.java:2488)
at java.util.Formatter.format(Formatter.java:2423)
at java.lang.String.format(String.java:2797)
at br.com.caelum.stella.boleto.bancos.Bradesco.getNossoNumeroECodDocumento(Bradesco.java:83)
at br.com.caelum.stella.boleto.Boleto.getNossoNumeroECodDocumento(Boleto.java:406)
... 50 more

Pode ser feito o seguinte workaround:

Banco banco = new Bradesco() {

        @Override
        public String getNossoNumeroECodDocumento(Boleto boleto) {
            Emissor emissor = boleto.getEmissor();
            StringBuilder builder = new StringBuilder().append(String.format("%s", emissor.getCarteira()));
            builder.append("/").append(getNossoNumeroDoEmissorFormatado(emissor));
            return builder.append(getDigitoNossoNumero(emissor)).toString();
        }
        private String getDigitoNossoNumero(Emissor emissor) {
            return emissor.getDigitoNossoNumero() != null
                    && !emissor.getDigitoNossoNumero().isEmpty()
                    ? "-" + emissor.getDigitoNossoNumero() : "";
        }
    };

Eu estava usando uma versão antiga. Desculpe pelo equivoco.