Hibernate 4.0 Validation failed for classes

Na hora que eu preencho os dados com CPF funciona.
Mais quando eu preencho com CNPJ não salvar da error.

Que erro é esse ?

Console.

Caused by: javax.faces.el.EvaluationException: javax.validation.ConstraintViolationException: Validation failed for classes [com.algaworks.pedidovenda.erp.Cliente] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage=‘deve ser informando’, propertyPath=documentoReceitaFederal, rootBeanClass=class com.algaworks.pedidovenda.erp.Cliente, messageTemplate=’{javax.validation.constraints.NotNull.message}’}
]
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
… 28 more

CadastroClienteBean

package com.algaworks.pedidovenda.controller;

import java.io.Serializable;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

import com.algaworks.pedidovenda.erp.Cliente;
import com.algaworks.pedidovenda.erp.TipoPessoa;
import com.algaworks.pedidovenda.service.CadastroClienteService;
import com.algaworks.pedidovenda.util.jsf.FacesUtil;

@Named
@RequestScoped
public class CadastroClienteBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@Inject
	private CadastroClienteService cadastroClienteService;

	@Inject
	private Cliente cliente;

	public CadastroClienteBean() {
		limpar();
	}

	public void limpar() {
		cliente = new Cliente();
		cliente.setTipo(TipoPessoa.FISICA);
		
	}

	public void salvar() {
		cadastroClienteService.salvar(cliente);
		limpar();
		FacesUtil.addInfoMessage("Cliente salvo com sucesso.");
	}

	public boolean isPessoaJuridica(){
		return this.cliente.getTipo().equals(TipoPessoa.JURIDICA);
	}
	
	public boolean isPessoaFisica(){
		return this.cliente.getTipo().equals(TipoPessoa.FISICA);
	}

	public TipoPessoa[] getTiposPessoa() {
		return TipoPessoa.values();
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public CadastroClienteService getCadastroClienteService() {
		return cadastroClienteService;
	}

	public void setCadastroClienteService(CadastroClienteService cadastroClienteService) {
		this.cadastroClienteService = cadastroClienteService;
	}

}

[/code]

Classe Cliente ...


[code lang="java"]
package com.algaworks.pedidovenda.erp;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotBlank;


@Entity
@Table(name = "cliente")
public class Cliente implements Serializable {

private static final long serialVersionUID = 1L;

	
	private Long id;
		
	private String nome;
		
	private String email;
	
	@Valid
	private String documentoReceitaFederal;
		
	private TipoPessoa tipo = TipoPessoa.FISICA;
	
	private List<Endereco> enderecos = new ArrayList<>();

	
		
	@Id
	@GeneratedValue
	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	@NotNull
	@Size(max=100)
	@Column(nullable = false, length=100)
	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	@NotBlank @Size(max=100)
	@Column(nullable=false, length=255, unique=true)
	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	@NotNull
	@Size(max = 18)
	@Column(name = "doc_receita_federal", nullable = false, length = 18)
	public String getDocumentoReceitaFederal() {
		return documentoReceitaFederal;	
	}

	public void setDocumentoReceitaFederal(String documentoReceitaFederal) {
		this.documentoReceitaFederal = documentoReceitaFederal;
	}
	
	@NotNull 
	@Enumerated(EnumType.STRING)
	@Column(nullable = false, length = 10)
	public TipoPessoa getTipo() {
		return tipo;
	}

	public void setTipo(TipoPessoa tipo) {
		this.tipo = tipo;
	}

	
	@OneToMany(mappedBy = "cliente", cascade = CascadeType.ALL)
	public List<Endereco> getEnderecos() {
		return enderecos;
	}

	public void setEnderecos(List<Endereco> enderecos) {
		this.enderecos = enderecos;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Cliente other = (Cliente) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
	
	

}
[/code]

CadastroCliente.xhtml ...

[code lang="java"]
<ui:composition template="/WEB-INF/template/LayoutPadrao.xhtml"
	xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:p="http://primefaces.org/ui" xmlns:o="http://omnifaces.org/ui">

