[RESOLVIDO] - Incapaz de encontrar o construtor correto

Bom, não sei bem o que esta acontecendo, sou cabaço em java ainda, mas conversando com o Mestre Lucas ele me pediu pra que colocasse o código aki!

[code] SEVERE: StandardWrapperValve [default]: PWC1406: Servlet.service () for servlet default jogou exceção
br.com.caelum.vraptor.http.InvalidParameterException: Impossível encontrar o construtor correto

Java.lang.Integer Caused by: java.lang.NoSuchMethodException:. ()
na java.lang.Class.getConstructor0 (Class.java: 2706)
na java.lang.Class.getDeclaredConstructor (Class.java: 1985)
na br.com.caelum.vraptor.http.ognl.GenericNullHandler.instantiate (GenericNullHandler.java: 70)
na br.com.caelum.vraptor.http.ognl.ReflectionBasedNullHandler.nullPropertyValue (ReflectionBasedNullHandler.java: 79)
[/ code]

Este erro ocorre o locatário tentar salvar um, provavelmente o erro Deve Ser nestas classes.
Modelo

[code]
javax.persistence importação .*;
org.hibernate.validator.Length importação;
org.hibernate.validator.NotNull de importação;

/ **
*

  • @ Author Onix

  • /
    @ Entity
    Locatario class (

    @ Id
    @ GeneratedValue
    @ Column (name = id_locatario ")
    private Integer id;
    @ NotNull
    @ Length (min = 3, max = 150)
    @ Column (name = “locatario”)
    private String nome;
    @ NotNull
    @ Length (min = 3, max = 150)
    condominio private String;
    @ NotNull
    @ Length (min = 3, max = 150)
    Unidade private Integer;
    @ NotNull
    @ Length (min = 3, max = 150)
    private String telefone;
    @ NotNull

    private String email;

    getCondominio String () (
    condominio de retorno;
    )

    setCondominio void (condominio String) (
    this.condominio = condominio;
    )

    public String () (
    e-mail de retorno;
    )

    public void (String email) (
    this.email = email;
    )

    public Integer getId () (
    return id;
    )

    public void setId (Integer id) (
    this.id = id;
    )

    public String getNome () (
    Nome de retorno;
    )

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

    getTelefone String () (
    telefone de retorno;
    )

    setTelefone void (String telefone) (
    this.telefone = telefone;
    )

    getUnidade public Integer () (
    Unidade de retorno;
    )

    setUnidade void (unidade Integer) (
    this.unidade = unidade;
    )

)
[/ code]

Controlador

[code]
br.com.caelum.vraptor importação .;
br.com.caelum.vraptor.validator.Hibernate de importação;
br.com.caelum.vraptor.validator.ValidationMessage de importação;
br.com.webcond.dao.CondominioDao de importação;
br.com.webcond.dao.LocatarioDao de importação;
br.com.webcond.dao.UnidadeDao de importação;
br.com.webcond.infra.Restrito de importação;
br.com.webcond.modelo.Locatario de importação;
import java.util.List;
br.com.caelum.vraptor.view.Results importação estática .
;

/ **
*

  • @ Author Onix

  • /
    @ Resource
    public class LocatarioController (

    private DAO LocatarioDao final;
    privado daoc CondominioDao final;
    privado Daou UnidadeDao final;
    Resultado resultado final privado;
    privado validator validador final;

    LocatarioController pública (LocatarioDao dao, CondominioDao daoc, UnidadeDao Daou, resultado Resultado, validator validador) (
    this.dao = dao;
    this.daoc = daoc;
    this.daou = Daou;
    resultado this.result =;
    validador this.validator =;
    )

    @ Restrito
    @ Path ( “locatario /”)
    @ Post
    public void adiciona (Locatario locatario) (
    if (dao.existeLocat (locatario)) (
    ValidationMessage (validator.add novo ( “Já existe um locatário com este nome.” locatario.nome "));
    )
    validator.addAll (Hibernate.validate (locatario)); / / importação do VRaptor
    validator.onErrorUse (lógica ()). viar (LocatarioController.class). Novo ();

     dao.salva (locatario);
     result.redirectTo (LocatarioController.class). Lista ();
    

    )

    @ Restrito
    @ Path ( “locatario / / (locatario.id)”)
    Put @
    Altera void (Locatario locatario) (
    validator.addAll (Hibernate.validate (locatario)); / / importação do VRaptor
    validator.onErrorUse (lógica ()). viar (LocatarioController.class). Edita ();

     dao.altera (locatario);
     result.redirectTo (LocatarioController.class). Lista ();
    

    )

    @ Restrito
    @ Path ( “locatario / / (id) / remover”)
    @ Delete
    public void remove (Integer id) (
    Locatario locatario = dao.carrega (id);
    locatario (dao.remove);
    result.redirectTo (LocatarioController.class). Lista ();
    )

    @ Restrito
    @ Path ( “locatario / / (id) / Edita”)
    @ Get
    Edita Locatario pública (Integer id) (
    result.include ( “condominios”, daoc.listaTudo ());
    result.include ( “unidades”, daou.listaTudo ());
    dao.carrega return (id);
    )

    @ Restrito
    @ Path ( “locatario /”)
    @ Get
    Lista public List () (
    dao.listaTudo retorno ();
    )

    @ Restrito
    @ Path ( “/ locatario / Novo”)
    @ Get
    Novo void () (
    result.include ( “condominios”, daoc.listaTudo ());
    result.include ( “unidades”, daou.listaTudo ());
    )

    @ Restrito
    @ Path ( “locatario / / (id) / Edita”)
    @ Post
    Edita void () (
    )
    )
    [/ code]

E o Dao

[code]
br.com.caelum.vraptor.ioc.Component importação;
br.com.webcond.modelo.Locatario de importação;
import java.util.List;
importação org.hibernatee .*;
org.hibernate.criterion.Restrictions de importação;

/ **
*

  • @ Author Onix

  • /
    @ Component
    public class LocatarioDao (

    private Session session;

    LocatarioDao pública (Session session) (
    sessão this.session =;
    )

    public void salva (Locatario locatario) (
    Transaction tx = session.beginTransaction ();
    locatario session.save ();
    session.close ();
    tx.commit ();
    session.close ();
    )

    public void remove (locatario Locatario) (
    Transaction tx = session.beginTransaction ();
    session.delete (locatario);
    session.close ();
    tx.commit ();
    session.close ();
    )

    Altera void (Locatario locatario) (
    Transaction tx = session.beginTransaction ();
    session.update (locatario);
    session.close ();
    tx.commit ();
    session.close ();
    )

    public void atualiza (Locatario locatario) (
    Transaction tx = session.beginTransaction ();
    this.session.update (locatario);
    session.close ();
    tx.commit ();
    session.close ();
    )

    existeLocat public boolean (Locatario locatario) (
    Locatario encontrado = (Locatario session.createCriteria) (Locatario.class). Add (Restrictions.eq ( “nome”, locatario.getNome ())). uniqueResult ();
    encontrado retorno! = null;
    )

    Carrega Locatario pública (Integer id) (
    return (Locatario this.session.load) (Locatario.class, id);
    )

    lista pública listaTudo () (
    this.session.createCriteria retorno (Locatario.class). list ();
    )
    )
    [/ code]

Se alguém puder me ajudar …
Serei Grato!

Vc tem um ComponentFactory para Session ?

tenho um CriadorDeSessionFactory

[code]import br.com.caelum.vraptor.ioc.ApplicationScoped;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.ComponentFactory;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

/**
*

  • @author Onix
    */
    @Component
    @ApplicationScoped
    public class CriadorDeSessionFactory implements ComponentFactory {

    private SessionFactory factory;

    @PostConstruct
    public void abre() {
    AnnotationConfiguration configuration = new AnnotationConfiguration();
    configuration.configure();

     this.factory = configuration.buildSessionFactory();
    

    }

    public SessionFactory getInstance() {
    return this.factory;
    }

    @PreDestroy
    public void fecha() {
    this.factory.close();
    }
    }
    [/code]

Seria isso?

nop seria um assim

[code] @Component
public class CriadorDeSession implements ComponentFactory<Session> {
CriadorDeSession(SessionFactory factory) {
//…
}

public  Session getInstance() {  
    this.session = this.factory.openSession;
    return session;
} 

 @PreDestroy  
 public void fecha() {  
     if (session != null && session.isOpen()) session.close();  
 }  

}[/code]

CriadorDeSession ?
Entendi errado sua pergunta… Foi mal

[code]import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.ComponentFactory;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.hibernate.*;

/**
*

  • @author Onix
    */
    @Component
    public class CriadorDeSession implements ComponentFactory {

    private final SessionFactory factory;
    private Session session;

    public CriadorDeSession(SessionFactory factory) {
    this.factory = factory;
    }
    @PostConstruct
    public void abre(){
    this.session = factory.openSession();
    }

    public Session getInstance() {
    return this.session;
    }
    @PreDestroy
    public void fecha(){
    this.session.close();
    }
    }[/code]

Mas como seria o CriadorDeSession se nas demais lógicas não dá erro?

bem estranho, pois ele esta relcmanado que não acha o construtor correto…

tem mais de 1 construtor não ? como o construtor vazio ?

Não tem!
E só dá erro nesta fase, apenas na hr de salvar um locatário!
Tudo funciona, menos isso!

vc esta usando _method=“put” na hora de enviar ?

Vc fala na view?
Na View eu to usando “POST”

O mais bizarro é saber que ele não encontra o construtor default da classe integer.

Será que é porque integer não possui um construtor padrão? :lol:

posta seu formulário de adição de locatários por favor

[code]<%@page contentType=“text/html;charset=ISO-8859-1” pageEncoding=“UTF-8”%>
<%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>

Novo Locatário "/>
  • ${error.category } - ${error.message }
" method="POST">
Locatário:
Condomínio: ${condominio.nome}
Unidade: ${unidade.nomeun}
Telefone:
E-mail:
Cadastrar
[/code]

Eu tive esse erro quando tentei usar o iogi. Tudo que é parametro de método ele tentava chamar o construtor padrão. Obvio que nos casos das wrappers dos tipos primitivos daria me***.

Pela stacktrace não me parece nada a ver com SessionFactory nem mesmo com a view. A impressão que tenho, posso estar errado, é algo interno na hora de injetar os parametros no método.

Você pode nos passar a stacktrace inteira, Ramon.Onix?

Uma observação: você não precisa dessa CriadorDeSession, pois o vraptor já faz isso para você: http://vraptor.caelum.com.br/documentacao/componentes-utilitarios-opcionais/

Sr. Garcia-jj, eu estou aprendendo ainda! E na apostila que estava seguindo tinha um criador de session… Mas eu vou ver como retiro!

Bom o Stack Trace ta ai como vc me pediu:

SEVERE: StandardWrapperValve[default]: PWC1406: Servlet.service() for servlet default threw exception br.com.caelum.vraptor.http.InvalidParameterException: Unable to find the correct constructor at br.com.caelum.vraptor.http.ognl.ReflectionBasedNullHandler.nullPropertyValue(ReflectionBasedNullHandler.java:98) at ognl.ASTProperty.getValueBody(ASTProperty.java:118) at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) at ognl.SimpleNode.getValue(SimpleNode.java:236) at ognl.ASTChain.setValueBody(ASTChain.java:222) at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220) at ognl.SimpleNode.setValue(SimpleNode.java:279) at ognl.Ognl.setValue(Ognl.java:737) at ognl.Ognl.setValue(Ognl.java:783) at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createViaOgnl(OgnlParametersProvider.java:133) at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:108) at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:90) at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.getParametersFor(ParametersInstantiatorInterceptor.java:83) at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:68) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42) at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:41) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:80) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:46) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:48) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59) at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:62) at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91) at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:55) at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:250) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:218) at org.apache.catalina.core.StandardWrapperValve.preInvoke(StandardWrapperValve.java:460) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:139) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:186) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:96) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:187) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:651) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1030) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:142) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:651) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1030) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:242) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:180) at com.sun.grizzly.http.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:633) at com.sun.grizzly.http.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:570) at com.sun.grizzly.http.DefaultProcessorTask.process(DefaultProcessorTask.java:827) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:152) at com.sun.enterprise.v3.services.impl.GlassfishProtocolChain.executeProtocolFilter(GlassfishProtocolChain.java:71) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:103) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:89) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:67) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:56) at com.sun.grizzly.util.WorkerThreadImpl.processTask(WorkerThreadImpl.java:325) at com.sun.grizzly.util.WorkerThreadImpl.run(WorkerThreadImpl.java:184) Caused by: java.lang.NoSuchMethodException: java.lang.Integer.<init>() at java.lang.Class.getConstructor0(Class.java:2706) at java.lang.Class.getDeclaredConstructor(Class.java:1985) at br.com.caelum.vraptor.http.ognl.GenericNullHandler.instantiate(GenericNullHandler.java:70) at br.com.caelum.vraptor.http.ognl.ReflectionBasedNullHandler.nullPropertyValue(ReflectionBasedNullHandler.java:79) ... 67 more

