Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Mensagem de erro na aula 9

Quando inicio o Tomcat 8 é mostrada a seguinte mensagem:

GRAVE: Exception starting filter vraptor javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Double. at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.verifyResolveWasUnique(ConstraintValidatorManager.java:218) at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.findMatchingValidatorClass(ConstraintValidatorManager.java:193) at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.getInitializedValidator(ConstraintValidatorManager.java:97) at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:125) at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateComposingConstraints(ConstraintTree.java:233) at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:102) at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintTree.validateConstraints(ConstraintTree.java:91) at org.hibernate.validator.internal.metadata.core.MetaConstraint.validateConstraint(MetaConstraint.java:85) at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:478) at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:424) at org.hibernate.validator.internal.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:388) at org.hibernate.validator.internal.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:340) at org.hibernate.validator.internal.engine.ValidatorImpl.validate(ValidatorImpl.java:158) at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:137) at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:95) at org.hibernate.action.internal.EntityIdentityInsertAction.preInsert(EntityIdentityInsertAction.java:202) at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:91) at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:480) at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:191) at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:175) at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:210) at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:324) at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:288) at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:194) at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125) at org.hibernate.jpa.event.internal.core.JpaPersistEventListener.saveWithGeneratedId(JpaPersistEventListener.java:84) at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:206) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:149) at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:75) at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:807) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:780) at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:785) at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1181) at br.com.caelum.vraptor.observers.InitialDataObserver.insert(InitialDataObserver.java:29) 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:606) at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93) at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266) at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253) at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232) at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169) at org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165) at org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119) at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112) at org.jboss.weld.event.EventImpl.fire(EventImpl.java:83) at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:92) at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279) at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4583) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5207) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) Alguém sabe o motivo?

Att. Lincoln John

7 respostas

Olá Lincoln! Por favor, nos envie seu código para que possamos analisar e te ajudar com o problema.

Bom dia Romário, vou enviar as classes novas que foram implementadas nos exercícios das aulas 8 e 9, pois até em tão estava tudo funcionando bem.

package br.com.caelum.vraptor.interceptor;

import javax.inject.Inject;

import br.com.caelum.vraptor.Accepts;
import br.com.caelum.vraptor.AroundCall;
import br.com.caelum.vraptor.Intercepts;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.anotations.Public;
import br.com.caelum.vraptor.controller.ControllerMethod;
import br.com.caelum.vraptor.controller.LoginController;
import br.com.caelum.vraptor.controller.UsuarioLogado;

@Intercepts
public class AutorizadorInterceptor {

    private final UsuarioLogado usuarioLogado;
    private final Result result;
    private final ControllerMethod controllerMethod;


     @Inject
        public AutorizadorInterceptor(Result result, 
                UsuarioLogado usuarioLogado, ControllerMethod controllerMethod) {
            this.result = result;
            this.usuarioLogado = usuarioLogado;
            this.controllerMethod = controllerMethod;
        }

    @Accepts
     public boolean accepts(){
        return !controllerMethod.containsAnnotation(Public.class);
    }

    @AroundCall
    public void intercepta(SimpleInterceptorStack stack){

        if(usuarioLogado.getUsuario()==null){
            result.redirectTo(LoginController.class).formulario();
            return;
        }

        stack.next();


    }

}


package br.com.caelum.vraptor.anotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Public {

}


package br.com.caelum.vraptor.interceptor;

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

import br.com.caelum.vraptor.AfterCall;
import br.com.caelum.vraptor.BeforeCall;
import br.com.caelum.vraptor.Intercepts;

@Intercepts (after=AutorizadorInterceptor.class)
public class ControleDeTransacaoInterceptor {

    @Inject private EntityManager em;

    @BeforeCall
    public void before(){
        em.getTransaction().begin();

    }

    @AfterCall
    public void after(){
        em.getTransaction().commit();

    }


}

package br.com.caelum.vraptor.controller;

import javax.inject.Inject;

import br.com.caelum.vraptor.Controller;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.anotations.Public;
import br.com.caelum.vraptor.dao.UsuarioDao;
import br.com.caelum.vraptor.model.Usuario;
import br.com.caelum.vraptor.validator.I18nMessage;
import br.com.caelum.vraptor.validator.Validator;

@Controller
public class LoginController {

    private final UsuarioDao dao;
    private final Validator validator;
    private final Result result;
    private final UsuarioLogado usuarioLogado;

    @Inject
    public LoginController(UsuarioDao dao, Validator validator, 
            Result result, UsuarioLogado usuarioLogado) {
        this.dao = dao;
        this.validator = validator;
        this.result = result;
        this.usuarioLogado = usuarioLogado;
    }

    public LoginController() {
        this(null,null,null,null);
    }




    @Public
    @Get
    public void formulario(){

    }

    @Public
    @Post 
    public void autentica(Usuario usuario){
        if(!dao.existe(usuario)){
            validator.add(new I18nMessage("login", "login.invalido"));
            validator.onErrorUsePageOf(this).formulario();

        }
        usuarioLogado.setUsuario(usuario);
        result.redirectTo(ProdutoController.class).lista();

    }

}
package br.com.caelum.vraptor.controller;

import java.io.Serializable;

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

import br.com.caelum.vraptor.model.Usuario;

@SessionScoped
@Named
public class UsuarioLogado implements Serializable{

    private static final long serialVersionUID = 1L;

    private Usuario usuario;


    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

}

package br.com.caelum.vraptor.producers;

import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;

import br.com.caelum.vraptor.util.JPAUtil;

public class EntityManageProducers {

    @Produces
    @RequestScoped
    public EntityManager criaEM(){
        return JPAUtil.criaEntityManager();
    }

}

Agradeço o contato.

Lincoln John

Romario, não sei porque marcou com resolvido?

Lincoln, não fui eu que marquei como resolvido, mas não se preocupe, que irei olhar seu código e te ajudar, porém se quiser abrir um novo tópico tudo bem.

Lincoln, em sua classe AutorizadorInterceptor faltou implementar o Construtor:

 public AutorizadorInterceptor() {
    super(null, null, null)
    }

Romário, quando coloco o construtor dá o seguinte erro: The constructor Object(null, null, null) is undefined

solução!

Romário, resolvi o problema. Na internet havia algumas recomendação para não utilizar a notação @NotEmpty, retirei da classe Produto e não deu mais erro.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software