	<script>
		function tratarInclusaoProduto(args) {
			if (!args.validationFailed) {
				PF('inclusaoProdutoDialog').hide();
			}
		}
	</script>

	<ui:define name="titulo">Novo Cliente</ui:define>

	<ui:define name="corpo">

		<f:metadata>
			<o:viewParam name="cliente" value="#{cadastroClienteBean.cliente}" />

		</f:metadata>

		<h:form id="frmCliente">
			<h1>Novo Cliente</h1>

			<p:messages autoUpdate="true" closable="true" />

			<p:toolbar style="margin-top: 20px">
				<p:toolbarGroup>
					<p:button value="Novo" outcome="/clientes/CadastroCliente" />
					<p:commandButton value="Salvar" id="btnSalvar"
						action="#{cadastroClienteBean.salvar}" update="@form" />
				</p:toolbarGroup>

				<p:toolbarGroup align="right">
					<p:button value="Pesquisa" outcome="/clientes/PesquisaCliente" />
				</p:toolbarGroup>

			</p:toolbar>

			<p:panelGrid columns="2" id="painel"
				style="width: 100%; margin-top: 20px; margin-bottom:10px"
				columnClasses="rotulo, campo">

				<p:outputLabel value="Nome" for="nome" />
				<p:inputText id="nome" size="70"
					value="#{cadastroClienteBean.cliente.nome}" />

				<p:outputLabel value="Tipo" for="tipo" />
				<p:selectOneRadio id="tipo"
					value="#{cadastroClienteBean.cliente.tipo}">
					<f:selectItems value="#{cadastroClienteBean.tiposPessoa}"
						var="tipoPessoa" itemValue="#{tipoPessoa}"
						itemLabel="#{tipoPessoa.descricao}" />

					<p:ajax event="change" process="@this" partialSubmit="true"
						update="frmCliente" />
				</p:selectOneRadio>

				<p:outputLabel value="CNPJ" for="cnpj" rendered="#{cadastroClienteBean.pessoaJuridica}"/>
				<p:inputMask id="cnpj" mask="99.999.999/9999-99" rendered="#{cadastroClienteBean.pessoaJuridica}"
					value="#{cadastroClienteBean.cliente.documentoReceitaFederal}" required="true" />
					
				<p:outputLabel value="CPF" for="cpf" rendered="#{!cadastroClienteBean.pessoaJuridica}"/>
				<p:inputMask id="cpf" mask="999.999.999-99" rendered="#{!cadastroClienteBean.pessoaJuridica}"
					value="#{cadastroClienteBean.cliente.documentoReceitaFederal}" />

				<p:outputLabel value="E-mail" for="email" />
				<p:inputText id="email" size="50"
					value="#{cadastroClienteBean.cliente.email}" />

			</p:panelGrid>

			<p:commandButton value="Adicionar Endereço"
				style="margin-top: 15px; margin-bottom:10px"
				onclick="PF('inclusaoProdutoDialog').show(); return false;" />

			<p:dataTable id="tableNovoCliente" value="" var="novoCliente"
				style="margin-top: 10px" rows="5"
				emptyMessage="Nenhum cliente encontrado" reflow="true"
				rowsPerPageTemplate="10, 20, 30" paginator="true"
				paginatorAlwaysVisible="false" paginatorPosition="bottom">

				<p:column headerText="Logradouro"
					style="width:400px; text-align: left">
					<h:outputText value="Rua Teste" />
				</p:column>

				<p:column headerText="Número" style="width:80px; text-align: left">
					<h:outputText value="123" />
				</p:column>

				<p:column headerText="Complemento"
					style="width: 250px; text-align: left">
					<h:outputText value="Apt02" />
				</p:column>

