[RESOLVIDO]java.lang.ClassCastException: java.lang.String cannot be cast to

Boa noite a todos.

Estou precisando de um help para a minha aplicação… Esse é um cadastro de usuarios que estou tentando desenvolver aqui. Está aparecendo o seguinte erro:

java.lang.ClassCastException: java.lang.String cannot be cast to videoconferencia.usuarioSetor.UsuarioSetor
	at videoconferencia.web.converter.UsuarioSetorConverter.getAsString(UsuarioSetorConverter.java:27)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.getFormattedValue(HtmlBasicRenderer.java:519)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOption(MenuRenderer.java:534)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:792)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:844)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:298)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)
	at com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)
	at com.sun.faces.renderkit.html_basic.GridRenderer.encodeChildren(GridRenderer.java:129)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
	at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:401)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:410)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:344)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:110)
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:98)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:95)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:79)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:113)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:55)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:36)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:106)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:150)
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at videoconferencia.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:28)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1813)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Aqui está a minha pagina xhtml


<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">
<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	<title>Cadastro de Usuarios</title>
	<h:outputStylesheet name="estilo.css" library="css" />
</h:head>
<h:body>
	<div id="topo">
		VideoConferencia
		<div id="logo_topo"></div>
	</div>
	<div id="total_cad">
		<h2>Cadastro de Usuários</h2>
		<h:form id="cadastro">
			<span class="error"><h:messages /></span>
			<h:inputHidden value="#{usuarioBean.usuario.codigo}" />
			<h:inputHidden value="#{usuarioBean.usuario.ativo}" />
			<h:inputHidden value="#{usuarioBean.destinoSalvar}" />

			<h:panelGrid columns="2">
				<h:outputLabel value="Nome" for="nome" />
				<h:inputText id="nome" label="nome"
					value="#{usuarioBean.usuario.nome}" size="30" maxlength="30"
					required="true" requiredMessage="Você não tem nome?">
					<f:validateLength minimum="10" maximum="30" />
				</h:inputText>

				<h:outputLabel value="Data de Nascimento" for="data" />
				<h:inputText id="data" label="Data Nascimento"
					value="#{usuarioBean.usuario.nascimento}" size="10" maxlength="10"
					required="true">
					<f:convertDateTime dateStyle="medium" />
				</h:inputText>

				<h:outputLabel value="Celular:" for="celular" />
				<h:inputText id="celular" label="Celular"
					value="#{usuarioBean.usuario.celular}" size="10" />

				<h:outputLabel value="e-Mail:" for="email" />
				<h:panelGroup>
					<h:inputText id="email" label="email"
						value="#{usuarioBean.usuario.email}" size="50" maxlength="50"
						required="true" validatorMessage="e-mail invalido">
						<f:validateRegex pattern="[a-zA-Z0-9\-\_\.]+@[a-zA-Z0-9\-\_\.]+" />
					</h:inputText>
					<span class="error"><h:message for="email" /></span>
				</h:panelGroup>

				<h:outputLabel value="Idioma:" for="idioma" />
				<h:selectOneMenu id="idioma" value="#{usuarioBean.usuario.idioma}">
					<f:selectItem itemValue="pt_BR" itemLabel="Português" />
					<f:selectItem itemValue="en_US" itemLabel="English" />
					<f:selectItem itemValue="es_ES" itemLabel="Espanol" />
				</h:selectOneMenu>

				<h:outputLabel value="Setor:" for="setor" />
				<h:selectOneMenu id="setor" value="#{usuarioBean.usuario.usuarioSetor}"
					effect="fade" required="true" requiredMessage="Escolha um setor.">
					<f:converter converterId="UsuarioSetorConverter"/>
					<f:selectItem itemLabel="Selecione um setor" itemValue="" />
					<f:selectItems var="setor" value="#{usuarioSetorBean.lista}"
						itemValue="#{usuarioSetorBean.usuarioSetor.nome}"
						itemLabel="#{setor.nome}"></f:selectItems>
				</h:selectOneMenu>

				<h:outputLabel value="Login:" for="login" />
				<h:inputText id="login" label="login"
					value="#{usuarioBean.usuario.login}" size="15" maxlength="15"
					required="true"
					validatorMessage="Login deve ter no mínimo 5 e no máxinmo 15 caracteres e só pode ter os simbolos '.' e '_'.">
					<f:validateRegex pattern="([a-z]|[0-9]|[.]|[_]){5,15}" />
				</h:inputText>

				<h:outputLabel value="Senha:" for="senha" />
				<h:inputSecret id="senha" label="Senha"
					value="#{usuarioBean.usuario.senha}" size="10" maxlength="10"
					required="true" redisplay="true" />

				<h:outputLabel value="Confirmar Senha:" for="confirmarSenha" />
				<h:inputSecret id="confirmarSenha" label="Confirmar Senha"
					value="#{usuarioBean.confirmarSenha}" size="10" maxlength="10"
					required="true" redisplay="true" />
			</h:panelGrid>
			<br />
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
			<h:commandButton action="#{usuarioBean.salvar}" value="Salvar"
				class="button" />

		</h:form>
	</div>
