CPFValidator - org.hibernate.validator.internal.constraintvalidators.hv.br

12 respostas
guilhermebhte

Estou utilizando este validator package org.hibernate.validator.internal.constraintvalidators.hv.br;, desta maneira.

if (!new CPFValidator().isValid("[telefone removido]", null)) {
      throw new CpfException("CPF inválido !");
}

Este metodo é da classe do CPF

@Override
	public boolean isValid(CharSequence value, ConstraintValidatorContext context) {
		if ( value == null ) {
			return true;
		}

		if ( DIGITS_ONLY.matcher( value ).matches() ) {
			return withoutSeparatorMod11Validator1.isValid( value, context )
					&& withoutSeparatorMod11Validator2.isValid( value, context );
		}
		else if ( SINGLE_DASH_SEPARATOR.matcher( value ).matches() ) {
			return withDashOnlySeparatorMod11Validator1.isValid( value, context )
					&& withDashOnlySeparatorMod11Validator2.isValid( value, context );
		}
		else {
			return withSeparatorMod11Validator1.isValid( value, context )
					&& withSeparatorMod11Validator2.isValid( value, context );

		}
	}

Quando ele entra aqui;

withoutSeparatorMod11Validator1.isValid( value, context ), ele só retorna a primeira posição e depois dá erro

Mas dá erro assim:

Cannot read the array length because “weights” is null

Erros que eu, mas não sei se ajuda

O que pode ser ?

12 Respostas

staroski

Tem cara de bug, pois o customWeights não pode ser null.

Se quiser, pode copiar minha classe de validação e/ou geração de CPF e CNPJ:

https://github.com/staroski/tools/blob/master/src/main/java/brdocs/br/com/staroski/tools/brdocs/Documentos.java

Aí basta substituir esse código:

if (!new CPFValidator().isValid("[telefone removido]", null)) {
    throw new CpfException("CPF inválido !");
}

Por esse:

if (!Documentos.cpfValido("[telefone removido]")) {
    throw new CpfException("CPF inválido !");
}
guilhermebhte

Entendi. Infelizmente não posso, pois não deixam eu colocar outras dependências …

staroski

Você não precisa incluir dependência aos fontes do meu GIT.

Copia os métodos da classe Documentos pro seu fonte e seja feliz.

:man_shrugging:

guilhermebhte

Quando o projeto não é nosso, infelizmente é assim :joy:

staroski

Você não está fazendo uma manutenção nesse código?
Então como é que você não pode escrever código nele?
Não entendi.

guilhermebhte

Eu que errei.

valeu pela ajuda

guilhermebhte

Mas o que teria que colocar no segundo parametro ?

if (!new CPFValidator().isValid("[telefone removido]", null)) {
    throw new CpfException("CPF inválido !");
}

Estou procurando desde ontem e não acho nada a respeito

staroski

Não conheço essa API do CPFValidator mas você já experimentou informar o CPF no formato abaixo?

if (!new CPFValidator().isValid("[CPF removido]", null)) {
    throw new CpfException("CPF inválido !");
}
guilhermebhte

Sim

609066060-47, [telefone removido] e [CPF removido]

staroski

Faz alguns anos que não uso Hibernate Validators, mas até onde eu sei, você não instancia eles e sai usando, ao invés disso você anota os atributos das entidades que deseja validar.
No seu caso não seria simplesmente anotar o atributo que corresponde ao CPF com a anotação @CPF?

guilhermebhte

Neste caso especifico, não deve ser utilizado assim.

Mas vou utilizar o que vc me passou, que está funcional

Guilherme_Ferreira_d

Eu descobri o problema. Tem que chamar o método initialize(). Extrai para uma variável assim:

var cpfValidator = CPFValidator()

cpfValidator.initialize(null)

cpfValidator.isValid(chave, null)

pode passar null também

Criado 13 de novembro de 2020
Ultima resposta 25 de jun. de 2021
Respostas 12
Participantes 3