Problemas com Normalizer

6 respostas
K

Olá pessoal, boa noite.

Estou com problemas em aplicar o Normalizer em um método de busca.
public List<Funcionario> getFuncionariosGenerico() {
		Session session = HibernateUtil.currentSession();
		FuncionarioDao funcionarioDao = new FuncionarioDao(session,
				Funcionario.class);
		String nome = Normalizer.normalize(this.funcionario.getNome(), //ESTA É A LINHA Q ELE ACUSA NO ERRO
				Normalizer.Form.NFD).replaceAll(
				"\\p{InCombiningDiacriticalMarks}+", "");

		List<Funcionario> lista = funcionarioDao.pesquisaFuncionarios(nome,
				this.funcionario.getCpf(), this.funcionario.getRg());

		return lista;
	}
No Dao:
@SuppressWarnings("unchecked")
	public List<Funcionario> pesquisaFuncionarios(String nome, String cpf,
			String rg) {
		Criteria c = session.createCriteria(Funcionario.class);
		// normalizar(nome);
		List<Funcionario> results = new ArrayList<Funcionario>();
		c.add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE));
		c.add(Restrictions.like("cpf", cpf, MatchMode.ANYWHERE));
		c.add(Restrictions.like("rg", rg, MatchMode.ANYWHERE));
		results = (List<Funcionario>) c.list();
		return results;
	}
A exception que me retorna é esta:
Caused by: java.lang.NullPointerException
	at java.text.Normalizer.normalize(Normalizer.java:164)
	at br.gov.rr.setrabes.handler.FuncionarioHandler.getFuncionariosGenerico(FuncionarioHandler.java:509)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
	at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
	at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:64)
	at org.apache.el.parser.AstValue.getValue(AstValue.java:118)
	at org.apache.el.parser.AstEmpty.getValue(AstEmpty.java:45)
	at org.apache.el.parser.AstNot.getValue(AstNot.java:42)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
	at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
	... 47 more

Tentei implentar o normalizer tanto no bean quanto no dao, e ele dá o mesmo erro... sempre na linha do normalizer.normalize.

Eae pessoal, o que pode ser??

Valeu.

6 Respostas

L

de uma olhada no

this.funcionario.getNome();

se ele naum esta retornando null,parece que naum a nada errado com o normalize.

K
Antes de tudo, boa tarde e obrigado por ter respondido... Eu já tentei de outras formas, por exemplo assim no Dao:
@SuppressWarnings("unchecked")
	public List<Funcionario> pesquisaFuncionarios(String nome, String cpf,
			String rg) {
		Criteria c = session.createCriteria(Funcionario.class);
		normalizar(nome);
		List<Funcionario> results = new ArrayList<Funcionario>();
		c.add(Restrictions.ilike("nome", nome, MatchMode.ANYWHERE));
		c.add(Restrictions.like("cpf", cpf, MatchMode.ANYWHERE));
		c.add(Restrictions.like("rg", rg, MatchMode.ANYWHERE));
		results = (List<Funcionario>) c.list();
		return results;
	}

	public static String normalizar(String n) {

		String nome = Normalizer.normalize(n, Normalizer.Form.NFD);
		return nome.replaceAll("\\p{InCombiningDiacriticalMarks}+", "");

	}
E ele sempre me acusa como null na linha que se refere ao normalizer...
Caused by: java.lang.NullPointerException
	at java.text.Normalizer.normalize(Normalizer.java:164)
	at br.gov.rr.setrabes.dao.FuncionarioDao.normalizar(FuncionarioDao.java:133)
	at br.gov.rr.setrabes.dao.FuncionarioDao.pesquisaFuncionarios(FuncionarioDao.java:122)

Estou usando JSF 1.2, tomcat6, richfaces3.3.3.

Agradeço a Ajuda.

lgweb:
de uma olhada no
this.funcionario.getNome();
se ele naum esta retornando null,parece que naum a nada errado com o normalize.
E

Troque

normalizar(nome);

por

if (nome != null) 
        nome = normalizar (nome);
K

entanglement:
Troque

normalizar(nome);

por

if (nome != null) nome = normalizar (nome);

Olá entanglement, boa tarde.

Obrigado por responder. Vejo que essa dúvida é pouco comum no fórum… acho q é pq eu sou iniciante, estou pegando esta surra… mas nao tenho vergonha de perguntar heheheheh
:smiley:
Mano, fiz a alteração que vc sugeriu, e ele não deu mais a exception, embora tb não está fazendo a pesquisa pelo nome… eu digito o nome, e ele não me retorna nenhum resultado… os outros campos de pesquisa estão funcionando perfeitamente…
O que pode ser??
Agradeço a ajuda…

E

Por algum motivo - e aí é você que tem de descobrir - você não preencheu o campo “nome” no objeto funcionario.
O LGWeb ( http://www.guj.com.br/posts/list/215057.java#1096260 ) já lhe cantou a bola desde o começo, já de manhã cedo, você tem de ir atrás disso.

K

entanglement:
Por algum motivo - e aí é você que tem de descobrir - você não preencheu o campo “nome” no objeto funcionario.
O LGWeb ( http://www.guj.com.br/posts/list/215057.java#1096260 ) já lhe cantou a bola desde o começo, já de manhã cedo, você tem de ir atrás disso.

Blz. Só uma correção: eu tinha dito que ele não estava pesquisando pelo nome, mas está!! o problema é que se eu colocar o nome com acento, ele não encontra, mesmo que esse registro esteja no banco.
Valeu pela ajuda. Vou dar uma estudada por aqui.

Flws.

Criado 11 de agosto de 2010
Ultima resposta 12 de ago. de 2010
Respostas 6
Participantes 3