2014-04-16 8 views
6

mi sono bloccato su questo errore riportati di seguito:org.springframework.beans.NotWritablePropertyException: proprietà 'adminEmails' non valido di classe bean

Stack Trace

Apr 16, 2014 12:21:23 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 
INFO: Loading XML bean definitions from class path resource [beans.xml] 
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'collectionsWithProps' defined in class path resource [beans.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'adminEmails' of bean class [com.student.spring.impl.CollectionsWithProps]: Bean property 'adminEmails' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1396) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1118) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at com.student.spring.test.MyTest.main(MyTest.java:26) 
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'adminEmails' of bean class [com.student.spring.impl.CollectionsWithProps]: Bean property 'adminEmails' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? 
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1064) 
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:924) 
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:76) 
    at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:58) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1393) 
    ... 8 more 

Ecco la mia MyTest.java

package com.student.spring.test; 

import java.util.Properties; 

import org.springframework.beans.factory.BeanFactory; 
import org.springframework.beans.factory.xml.XmlBeanFactory; 
import org.springframework.core.io.ClassPathResource; 
import org.springframework.core.io.Resource; 

import com.student.spring.impl.CollectionsWithProps; 

@SuppressWarnings("deprecation") 
public class MyTest { 
    public static void main(String[] args) { 
     Resource resource = new ClassPathResource("beans.xml"); 
     BeanFactory beanFactory = new XmlBeanFactory(resource); 

     CollectionsWithProps cWP = (CollectionsWithProps) beanFactory 
       .getBean("collectionsWithProps"); 
     System.out.println(cWP); 
    } 
} 

Ecco CollectionsWithProps.ja va

package com.student.spring.impl; 

import java.util.Properties; 

public class CollectionsWithProps { 
    private Properties emails=null; 
    public Properties getEmails() { 
     return emails; 
    } 
    public void setEmails(Properties emails) { 
     this.emails = emails; 
    } 
    public String toString(){ 
     return "College [Props=" + emails + "]"; 
    } 
} 

Ecco il mio beans.xml

<?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:p="http://www.springframework.org/schema/p" 

    xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 

    <bean id="collectionsWithProps" class="com.student.spring.impl.CollectionsWithProps"> 
     <property name="adminEmails"> 
      <props> 
       <prop key="admin">[email protected]</prop> 
       <prop key="support">[email protected]"></prop> 
       <prop key="hr">[email protected]</prop> 
      </props> 
     </property> 
    </bean> 
</beans> 
+0

Puoi pubblicare il codice per CollectionsWithProps? – geoand

+0

Ho aggiunto COllectionsWithProps.java –

risposta

5

Nel beans.xml si sta tentando di impostare il campo adminEmails di CollectionsWithProps. Tuttavia la classe non ha quel campo, ha il campo emails.

O fissare beans.xml di usare messaggi di posta elettronica al posto di adminEmails, o correggere il codice sorgente di CollectionsWithProps essere rinominare emails-adminEmails (insieme con i getter e setter)

+0

ho corretto bean.xml e cambiato "adminEmails" in "email". Funziona, ma quando provo a correggere "email" in COllectionsWithProps.java con "adminEmails" in setter e getter sto ricevendo errore precedente di nuovo, cosa sto facendo male per favore dimmi ... –

+0

Hai nominato il campo 'adminEmails', i getters' getAdminEmails' e i setter 'setAdminEmails'? – geoand

+0

Grazie, ho trovato la soluzione. Ma vuole fare una domanda perché è necessario dare un nome al getter come getAdminEmails e setter come setAdminEmails? –

1

C'è nome della proprietà non corrispondente:

private Properties emails=null; 

dovrebbe essere idealmente:

private Properties adminEmails=null; 

getter e setter dovrebbero essere rinominati di conseguenza. Questo corrisponderà a ciò che hai menzionato nei file di configurazione.

+0

Grazie a @Himanshu per l'aiuto ... –

0

ho avuto lo stesso problema e ha ottenuto risolto semplicemente rimuovendo getter. Come ho richiesto solo setter per la mia applicazione. A volte Spring dà questo errore.

Problemi correlati