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

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

if (!new CPFValidator().isValid("60906606047", 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 ?

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("60906606047", null)) {
    throw new CpfException("CPF inválido !");
}

Por esse:

if (!Documentos.cpfValido("60906606047")) {
    throw new CpfException("CPF inválido !");
}
1 curtida

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

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:

1 curtida

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

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.

1 curtida

Eu que errei.

valeu pela ajuda

Mas o que teria que colocar no segundo parametro ?

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

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

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

if (!new CPFValidator().isValid("609.066.060-47", null)) {
    throw new CpfException("CPF inválido !");
}
1 curtida

Sim

609066060-47, 60906606047 e 609.066.060-47

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?

1 curtida

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

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

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