</h:body>
</html>

e aqui está o meu Usuario.java (POJO)


package videoconferencia.usuario;

import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;

import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

import videoconferencia.usuarioSetor.UsuarioSetor;

@Entity
public class Usuario implements Serializable {

    /**
	 * 
	 */
	private static final long serialVersionUID = -8249564321087035043L;
	@Id
    @GeneratedValue
    private Integer codigo;
    private String nome;
    private String email;
    @org.hibernate.annotations.NaturalId
    private String login;
    private String senha;
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date nascimento;
    private String celular;
    private String idioma;
    private Boolean ativo;
    
    @ManyToOne
    @JoinColumn(name="usuariosetor_codigo")
    @OnDelete(action=OnDeleteAction.NO_ACTION)
    @ForeignKey(name="fk_usuario_usuariosetor")
    private UsuarioSetor usuarioSetor;    
   
	@ElementCollection(targetClass=String.class)
    @JoinTable(
            name = "usuario_permissao",
            uniqueConstraints = {@UniqueConstraint(columnNames={"usuario","permissao"})},
            joinColumns=@JoinColumn(name="usuario"))
    @Column(name="permissao",length=50)
    private Set<String> permissao = new HashSet<String>();

	public Integer getCodigo() {
		return codigo;
	}

	public String getNome() {
		return nome;
	}

	public String getEmail() {
		return email;
	}

	public String getLogin() {
		return login;
	}

	public String getSenha() {
		return senha;
	}

	public Date getNascimento() {
		return nascimento;
	}

	public String getCelular() {
		return celular;
	}

	public String getIdioma() {
		return idioma;
	}

	public Boolean getAtivo() {
		return ativo;
	}

	public UsuarioSetor getUsuarioSetor() {
		return usuarioSetor;
	}

	public Set<String> getPermissao() {
		return permissao;
	}

	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

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