Só por curiosidade mudei o Integer unidade, na classe locatario, por String unidade, o erro não acontece mais ao salvar, mas não salva pq o Nome do Condominio não passou na validação, @Length(min = 3, max = 150).
A combo está vindo preenchida, mas na hr de enviar deve estar indo vazia! Seilá, agora só sei que nada sei!

Você não deve ter um parâmetro String unidade ou Integer unidade! Faça Unidade unidade; que vai funcionar… lembre-se de colocar @ManyToOne pro hibernate funcionar

Mas eu não queria “amarrar” a tabela locatário. Entende?

e o que não está funcionando é condominio, ele preenche a combo, mas não consegue salvar!

se você não vai usar relacionamento entre objetos, troque os nomes dos seus comboboxes para:

<select name="locatario.unidade">...
<select name="locatario.condominio">...

de qqer forma, qual é o seu motivo para não “amarrar” os objetos? Você perde um monte de funcionalidades legais do Hibernate quando vc não faz isso…

Lucas, mesmo fazendo como vc disse, não funciona ainda!
O combo condominio não passa na validação do Hiber.

Coloquei o private Unidade unidade, coloquei os Get&Set, mesmo assim o combo condominio, não passa, deve ter algo que não fiz ou errei!

Fiz como o Lucas falou e apaguei as tabelas do banco, funcionou direitinho!

vlw ai galera mais uma vez!
Obrigado Lucas, tu é o cara!