2010-10-26 7 views
1

Je dois passer un dossier (java.io.File) en tant que paramètre de fonction.ressource de contenu du dossier spring injectée dans le bean

J'ai essayé de déclarer simplement l'emplacement du dossier, mais il semble dans SERVER_HOME (/ home/user/tomcat). Donc, mon prochain essai consiste à injecter un fichier (répertoire) qui se trouve dans WEB-INF/myFolder.

mon premier essai a échoué:
<bean name="path" class="java.io.File">
<constructor-arg value="classpath:WEB-INF/myFolder" />
</bean>

Mais il recherche/home/user/tomcat/classpath: WEB-INF/myFolder

J'ai été déconner, mais je ne peux pas comment le faire.

Toute aide ou conseil serait formidable.

Merci à tous!

Répondre

2

de printemps Vous n'êtes pas censé accéder au système de fichiers à partir d'une webapp, en particulier de ne pas faire des hypothèses sur les webapps propre représentation de fichiers. WEB-INF/myfolder peut ou non être un répertoire, selon que vous avez affaire à un WAR (non) ou à un WAR explose (oui). Si vous avez absolument besoin d'une ressource de système de fichiers, essayez de l'acquérir en utilisant System.getPreference("java.io.tmpdir").


OK, voici quelques conseils:

Utilisez un Factory bean pour récupérer le fichier. Laissez-

  1. Create a temporary directory
  2. Extract the contents of the jar dans ce répertoire temporaire
  3. retour le répertoire temporaire dans sa getObject() méthode

Injecter le haricot d'usine dans votre haricot:

<!-- This is a Factorybean that creates a file --> 
<bean class="com.yourcompany.ConfigFolderCreator" id="configDir"> 
    <property name="packageToUnpack" value="com.yourcompany.yourpackage" /> 
</bean> 

<bean class="com.your.legacy.Api"> 
    <!-- inject the factory bean instead of a file --> 
    <property name="configFolder" ref="configDir" /> 
</bean> 
+0

@seanizer: merci pour votre réponse, ce dont j'ai besoin, c'est d'accéder, via un fichier java.io.File, à un dossier contenant des fichiers de configuration. Le morceau de code qui a besoin de ces fichiers est un code hérité que je ne peux pas modifier. Ces fichiers peuvent être dans un fichier jar? sinon, et pour le rendre indépendant de l'environnement, je pense au classpath. Une idée? Désolé pour ce désordre d'un commentaire, mais mon anglais est plutôt pauvre. – ssedano

+0

Non, 'fichiers' dans un fichier Jar ou fichiers non, ce sont des entrées zip. Et par conséquent, ils ne peuvent pas être accessibles via les méthodes de fichiers. Donc, si vous avez absolument besoin d'utiliser les méthodes File, vous devrez extraire le pot quelque part. –

+0

@seanizer: Ok, donc je pensais à envoyer l'application avec un dossier sous WEB-INF et y placer les fichiers de configuration. Ensuite, accédez via l'injection de printemps à ce répertoire. C'est possible? – ssedano

0

Vous pouvez utiliser FileSystemResource classe

<bean id="bean" class="org.springframework.core.io.FileSystemResource"> 
     <constructor-arg><value>your.file</value></constructor-arg> 
</bean> 
+0

Merci , il est possible que "your.file" soit un dossier et comment accéder t s'il se trouve dans le dossier WEB-INF /. myApp/WEB-INF/dossier. Je vous remercie ! – ssedano

Questions connexes