InvalidPropertyException (spring) [Resolvido]

4 respostas
M

Bom dia a todos,
Estou tendo a seguinte exceção:

Exception in thread "AWT-EventQueue-0" java.lang.ExceptionInInitializerError
	at sca.app.AbrirTurmaPresenter.validarMatricula(AbrirTurmaPresenter.java:84)
	at sca.app.AbrirTurmaPresenter.actionPerformed(AbrirTurmaPresenter.java:53)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'salaRepositorio' defined in file [C:\workspace\SCA - TCC\resources\ctx\sca-springConfig.xml]: Initialization of bean failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'salaDAO' of bean class [sca.domain.repositorio.SalaRepositorio]: No property 'salaDAO' found
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:480)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:221)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:729)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:381)
	at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:140)
	at org.springframework.context.support.FileSystemXmlApplicationContext.<init>(FileSystemXmlApplicationContext.java:84)
	at sca.domain.repositorio.RepositorioFabrica.<clinit>(RepositorioFabrica.java:11)
	... 27 more
Caused by: org.springframework.beans.InvalidPropertyException: Invalid property 'salaDAO' of bean class [sca.domain.repositorio.SalaRepositorio]: No property 'salaDAO' found
	at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:382)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1288)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1249)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1010)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:472)
	... 41 more

Mas não consigo encontrar o erro,pois fiz o .xml do spring:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx.xsd">

	<!--  DAOS -->
	<bean id="salaDAO" class="sca.infra.dao.SalaDAOJpa"/>
	
	<!--  REPOSITORIES -->
	
	<bean id="salaRepositorio" class="sca.domain.repositorio.SalaRepositorio">
		<property name="salaDAO">
			<ref local="salaDAO"/>
		</property>
	</bean>

	<!--  DEMAIS BEANS -->
	<bean id="estrategiaCalculoGrau" class="sca.domain.EstrategiaCalculoGrau2009" />

	<bean id="inscricao" class="sca.domain.Inscricao">
		<property name="estrategiaCalculoGrau">
			<ref local="estrategiaCalculoGrau" />
		</property>
	</bean>

</beans>

A classe de domínio referida está no arquivo de persistência:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
	xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
	<persistence-unit name="SCAPU" transaction-type="RESOURCE_LOCAL">

		<class>sca.domain.Sala</class>

		<properties>
			<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />

			<property name="hibernate.connection.url"
				value="jdbc:hsqldb:hsql://localhost/SCADB" />

			<property name="hibernate.connection.username" value="sa" />
			<property name="hibernate.connection.password" value="" />
			<property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" />
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
			<property name="hibernate.hbm2ddl.auto" value="update" />
			<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider" />
		</properties>
	</persistence-unit>
</persistence>

A classe de fábrica de repositórios já tem o bean:

package sca.domain.repositorio;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class RepositorioFabrica {

	private static String rootContextDirectoryClassPath = "resources/ctx";
	private static String startupContextPath = rootContextDirectoryClassPath
			+ "/sca-springConfig.xml";
	private static ApplicationContext ctx = new FileSystemXmlApplicationContext(
			startupContextPath);


	public static SalaRepositorio getSalaRepositorio(){
		return (SalaRepositorio) ctx
			.getBean("salaRepositorio");
	}
	
}

E a classe de repositório está feita:

package sca.domain.repositorio;

import java.util.List;

import sca.domain.Sala;
import sca.infra.dao.DAOException;
import sca.infra.dao.SalaDAO;

public class SalaRepositorio {

	private SalaDAO salaDAO;

	public void setSalaDao(SalaDAO salaDAO) {
		this.salaDAO = salaDAO;
	}

	public void incluir(Sala sala) throws RepositorioException {
		try {
			salaDAO.incluir(sala);
		} catch (DAOException e) {
			throw new RepositorioException(e.getMessage(), e);//"Erro na inclusão da sala"
		}
	}

	public void excluir(Sala sala) throws RepositorioException {
		try {
			salaDAO.excluir(sala);
		} 
		catch (DAOException e) {
			throw new RepositorioException("Erro na exclusão da Sala", e);
		}
	}
	
	public List<Sala> obterTodasSalas()throws RepositorioException{
		try{
			return salaDAO.obterTodasSalas();
		}catch (DAOException e) {
			throw new RepositorioException("Erro na recuperação das Salas", e);
		}
	}

}

A classe que conecta com o banco também está feita:

package sca.infra.dao;

import java.util.List;

import sca.domain.Sala;


public class SalaDAOJpa implements SalaDAO{

