Commit 5b13ae54e703ead7cbabd40a1eadfbecb6823ae4
1 parent
35c73525
Exists in
master
Implementado o seguinte comportamento: quando não for encontrada uma
classe extratora para um determinado campo, será lançada uma ConfigurationException, com uma mensagem apropriada e ClassNotFoundException como causa. Os testes da classe ConfigurationCUstomFieldTest foram ajustados para esperar esse comportamento
Showing
4 changed files
with
11 additions
and
6 deletions
Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/ConfigurationLoader.java
@@ -126,7 +126,8 @@ public class ConfigurationLoader implements Serializable { | @@ -126,7 +126,8 @@ public class ConfigurationLoader implements Serializable { | ||
126 | Name annotation = field.getAnnotation(Name.class); | 126 | Name annotation = field.getAnnotation(Name.class); |
127 | 127 | ||
128 | if (annotation != null && Strings.isEmpty(annotation.value())) { | 128 | if (annotation != null && Strings.isEmpty(annotation.value())) { |
129 | - throw new ConfigurationException(getBundle().getString("configuration-name-attribute-cant-be-empty")); | 129 | + throw new ConfigurationException(getBundle().getString("configuration-name-attribute-cant-be-empty"), |
130 | + new IllegalArgumentException()); | ||
130 | } | 131 | } |
131 | } | 132 | } |
132 | 133 | ||
@@ -179,7 +180,7 @@ public class ConfigurationLoader implements Serializable { | @@ -179,7 +180,7 @@ public class ConfigurationLoader implements Serializable { | ||
179 | 180 | ||
180 | default: | 181 | default: |
181 | throw new ConfigurationException(getBundle().getString("configuration-type-not-implemented-yet", | 182 | throw new ConfigurationException(getBundle().getString("configuration-type-not-implemented-yet", |
182 | - type.name())); | 183 | + type.name()), new IllegalArgumentException()); |
183 | } | 184 | } |
184 | 185 | ||
185 | config.setDelimiterParsingDisabled(true); | 186 | config.setDelimiterParsingDisabled(true); |
@@ -241,13 +242,12 @@ public class ConfigurationLoader implements Serializable { | @@ -241,13 +242,12 @@ public class ConfigurationLoader implements Serializable { | ||
241 | } | 242 | } |
242 | } | 243 | } |
243 | 244 | ||
244 | - ConfigurationValueExtractor elected = StrategySelector.getInstance(ConfigurationValueExtractor.class, | 245 | + ConfigurationValueExtractor elected = StrategySelector.selectInstance(ConfigurationValueExtractor.class, |
245 | candidates); | 246 | candidates); |
246 | 247 | ||
247 | if (elected == null) { | 248 | if (elected == null) { |
248 | - // TODO lançar exceção informando que nenhum extrator foi encontrado para o field e ensinar como implementar | ||
249 | - // um extrator personalizado. | ||
250 | - throw new ConfigurationException(""); | 249 | + throw new ConfigurationException(getBundle().getString("configuration-extractor-not-found", |
250 | + field.toGenericString(), ConfigurationValueExtractor.class.getName()), new ClassNotFoundException()); | ||
251 | } | 251 | } |
252 | 252 | ||
253 | return elected; | 253 | return elected; |
impl/core/src/main/resources/demoiselle-core-bundle.properties
@@ -59,6 +59,7 @@ configuration-field-loaded=Configura\u00E7\u00E3o {0} atribu\u00EDda a {1} com o | @@ -59,6 +59,7 @@ configuration-field-loaded=Configura\u00E7\u00E3o {0} atribu\u00EDda a {1} com o | ||
59 | configuration-attribute-is-mandatory=A configura\u00E7\u00E3o {0} \u00E9 obrigat\u00F3ria, mas n\u00E3o foi encontrada em {1} | 59 | configuration-attribute-is-mandatory=A configura\u00E7\u00E3o {0} \u00E9 obrigat\u00F3ria, mas n\u00E3o foi encontrada em {1} |
60 | configuration-name-attribute-cant-be-empty=A nota\u00E7\u00E3o Name n\u00E3o pode estar em branco | 60 | configuration-name-attribute-cant-be-empty=A nota\u00E7\u00E3o Name n\u00E3o pode estar em branco |
61 | configuration-key-not-found=Chave de configura\u00E7\u00E3o {0} n\u00E3o encontrada | 61 | configuration-key-not-found=Chave de configura\u00E7\u00E3o {0} n\u00E3o encontrada |
62 | +configuration-extractor-not-found=N\u00E3o foi poss\u00EDvel encontrar a classe extratora para o atributo {0}. Implemente a interface {1} para criar sua classe extratora. | ||
62 | 63 | ||
63 | transaction-not-defined=Nenhuma transa\u00E7\u00E3o foi definida. Para utilizar @{0} \u00E9 preciso definir a propriedade frameworkdemoiselle.transaction.class com a estrat\u00E9gia de transa\u00E7\u00E3o desejada no arquivo demoiselle.properties | 64 | transaction-not-defined=Nenhuma transa\u00E7\u00E3o foi definida. Para utilizar @{0} \u00E9 preciso definir a propriedade frameworkdemoiselle.transaction.class com a estrat\u00E9gia de transa\u00E7\u00E3o desejada no arquivo demoiselle.properties |
64 | executing-all=Executando todos os \: {0} | 65 | executing-all=Executando todos os \: {0} |
impl/core/src/test/java/br/gov/frameworkdemoiselle/configuration/field/custom/ConfigurationCustomFieldTest.java
@@ -36,6 +36,7 @@ | @@ -36,6 +36,7 @@ | ||
36 | */ | 36 | */ |
37 | package br.gov.frameworkdemoiselle.configuration.field.custom; | 37 | package br.gov.frameworkdemoiselle.configuration.field.custom; |
38 | 38 | ||
39 | +import static junit.framework.Assert.assertEquals; | ||
39 | import static junit.framework.Assert.assertNotNull; | 40 | import static junit.framework.Assert.assertNotNull; |
40 | import static junit.framework.Assert.fail; | 41 | import static junit.framework.Assert.fail; |
41 | 42 | ||
@@ -84,6 +85,7 @@ public class ConfigurationCustomFieldTest extends AbstractConfigurationTest { | @@ -84,6 +85,7 @@ public class ConfigurationCustomFieldTest extends AbstractConfigurationTest { | ||
84 | unmappedField.getUnmappedClass(); | 85 | unmappedField.getUnmappedClass(); |
85 | fail(); | 86 | fail(); |
86 | } catch (ConfigurationException cause) { | 87 | } catch (ConfigurationException cause) { |
88 | + assertEquals(ClassNotFoundException.class, cause.getCause().getClass()); | ||
87 | } | 89 | } |
88 | } | 90 | } |
89 | } | 91 | } |
impl/core/src/test/resources/configuration/field/custom/demoiselle.properties
@@ -32,3 +32,5 @@ | @@ -32,3 +32,5 @@ | ||
32 | # "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | 32 | # "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> |
33 | # ou escreva para a Fundação do Software Livre (FSF) Inc., | 33 | # ou escreva para a Fundação do Software Livre (FSF) Inc., |
34 | # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | 34 | # 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. |
35 | +mappedClass=Mapped Class | ||
36 | +unmappedClass=UnmappedClass |