Pergunta

Qualquer idéia por que estou recebendo essa exceção?

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myService' defined in class path resource [context.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type [$Proxy54 implementing org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised,net.sf.cglib.proxy.Factory,org.springframework.beans.factory.InitializingBean] to required type [com.mycompany.service.dao.MyDAO] for property 'myDAO'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy54 implementing org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised,net.sf.cglib.proxy.Factory,org.springframework.beans.factory.InitializingBean] to required type [com.mycompany.service.dao.MyDAO] for property 'myDAO': no matching editors or conversion strategy 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:222)
    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.findAutowireCandidates(DefaultListableBeanFactory.java:671)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:610)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredMethodElement.inject(AutowiredAnnotationBeanPostProcessor.java:499)
    ... 36 more
Caused by: java.lang.IllegalArgumentException: Cannot convert value of type [$Proxy54 implementing org.springframework.aop.SpringProxy,org.springframework.aop.framework.Advised,net.sf.cglib.proxy.Factory,org.springframework.beans.factory.InitializingBean] to required type [com.mycompany.service.dao.MyDAO] for property 'myDAO': no matching editors or conversion strategy found
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:231)
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:138)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:386)
... 62 more
Foi útil?

Solução

Eu suspeito que se ProdMiscDAO foi uma interface (é?) Você não teria esse erro. Eu acredito que você provavelmente tem uma classe que está sendo proxy usando cglib sob o capô, realizando magia, etc. e, no final, não pode ser convertido com segurança a um paramter em um setter ou construtor. Tente programar para uma interface e ver se o erro desaparece.

Atualização : ProdMiscDAO não é uma interface. É uma classe que estende SqlMappedClientDaoSupport.

Diante disso, eu recomendo tentar este:

  1. Rename ProdMiscDAO para SqlMappedProdMiscDAO.
  2. Extrato de uma interface de SqlMappedProdMiscDAO chamado ProdMiscDAO (por exemplo, "class SqlMappedProdMiscDAO implements ProdMiscDAO")
  3. Vá até todo o seu código que usa SqlMappedProdMiscDAO e alterá-lo para uso ProdMiscDAO.
  4. Configurar mola para instanciar um SqlMappedProdMiscDAO, fiação-lo todas as classes que necessitam.

Isso permite que sua implementação DAO ainda estender SqlMappedClientDaoSupport mas também para ter uma interface. Depois da comutação todas as classes de usar a interface em vez da classe, Primavera não terá que usar cglib de proxy para DAO e o erro deve ir embora.

Outras dicas

Spring usa proxies, gerados em tempo de execução das interfaces, para fazer coisas como transações, aspectos, etc. O idioma Primavera adequado para objetos como DAOs, serviços, etc. é começar com uma interface e criar uma implementação concreta. Uma vez que você tem isso, você está livre para gerar proxies a partir da interface conforme necessário.

Então é claro que você vai ter uma implementação concreta DAO, e isso é livre para estender SqlMapClientDaoSupport se quiser, mas também criar uma interface que tem seus métodos.

Certifique-se de que você realmente precisa para estender SqlMapClientDaoSupport. Pode ser que a composição e a delegação é a melhor maneira de ir.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top