Erro input/output erro + sobescrita de linha digitável

60 views
Skip to first unread message

Pinheiro Alves

unread,
Apr 16, 2017, 5:47:15 PM4/16/17
to JRimum Community
Pessoal, boa noite.

No dia 07/03 tive um problema com a API que até o momento não consegui identificar.

Neste dia, a pasta de boletos do meu server tinham quase 400.000 boletos e às 14:30 começou a dar o seguinte erro abaixo:

java.lang.IllegalStateException: Erro ao tentar criar arquivo! Causado por Input/output error
at org.jrimum.bopepo.view.PdfViewer.getFile(PdfViewer.java:184)
at org.jrimum.bopepo.view.PdfViewer.getFile(PdfViewer.java:157)
at org.jrimum.bopepo.view.BoletoViewer.getPdfAsFile(BoletoViewer.java:1149)

Nós rodamos a rotina de expurgo que baixou o número para 20.000 e o problema acima foi resolvido, porém, algo muito estranho aconteceu com alguns dos boletos que foram gerados: o código de barras gerado no PDF não é o código de barras que foi enviado para geração. Nós sabemos disso porque o webservice que faz chama a API Jrimum realiza log dos parametros da request. Então cogitamos a possibilidade de cache da API. A API faz cache das imagens geradas?


Versão do jrimum utilizada:
<dependency>
<groupId>org.jrimum</groupId>
<artifactId>bopepo</artifactId>
<version>0.2.3</version>
</dependency>

Grato

Misael Barreto de Queiroz

unread,
Apr 16, 2017, 6:20:09 PM4/16/17
to jrimum-c...@googlegroups.com
Olá Filipe, tudo bom?

Filipe, muito estranho esse erro aí! Quanto a imagem do código de barras, até onde sei não há cache, ela é gerada sempre a partir dos dados existentes no boleto repassado para o BoletoViewer.


https://github.com/jrimum/bopepo/blob/0.2-Helio/src/examples/java/org/jrimum/bopepo/exemplo/MeuPrimeiroBoleto.java#L97

BoletoViewer boletoViewer = new BoletoViewer(boleto);


https://github.com/jrimum/bopepo/blob/0.2-Helio/src/main/java/org/jrimum/bopepo/view/PdfViewer.java#L408

private void processarPdf(){
   
    byte[] template = null;
   
    if (isTemplateFromResource()) {
        template = getTemplateFromResource();
    } else {
        template = getTemplate();
    }
   
    doc.withTemplate(template);
   
    BoletoInfoViewBuilder builder = new BoletoInfoViewBuilder(this.resourceBundle,this.boleto).build();
   
    doc.putAllTexts(builder.texts());
    doc.putAllImages(builder.images());
}


https://github.com/jrimum/bopepo/blob/0.2-Helio/src/main/java/org/jrimum/bopepo/view/info/campo/AbstractBoletoInfoCampoView.java#L308

public Image getImagemFcCodigoBarra(){
    return CodigoDeBarras.valueOf(boleto.getCodigoDeBarras().write()).toImage();
}


https://github.com/jrimum/bopepo/blob/0.2-Helio/src/main/java/org/jrimum/bopepo/pdf/CodigoDeBarras.java#L79

public static CodigoDeBarras valueOf(String codigo){
    checkCodigo(codigo);
    return new CodigoDeBarras(codigo);
}



O erro aconteceu assim, "do nada"? Não houve nenhuma atualização no código da tua aplicação, alguma atualização no S.O do servidor?

Você em algum momento está informando o código de barras manualmente?

Conte conosco aí pra gente tentar descobrir esse erro cabuloso,
Um abraço.



Misael Barreto
JRimum Developer


http://www.jrimum.org
http://www.blog.jrimum.org








--
--
Você recebeu esta mensagem porque está inscrito no Grupo "JRimum
Community" nos Grupos do Google.
Para postar neste grupo, envie um e-mail para
jrimum-community@googlegroups.com
ANTES DE POSTAR... leia:
https://groups.google.com/d/topic/jrimum-community/ULU8QHHgaBs/discussion
Para cancelar a sua inscrição neste grupo, envie um e-mail para
jrimum-community+unsubscribe@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com/group/jrimum-community?hl=pt-BR?hl=pt-BR

---
Você recebeu essa mensagem porque está inscrito no grupo "JRimum Community" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jrimum-community+unsubscribe@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Pinheiro Alves

unread,
Apr 17, 2017, 12:24:04 PM4/17/17
to JRimum Community
Olá, obrigado pela resposta.

Respondendo suas perguntas: Não houve alteração de código fonte nem do S.O!

Com relação ao codigo de barras ser informado manualmente, neste caso não é pois este serviço é consumido por uma aplicação interna que faz a geraçao e aciona um webservice iterno de geraçao de boletos. O código de barras é recebido como parâmetro de entrada de deste webservice e gerado da seguinte forma:
        ...
        imagensEmCampos = new HashMap<String, Image>();
        ...
        Boleto boletoOut = new Boleto(titulo);
        boletoOut.setImagensExtras(imagensEmCampos);
        ...
        // Substituindo codigo de barras
        Image img = CodigoDeBarras.valueOf(boleto.getCodigoBarra()).toImage();
        imagensEmCampos.put("txtFcCodigoBarra", img);

Onde, boleto.getCodigoBarra() retorna uma String com o código de barras que foi recebido como parâmetro de entrada do webservice.

Obrigado pelo apoio.

Att

ANTES DE POSTAR... leia:
https://groups.google.com/d/topic/jrimum-community/ULU8QHHgaBs/discussion
Para cancelar a sua inscrição neste grupo, envie um e-mail para

Para ver mais opções, visite este grupo em
http://groups.google.com/group/jrimum-community?hl=pt-BR?hl=pt-BR