	private GenericDAOJPA<Sala> genericDAO = new GenericDAOJPA<Sala>();

	public void atualizar(Sala sala) throws DAOException {
		genericDAO.alterar(sala);
	}

	@Override
	public void excluir(Sala sala) throws DAOException {
		genericDAO.excluir(Sala.class, sala.getId());
	}

	@Override
	public void incluir(Sala sala) throws DAOException {
		genericDAO.incluir(sala);
	}
	
	@Override
	public List<Sala> obterTodasSalas()throws DAOException{
		return genericDAO.obterTodos(Sala.class);
	}
}

e a interface também:

package sca.infra.dao;

import java.util.List;

import sca.domain.Sala;

public interface SalaDAO {

	void excluir(Sala sala) throws DAOException;

	void incluir(Sala sala) throws DAOException;

	List<Sala> obterTodasSalas() throws DAOException;

}

Estou desesperado, pois meu tempo já é curto e não posso perdê-lo com isso.

4 Respostas

romarcio

tentou colocaro o bean salaDAO no contexto do spring?

public static ...{ return (SalaDAO) ctx.getBean("salaDAO"); }

M

Na verdade, a classe RepositorioFabrica é assim:

package sca.domain.repositorio;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class RepositorioFabrica {

	private static String rootContextDirectoryClassPath = "resources/ctx";
	private static String startupContextPath = rootContextDirectoryClassPath
			+ "/sca-springConfig.xml";
	private static ApplicationContext ctx = new FileSystemXmlApplicationContext(
			startupContextPath);

	public static ProfessorRepositorio getProfessorRepositorio() {
		return (ProfessorRepositorio) ctx.getBean("professorRepositorio");
	}

	public static DisciplinaRepositorio getDisciplinaRepositorio() {
		return (DisciplinaRepositorio) ctx.getBean("disciplinaRepositorio");
	}

	public static GradeDisponibilidadeRepositorio getGradeDisponibilidadeRepositorio() {
		return (GradeDisponibilidadeRepositorio) ctx
				.getBean("gradeDisponibilidadeRepositorio");
	}

	public static TitulacaoRepositorio getTitulacaoRepositorio() {
		return (TitulacaoRepositorio) ctx
				.getBean("titulacaoRepositorio");
	}

	public static AlunoRepositorio getAlunoRepositorio() {
		return (AlunoRepositorio) ctx.getBean("alunoRepositorio");
	}

	public static TurmaRepositorio getTurmaRepositorio() {
		return (TurmaRepositorio) ctx.getBean("turmaRepositorio");
	}

	public static InscricaoRepositorio getInscricaoRepositorio() {
		return (InscricaoRepositorio) ctx.getBean("inscricaoRepositorio");
	}

	public static ItemDisponibilidadeRepositorio getItemDisponibilidadeRepositorio() {
		return (ItemDisponibilidadeRepositorio) ctx
				.getBean("itemDisponibilidadeRepositorio");
	}
	
	public static SemestresCursadosRepositorio getSemestresCursadosRepositorio(){
		return (SemestresCursadosRepositorio) ctx
			.getBean("semestresCursadosRepositorio");
	}
	
	public static SemestreLetivoRepositorio getSemetreLetivoRepositorio(){
		return (SemestreLetivoRepositorio) ctx
			.getBean("semetreLetivoRepositorio");
	}

	public static SalaRepositorio getSalaRepositorio(){
		return (SalaRepositorio) ctx
			.getBean("salaRepositorio");
	}
	
}

Onde todos os repositórios funcionam perfeitamente, o problema é com a salaRepositorio, que acabei de adicionar.

LucianoM86

O problema é o seguinte.

Na sua classe Java está assim:

..
private SalaDAO salaDAO;  
   
     public void setSalaDao(SalaDAO salaDAO) {  
         this.salaDAO = salaDAO;  
     }

Nesse caso ele vai injetar a propriedade salaDao e nao salaDAO…é só alterar no xml do spring para:

..
     <bean id="salaRepositorio" class="sca.domain.repositorio.SalaRepositorio">  
         <property name="salaDao">  
             <ref local="salaDAO"/>  
         </property>  
     </bean>  
..

Ou mudar seu metodo set para
public void setSalaDAO…

M

Meu Deus!!! Que coisa horrível!! Eu num sabia que até os métodos teriam que ter case sensitive com jpa.
Muitíssimo obrigado, Luciano.

Criado 26 de julho de 2010
Ultima resposta 26 de jul. de 2010
Respostas 4
Participantes 3