				<p:column headerText="CEP" style="width: 100px; text-align: left">
					<h:outputText value="37550-000" />
				</p:column>

				<p:column headerText="Cidade/UF"
					style="width: 200px; text-align: left">
					<h:outputText value="Salvador-BA" />
				</p:column>

				<p:column style="width: 100px; text-align:center">
					<p:button icon="ui-icon-pencil" title="Editar" />
					<p:button icon="ui-icon-trask" title="Excluir" />
				</p:column>

			</p:dataTable>
		</h:form>

		<h:form>
			<p:dialog header="Inclusão de Endereço"
				widgetVar="inclusaoProdutoDialog" modal="true" resizable="false">
				<h:panelGroup id="inclusaoPanel">
					<p:messages />

					<h:panelGrid columns="2">
						<p:outputLabel value="Lograduro" for="lorgaduro" />
						<p:inputText id="lorgaduro" required="true" size="58"
							style="margin-top: 10px" />

						<p:outputLabel value="Número" for="numero" />
						<p:inputText id="numero" required="true" size="10"
							style="margin-top: 10px" />

						<p:outputLabel value="Complemento" for="complemento" />
						<p:inputText id="complemento" required="true" size="38"
							style="margin-top: 10px" />

						<p:outputLabel value="CEP" />
						<p:inputMask mask="999-999-999" required="true" size="15"
							style="margin-top: 10px" />

						<p:outputLabel value="Cidade" for="enderecoCidade" />
						<p:columnGroup>
							<p:inputText id="enderecoCidade" size="38"
								style="margin-top: 10px" />

							<p:outputLabel value="UF" for="ufCidade"
								style="padding-left: 25px; padding-right: 20px; 
							margin-top: 10px" />
							<p:inputText id="ufCidade" size="5" maxlength="2" />
						</p:columnGroup>
						<p:outputLabel />

						<p:commandButton value="Incluir"
							oncomplete="PF('inclusaoProdutoDialog').hide();"
							style="margin-top: 10px" />

					</h:panelGrid>

				</h:panelGroup>

			</p:dialog>

		</h:form>
	</ui:define>

</ui:composition>
[/code]

ClienteRepository ...

[code lang="java"]
package com.algaworks.pedidovenda.repository;

import java.io.Serializable;
import java.util.List;

import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;

import org.apache.commons.lang3.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import com.algaworks.pedidovenda.erp.Cliente;
import com.algaworks.pedidovenda.repository.filter.ClienteFilter;

public class ClienteRepository implements Serializable{

	private static final long serialVersionUID = 1L;

	@Inject
	private EntityManager manager;
	
	public Cliente guardar(Cliente cliente) {
		return manager.merge(cliente);
	}
	
	public Cliente porNome(String nome) {
		try {
			return manager.createQuery("from Cliente where upper(nome) = :nome", Cliente.class)
					.setParameter("nome", nome.toUpperCase()).getSingleResult();
		} catch (NoResultException e) {
			return null;
		}
	}
	
	
	public List<Cliente> todos(){
		return manager.createQuery("from Cliente", Cliente.class).getResultList();
	}
	
	@SuppressWarnings("unchecked")
	public List<Cliente> filtrados(ClienteFilter filtro){
		
		Session session = manager.unwrap(Session.class);
	    Criteria criteria = session.createCriteria(Cliente.class);
	    
	    if(StringUtils.isNotBlank(filtro.getNome())){
	    	criteria.add(Restrictions.eq("nome", filtro.getNome()));
	    }
	    
	    if(StringUtils.isNotBlank(filtro.getNome())){
	    	criteria.add(Restrictions.ilike("nome", filtro.getNome(),MatchMode.ANYWHERE));
	    }
	    
	    
	    return criteria.addOrder(Order.asc("nome")).list();		
	}
	
	public Cliente porId(Long id){
		return manager.find(Cliente.class, id);
	}	
}