Bonjour,
Je cherche juste à implémenter un filtre sur la reception d'une requête dans tomcat.
Alors tout est OK mais dans la méthode init() du filtre, je cherche à loader un ressource bundle (toto.properties) pour avoir une map des cles/valeurs dans le code.
Le problème est que je n'arrive pas à loader le ressource bundle qui est pourtant dans le classpath.
Voici le code (qui normalement marche car je l'ai récupérer) :
Code :
- @Override
- public void init(FilterConfig conf) throws ServletException {
- String propsLocation = conf.getInitParameter( "mappingFileLocation" );
- if (propsLocation == null)
- {
- log.warn( "No filter init parameter 'mappingFileLocation' set (should refer to file in classpath)" );
- propsLocation = "themefilter.properties";
- }
- props = new Properties();
- try
- {
- //Get the System Classloader
- ClassLoader sysClassLoader = ClassLoader.getSystemClassLoader();
- //Get the URLs
- URL[] urls = ((URLClassLoader) sysClassLoader).getURLs();
- for (URL url : urls)
- {
- System.out.println( url.getFile() );
- }
- URL url = Thread.currentThread().getContextClassLoader()
- .getParent().getResource( propsLocation );
- InputStream propsStream = this.getClass().getResourceAsStream(
- propsLocation );
- if (propsStream != null)
- {
- props.load( propsStream );
- }
- else
- {
- log.warn( "Filter file " + propsLocation
- + " couldn't be read in classpath" );
- }
- log.debug( "Successfully read site to theme properties file from "
- + propsLocation + " in classpath" );
- }
- catch (IOException e)
- {
- log.warn( "Failed to read theme properties from "
- + propsLocation
- + " (mappingFileLocation filter init parameter) in classpath." );
- }
- }
|
Alors dans l'instruction
Code :
- System.out.println( url.getFile() );
|
J'affiche les classpath normalement de mon thread courant (unique) et ça m'affiche
/C:/alfresco-community-tomcat-share-dev-3.3g/tomcat/bin/bootstrap.jar
/C:/Program%20Files/Java/jdk1.6.0_21/lib/tools.jar |
Je suppose que mon .properties dans WEB-INF/classes est dans le classpath pourtant....et pourtant impossible de le charger !
J'ai essaié en rajoutant le code :
Code :
- URL url = Thread.currentThread().getContextClassLoader()
- .getParent().getResource( propsLocation );
|
mais url est toujours null (comme inputStream d'ailleurs)
Voici le code dans le web.xml :
Code :
- <filter>
- <description>Add theme parameter to requests</description>
- <filter-name>ThemeFilter</filter-name>
- <filter-class>fr.intuitiv.module.fds.servlet.ThemeFilter</filter-class>
- <init-param>
- <description>Location of mapping file from sites to themes</description>
- <param-name>mappingFileLocation</param-name>
- <param-value>themefilter.properties</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>ThemeFilter</filter-name>
- <url-pattern>/page/site/*</url-pattern>
- </filter-mapping>
|
Une idée ?