IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Initialisation de Bean : notWritablePropertyException


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 1
    Par défaut Initialisation de Bean : notWritablePropertyException
    Bonjour

    Je début avec l'utilisation de Spring et j'ai un petit problème à l'initialisation d'une bean (du moins je pense).

    Au démarrage de Tomcat, j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    15:44:36,578 ERROR [org.springframework.web.context.ContextLoader] Context initialization failed
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'download-file' defined in file [C:\alfresco-env\alfresco\tomcat\webapps\alfresco\WEB-INF\classes\alfresco\extension\download-file-action-context.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'exchangeServerIP' of bean class [org.alfresco.customUI.actions.DownloadActionExecuter]: Bean property 'exchangeServerIP' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
    J'ai lu la FAQ Spring et notamment l'exemple "Comment injecter des propriétés de type simple ?" mais j'ai cette erreur et je ne trouve pas son origine :/

    Je vous joins le contenu de mon fichier de context:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <beans>
     
        <!-- Download Action Bean -->
        <bean id="download-file" class="org.alfresco.customUI.actions.DownloadActionExecuter" parent="action-executer">
        	<property name="nodeService">
    			<ref bean="NodeService" />
    		</property>
    		<property name="exchangeServerIP" value="192.168.20.241" />
    		<property name="fileServerIP" value="192.168.20.221" />
    		<property name="filesRootFolderPath" value="/company/shared/" />
    		<property name="publicAction">
            	<value>false</value>
          	</property>
     
    	</bean>
     
       	<!-- Action properties -->
    	<bean id="extension.actionResourceBundles" parent="actionResourceBundles">
    		<property name="resourceBundles">
    			<list>
    				<value>alfresco.extension.download-file-action-messages</value>
    			</list>
    		</property>
    	</bean>
     
    </beans>
    Ainsi que le début de la classe DownloadActionExecuter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public class DownloadActionExecuter extends ActionExecuterAbstractBase {
     
    	public final static String NAME = "download-file";
    	public static final String PARAM_FILES_ROOT = "filesRootFolderPath";
    	public static final String PARAM_EXCHANGESERV_IP = "exchangeServerIP";
    	public static final String PARAM_FILESERV_IP = "fileServerIP";
     
    	protected NodeService nodeService;
     
    	public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; }
     
    	private String exchangeServerIP;
     
    	public void SetExchangeServer(String exchangeServerIP){ this.exchangeServerIP = exchangeServerIP; }
    	public String getExchangeServer(){ return this.exchangeServerIP; }
     
    	private String fileServerIP;
     
    	public void setFileServer(String filerServerIP){ this.fileServerIP = filerServerIP; }	
    	public String getFileServer(){ return this.fileServerIP; }
     
    	private String filesRootFolderPath;
     
    	public void setFilesRootFolder(String filesRootFolderPath){ this.filesRootFolderPath = filesRootFolderPath; }
    	public String getFilesRootFolder(){ return this.filesRootFolderPath; }
    Merci pour l'aide que vous pourrez m'apporter

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    exchangeServerIP est une variable membre privée, donc ni Spring, ni personne d'autre que la classe DownloadActionExecuter, ne peut y toucher.

    Ce n'est pas mal en soi (c'est même probablement bien,) mais en attendant ça veut dire que Spring doit trouver un moyen de donner une valeur à cette variable.

    En général, pour ça, on crée des getter/setter sur les variables membres qui doivent pouvoir être lues/écrites. Dans le cas présent, il te faut une méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void setExchangeServerIP(String exchangeServerIP) {
      this.exchangeServerIP = exchangeServerIP;
    }
    Je note que tu as déjà une méthode SetExchangeServer() qui fait ça... Oui, mais Spring ne va pas deviner qu'il faut chercher ça pour une propriété nommée exchangeServerIP.
    La méthode doit commencer par "set", en minuscules, puis par la première lettre de la propriété, en majuscule (et cette propriété doit commencer, elle, par une minuscule. Principe de la notation en camelCase.) Et le reste doit s'appeler exactement pareil.

    Note : bien que ça n'est pas grand-chose à voir avec le problème, c'est une convention bien pratique de faire la même chose avec les getters. En gros, quand on fait comme tout le monde, tout le monde nous comprend.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Framework] Initialisation des beans Spring via un fichier properties
    Par lionel84 dans le forum Spring
    Réponses: 2
    Dernier message: 01/07/2011, 11h43
  2. [Data] Initialisation des Beans
    Par Marneus dans le forum Spring
    Réponses: 1
    Dernier message: 05/08/2009, 19h26
  3. Initialiser les beans au demarrage
    Par Alec6 dans le forum Struts 1
    Réponses: 5
    Dernier message: 26/03/2009, 14h04
  4. initialiser un bean
    Par adamo901 dans le forum Struts 2
    Réponses: 0
    Dernier message: 30/08/2008, 02h32
  5. Appel de methode aprés initialisation du bean
    Par brasselyd dans le forum Spring
    Réponses: 1
    Dernier message: 23/03/2007, 11h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo