Commit 5a14f56b676accba053b26bef0bce88e3fc12a09
1 parent
21466017
Exists in
master
Mais ajustes para busca correta dos recursos no classloader
Showing
3 changed files
with
55 additions
and
11 deletions
Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractStrategyBootstrap.java
| ... | ... | @@ -36,6 +36,9 @@ |
| 36 | 36 | */ |
| 37 | 37 | package br.gov.frameworkdemoiselle.internal.bootstrap; |
| 38 | 38 | |
| 39 | +import java.io.FileNotFoundException; | |
| 40 | +import java.net.URL; | |
| 41 | + | |
| 39 | 42 | import javax.enterprise.event.Observes; |
| 40 | 43 | import javax.enterprise.inject.spi.BeforeBeanDiscovery; |
| 41 | 44 | import javax.enterprise.inject.spi.ProcessAnnotatedType; |
| ... | ... | @@ -44,6 +47,7 @@ import org.apache.commons.configuration.Configuration; |
| 44 | 47 | import org.apache.commons.configuration.PropertiesConfiguration; |
| 45 | 48 | |
| 46 | 49 | import br.gov.frameworkdemoiselle.configuration.ConfigurationException; |
| 50 | +import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader; | |
| 47 | 51 | import br.gov.frameworkdemoiselle.util.Reflections; |
| 48 | 52 | import br.gov.frameworkdemoiselle.util.Strings; |
| 49 | 53 | |
| ... | ... | @@ -91,7 +95,8 @@ public abstract class AbstractStrategyBootstrap<T, D extends T> extends Abstract |
| 91 | 95 | String key = null; |
| 92 | 96 | |
| 93 | 97 | try { |
| 94 | - Configuration config = new PropertiesConfiguration("demoiselle.properties"); | |
| 98 | + URL url = ConfigurationLoader.getResourceAsURL("demoiselle.properties"); | |
| 99 | + Configuration config = new PropertiesConfiguration(url); | |
| 95 | 100 | canonicalName = config.getString(getConfigKey(), getDefaultClass().getCanonicalName()); |
| 96 | 101 | |
| 97 | 102 | ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); |
| ... | ... | @@ -108,6 +113,9 @@ public abstract class AbstractStrategyBootstrap<T, D extends T> extends Abstract |
| 108 | 113 | } catch (ClassCastException cause) { |
| 109 | 114 | key = Strings.getString("{0}-class-must-be-of-type", typeName); |
| 110 | 115 | throw new ConfigurationException(getBundle().getString(key, canonicalName, getType())); |
| 116 | + | |
| 117 | + } catch (FileNotFoundException e) { | |
| 118 | + throw new ConfigurationException(getBundle().getString("file-not-found", "demoiselle.properties")); | |
| 111 | 119 | } |
| 112 | 120 | |
| 113 | 121 | return result; | ... | ... |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/ConfigurationLoader.java
| ... | ... | @@ -36,9 +36,11 @@ |
| 36 | 36 | */ |
| 37 | 37 | package br.gov.frameworkdemoiselle.internal.configuration; |
| 38 | 38 | |
| 39 | +import java.io.FileNotFoundException; | |
| 39 | 40 | import java.io.Serializable; |
| 40 | 41 | import java.lang.reflect.Field; |
| 41 | 42 | import java.lang.reflect.Method; |
| 43 | +import java.net.URL; | |
| 42 | 44 | import java.util.HashSet; |
| 43 | 45 | import java.util.Iterator; |
| 44 | 46 | import java.util.Properties; |
| ... | ... | @@ -49,7 +51,6 @@ import javax.validation.constraints.NotNull; |
| 49 | 51 | |
| 50 | 52 | import org.apache.commons.configuration.PropertiesConfiguration; |
| 51 | 53 | import org.apache.commons.configuration.SystemConfiguration; |
| 52 | -import org.apache.commons.configuration.XMLConfiguration; | |
| 53 | 54 | import org.slf4j.Logger; |
| 54 | 55 | |
| 55 | 56 | import br.gov.frameworkdemoiselle.annotation.Ignore; |
| ... | ... | @@ -208,17 +209,21 @@ public class ConfigurationLoader implements Serializable { |
| 208 | 209 | org.apache.commons.configuration.Configuration config = null; |
| 209 | 210 | |
| 210 | 211 | try { |
| 212 | + URL url; | |
| 213 | + | |
| 211 | 214 | switch (type) { |
| 212 | 215 | case SYSTEM: |
| 213 | 216 | config = new SystemConfiguration(); |
| 214 | 217 | break; |
| 215 | 218 | |
| 216 | 219 | case PROPERTIES: |
| 217 | - config = new PropertiesConfiguration(resource + ".properties"); | |
| 220 | + url = getResourceAsURL(resource + ".properties"); | |
| 221 | + config = new PropertiesConfiguration(url); | |
| 218 | 222 | break; |
| 219 | 223 | |
| 220 | 224 | case XML: |
| 221 | - config = new XMLConfiguration(resource + ".xml"); | |
| 225 | + url = getResourceAsURL(resource + ".xml"); | |
| 226 | + config = new PropertiesConfiguration(url); | |
| 222 | 227 | break; |
| 223 | 228 | |
| 224 | 229 | default: |
| ... | ... | @@ -301,4 +306,28 @@ public class ConfigurationLoader implements Serializable { |
| 301 | 306 | |
| 302 | 307 | return value; |
| 303 | 308 | } |
| 309 | + | |
| 310 | + public static URL getResourceAsURL(final String resource) throws FileNotFoundException { | |
| 311 | + final String stripped = resource.startsWith("/") ? resource.substring(1) : resource; | |
| 312 | + | |
| 313 | + URL url = null; | |
| 314 | + final ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); | |
| 315 | + | |
| 316 | + if (classLoader != null) { | |
| 317 | + url = classLoader.getResource(stripped); | |
| 318 | + } | |
| 319 | + | |
| 320 | + if (url == null) { | |
| 321 | + url = ConfigurationLoader.class.getResource(stripped); | |
| 322 | + } | |
| 323 | + if (url == null) { | |
| 324 | + url = ConfigurationLoader.class.getClassLoader().getResource(stripped); | |
| 325 | + } | |
| 326 | + | |
| 327 | + if (url == null) { | |
| 328 | + throw new FileNotFoundException(resource + " not found."); | |
| 329 | + } | |
| 330 | + | |
| 331 | + return url; | |
| 332 | + } | |
| 304 | 333 | } | ... | ... |
impl/core/src/main/java/br/gov/frameworkdemoiselle/util/ResourceBundle.java
| ... | ... | @@ -40,6 +40,7 @@ import java.io.Serializable; |
| 40 | 40 | import java.lang.reflect.Method; |
| 41 | 41 | import java.util.Enumeration; |
| 42 | 42 | import java.util.Locale; |
| 43 | +import java.util.MissingResourceException; | |
| 43 | 44 | import java.util.Set; |
| 44 | 45 | |
| 45 | 46 | public class ResourceBundle extends java.util.ResourceBundle implements Serializable { |
| ... | ... | @@ -47,17 +48,22 @@ public class ResourceBundle extends java.util.ResourceBundle implements Serializ |
| 47 | 48 | private static final long serialVersionUID = 1L; |
| 48 | 49 | |
| 49 | 50 | private String baseName; |
| 50 | - | |
| 51 | + | |
| 51 | 52 | private transient java.util.ResourceBundle delegate; |
| 52 | 53 | |
| 53 | 54 | private final Locale locale; |
| 54 | - | |
| 55 | + | |
| 55 | 56 | private java.util.ResourceBundle getDelegate() { |
| 56 | - if(delegate == null) { | |
| 57 | - ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); | |
| 58 | - delegate = ResourceBundle.getBundle(baseName, locale, classLoader); | |
| 57 | + if (delegate == null) { | |
| 58 | + try { | |
| 59 | + ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); | |
| 60 | + delegate = ResourceBundle.getBundle(baseName, locale, classLoader); | |
| 61 | + | |
| 62 | + } catch (MissingResourceException mre) { | |
| 63 | + delegate = ResourceBundle.getBundle(baseName, locale); | |
| 64 | + } | |
| 59 | 65 | } |
| 60 | - | |
| 66 | + | |
| 61 | 67 | return delegate; |
| 62 | 68 | } |
| 63 | 69 | |
| ... | ... | @@ -65,7 +71,7 @@ public class ResourceBundle extends java.util.ResourceBundle implements Serializ |
| 65 | 71 | this.baseName = baseName; |
| 66 | 72 | this.locale = locale; |
| 67 | 73 | } |
| 68 | - | |
| 74 | + | |
| 69 | 75 | @Override |
| 70 | 76 | public boolean containsKey(String key) { |
| 71 | 77 | return getDelegate().containsKey(key); |
| ... | ... | @@ -104,6 +110,7 @@ public class ResourceBundle extends java.util.ResourceBundle implements Serializ |
| 104 | 110 | } catch (Exception cause) { |
| 105 | 111 | throw new RuntimeException(cause); |
| 106 | 112 | } |
| 113 | + | |
| 107 | 114 | return result; |
| 108 | 115 | } |
| 109 | 116 | } | ... | ... |