	public void setLogin(String login) {
		this.login = login;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public void setNascimento(Date nascimento) {
		this.nascimento = nascimento;
	}

	public void setCelular(String celular) {
		this.celular = celular;
	}

	public void setIdioma(String idioma) {
		this.idioma = idioma;
	}

	public void setAtivo(Boolean ativo) {
		this.ativo = ativo;
	}

	public void setUsuarioSetor(UsuarioSetor usuarioSetor) {
		this.usuarioSetor = usuarioSetor;
	}

	public void setPermissao(Set<String> permissao) {
		this.permissao = permissao;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((ativo == null) ? 0 : ativo.hashCode());
		result = prime * result + ((celular == null) ? 0 : celular.hashCode());
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		result = prime * result + ((email == null) ? 0 : email.hashCode());
		result = prime * result + ((idioma == null) ? 0 : idioma.hashCode());
		result = prime * result + ((login == null) ? 0 : login.hashCode());
		result = prime * result
				+ ((nascimento == null) ? 0 : nascimento.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.hashCode());
		result = prime * result
				+ ((permissao == null) ? 0 : permissao.hashCode());
		result = prime * result + ((senha == null) ? 0 : senha.hashCode());
		result = prime * result
				+ ((usuarioSetor == null) ? 0 : usuarioSetor.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;
		Usuario other = (Usuario) obj;
		if (ativo == null) {
			if (other.ativo != null)
				return false;
		} else if (!ativo.equals(other.ativo))
			return false;
		if (celular == null) {
			if (other.celular != null)
				return false;
		} else if (!celular.equals(other.celular))
			return false;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		if (email == null) {
			if (other.email != null)
				return false;
		} else if (!email.equals(other.email))
			return false;
		if (idioma == null) {
			if (other.idioma != null)
				return false;
		} else if (!idioma.equals(other.idioma))
			return false;
		if (login == null) {
			if (other.login != null)
				return false;
		} else if (!login.equals(other.login))
			return false;
		if (nascimento == null) {
			if (other.nascimento != null)
				return false;
		} else if (!nascimento.equals(other.nascimento))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		if (permissao == null) {
			if (other.permissao != null)
				return false;
		} else if (!permissao.equals(other.permissao))
			return false;
		if (senha == null) {
			if (other.senha != null)
				return false;
		} else if (!senha.equals(other.senha))
			return false;
		if (usuarioSetor == null) {
			if (other.usuarioSetor != null)
				return false;
		} else if (!usuarioSetor.equals(other.usuarioSetor))
			return false;
		return true;
	}

   
}

e aqui meu UsuarioSetor.java (POJO)


package videoconferencia.usuarioSetor;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.*;


@Entity
@Table(name="usuario_setor")
public class UsuarioSetor implements Serializable {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -8579534875822010558L;
	
	@Id
    @GeneratedValue
	private Integer codigo;
	private String nome;
	@Temporal(javax.persistence.TemporalType.DATE)
	private Date dtCriacao;
	@Temporal(javax.persistence.TemporalType.DATE)
	private Date dtModificacao;
	
	
	public Date getDtCriacao() {
		return dtCriacao;
	}
	public Date getDtModificacao() {
		return dtModificacao;
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		result = prime * result
				+ ((dtCriacao == null) ? 0 : dtCriacao.hashCode());
		result = prime * result
				+ ((dtModificacao == null) ? 0 : dtModificacao.hashCode());
		result = prime * result + ((nome == null) ? 0 : nome.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;
		UsuarioSetor other = (UsuarioSetor) obj;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		if (dtCriacao == null) {
			if (other.dtCriacao != null)
				return false;
		} else if (!dtCriacao.equals(other.dtCriacao))
			return false;
		if (dtModificacao == null) {
			if (other.dtModificacao != null)
				return false;
		} else if (!dtModificacao.equals(other.dtModificacao))
			return false;
		if (nome == null) {
			if (other.nome != null)
				return false;
		} else if (!nome.equals(other.nome))
			return false;
		return true;
	}
	public void setDtCriacao(Date dtCriacao) {
		this.dtCriacao = dtCriacao;
	}
	public void setDtModificacao(Date dtModificacao) {
		this.dtModificacao = dtModificacao;
	}
	
	public Integer getCodigo() {
		return codigo;
	}
	public String getNome() {
		return nome;
	}
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	@Override
	public String toString() {
		return "UsuarioSetor [codigo=" + codigo + ", nome=" + nome
				+ ", dtCriacao=" + dtCriacao + ", dtModificacao="
				+ dtModificacao + "]";
	}

	
	

}

e por fim meu converter


package videoconferencia.web.converter;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.*;

import videoconferencia.usuarioSetor.*;

@FacesConverter(forClass = UsuarioSetor.class, value= "UsuarioSetorConverter")
public class UsuarioSetorConverter implements Converter {

	public Object getAsObject(FacesContext context, UIComponent component, String value) {
		if(value != null && value.trim().length() > 0){
			Integer codigo = Integer.valueOf(value);
			try{
				UsuarioSetorRN usuarioSetorRN = new UsuarioSetorRN();
				return usuarioSetorRN.carregar(codigo);
			}catch(Exception e){
				throw new ConverterException("Não foi possível encontrar o setor" + value + ". " +e.getMessage());
			}
		}
		return null;
	}

	public String getAsString(FacesContext context, UIComponent component, Object value) {
		if(value !=null){
			UsuarioSetor usuarioSetor = (UsuarioSetor) value;
			return usuarioSetor.getCodigo().toString();
		}
		return null;
	}


}

O que pode estar dando errado???

:lol:

De acordo com a exceção, o erro está em tentar converter um objeto String em um objeto UsuarioSetor. O que não é permitido uma vez que String não é um tipo de UsuarioSetor.

Dentro do método getAsString() do seu converter, verifique se o objeto Object que está sendo passado no parâmetro é realmente do tipo UsuarioSetor antes de realizar o Cast.
Exemplo: public String getAsString(FacesContext context, UIComponent component, Object value) { if(value instanceof UsuarioSetor && value != null){ UsuarioSetor usuarioSetor = (UsuarioSetor) value; return usuarioSetor.getCodigo().toString(); } return null; }Dessa forma, caso a variável de referência value não aponte para uma instância de UsuarioSetor, o método vai retornar null sem tentar fazer o Cast inválido.

Valeu!!! Obrigado!! Ajudou bastante!