---
Você recebeu essa mensagem porque está inscrito no grupo "JRimum Community" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jrimum-communi...@googlegroups.com.

Misael Barreto de Queiroz

unread,
Apr 18, 2017, 6:38:00 PM4/18/17
to jrimum-c...@googlegroups.com
Fala Filipe,

É cara, tá estranho, ainda mais que hora dá e hora não dá.

Filipe, aí no caso como você conseguiu identificar esse erro? Esse log do seu serviço faz alguma comparação entre a String do código de barras recebido como parâmetro e a String resultante da leitura da imagem do código de barras o qual você faz a sobreescrita do campo "txtFcCodigoBarra"?

E quanto a Linha Digitável (campos txtFcLinhaDigitavel e txtRsLinhaDigitavel do template pdf do boleto), você também está sobreescrevendo-a, correto?

Outra coisa, esse código de barras que não bate no Boleto X, pertence a outro Boleto gerado corretamente?

O erro ainda persiste?

Tentei simular aqui o erro mas ainda não consegui.

Um abraço.



Misael Barreto
JRimum Developer


http://www.jrimum.org
http://www.blog.jrimum.org



ANTES DE POSTAR... leia:
https://groups.google.com/d/topic/jrimum-community/ULU8QHHgaBs/discussion
Para cancelar a sua inscrição neste grupo, envie um e-mail para

Para ver mais opções, visite este grupo em
http://groups.google.com/group/jrimum-community?hl=pt-BR?hl=pt-BR

---
Você recebeu essa mensagem porque está inscrito no grupo "JRimum Community" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jrimum-community+unsubscribe@googlegroups.com.

Pinheiro Alves

unread,
Apr 19, 2017, 11:33:09 AM4/19/17
to JRimum Community
Misael,

Nós identificamos porque o cliente foi pagar e ao realizar a leitura do código de barras o valor não estava igual ao valor do boleto. Daí fomos olhar o log desta geração e identificamos que o código de barras estava divergente.

Sim, nós também sobrescrevemos os campos da linha digitável.Mas neste caso estão corretos!

Sim, o código de barras pertence a outro boleto que foi gerado 1 milésimo de segundo antes. Veja os horários de geração 
- 07/03/17 16:14:07,516000000  
- 07/03/17 16:14:07,515000000

Aparentemente o erro não persiste pois nenhum cliente reclamou e também nas amostras de boletos que estamos coletando para conferir o código de barras não estamos pegando o erro.

Att,

Misael Barreto de Queiroz

unread,
Apr 19, 2017, 9:21:22 PM4/19/17
to jrimum-c...@googlegroups.com
Fala Filipe,

É cara, realmente sinistro aí o caso! Como te disse, no Bopepo em si não há nenhum cache das imagens geradas.
Mas que bom que não ocorreu mais!

Se voltar a ocorrer nos avise.
E se a gente poder te ajudar em algo mais será um prazer,


Um abraço.



Misael Barreto
JRimum Developer


http://www.jrimum.org
http://www.blog.jrimum.org




ANTES DE POSTAR... leia:
https://groups.google.com/d/topic/jrimum-community/ULU8QHHgaBs/discussion
Para cancelar a sua inscrição neste grupo, envie um e-mail para

Para ver mais opções, visite este grupo em
http://groups.google.com/group/jrimum-community?hl=pt-BR?hl=pt-BR

---
Você recebeu essa mensagem porque está inscrito no grupo "JRimum Community" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jrimum-community+unsubscribe@googlegroups.com.

Misael Barreto de Queiroz

unread,
Apr 21, 2017, 2:31:26 PM4/21/17
to jrimum-c...@googlegroups.com
Fala Filipe,

Cara, pensei uma coisa: isso pode ter sido bronca de concorrência entre threads. Essa variável "imagemEmCampos" tá global? Se tiver pode ser isso, dai uma thread acabou sobreescrevendo o conteúdo do código de barras da outra! 

Dá uma analisa no teu código. Se houver realmente essa bronca, então uma solução é deixar a variável local ou colocar synchronized no método responsável pela geração do Pdf do Boleto.

Um abraço.

Misael Barreto
JRimum Developer


http://www.jrimum.org
http://www.blog.jrimum.org

Em 19 de abril de 2017 22:20, Misael Barreto de Queiroz <misael...@gmail.com> escreveu:
Fala Filipe,

Misael Barreto de Queiroz

unread,
Apr 21, 2017, 2:34:14 PM4/21/17
to jrimum-c...@googlegroups.com
analisa = analisada

Pinheiro Alves

unread,
Apr 25, 2017, 5:59:19 PM4/25/17
to JRimum Community
Misael,

Verifiquei o código e a variável não está global, está local.

:(


Em sexta-feira, 21 de abril de 2017 15:31:26 UTC-3, Misael Barreto escreveu:
Fala Filipe,

Misael Barreto de Queiroz

unread,
Apr 29, 2017, 10:52:58 PM4/29/17
to jrimum-c...@googlegroups.com
Fala Filipe,

É aí então eu realmente já não imagino o que possa ser hehehehe. 
Se voltar a ocorrer nos avisa aí,

Um abraço.

Misael Barreto
JRimum Developer


http://www.jrimum.org
http://www.blog.jrimum.org



ANTES DE POSTAR... leia:
https://groups.google.com/d/topic/jrimum-community/ULU8QHHgaBs/discussion
Para cancelar a sua inscrição neste grupo, envie um e-mail para

Para ver mais opções, visite este grupo em
http://groups.google.com/group/jrimum-community?hl=pt-BR?hl=pt-BR

---
Você recebeu essa mensagem porque está inscrito no grupo "JRimum Community" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jrimum-community+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages