Richard Eckart de Castilho created WICKET-6393:
--------------------------------------------------
Summary: NestedStringResourceLoader ignores hard-coded default
values and throws MissingResourceException
Key: WICKET-6393
URL: https://issues.apache.org/jira/browse/WICKET-6393
Project: Wicket
Issue Type: Bug
Components: wicket
Affects Versions: 7.7.0
Reporter: Richard Eckart de Castilho
The NestedStringResourceLoader ignores hard-coded default values and throws a
MissingResourceException.
Consider FormComponen.getString()
{noformat}
private String getString(Localizer localizer, String key,
Component component)
{
triedKeys.add(key);
// Note: It is important that the default value of "" is
// provided to getString() not to throw a
MissingResourceException or to
// return a default string like "[Warning: String ..."
return localizer.getString(key, component, "");
}
{noformat}
The default value provided here actually gets lost in the call hierarchy in
`Localizer.getString()` (line 232). That seems to be ok because the code there
seems to expect that any code it calls will not take into account the
`ThrowExceptionOnMissingResource` setting (at least that is what I infer from
the method name `getStringIgnoreSettings`. However, again further down the
hierarchy, `NestedStringResourceLoader.handleMissingKey()` (line 166) is called
which throws a MissingResourceException and defies the default-value handling
code in `Localizer.getString()`.
Here is a stack trace:
{noformat}
NestedStringResourceLoader.handleMissingKey(String, Locale, String, Component,
String) line: 186
NestedStringResourceLoader.loadNestedStringResource(Object, String, Locale,
String, String) line: 130
NestedStringResourceLoader.loadStringResource(Component, String, Locale,
String, String) line: 79
Localizer.getStringIgnoreSettings(String, Component, IModel<?>, Locale, String,
String) line: 397
Localizer.getString(String, Component, IModel<?>, Locale, String,
IModel<String>) line: 232
Localizer.getString(String, Component, IModel<?>, Locale, String, String) line:
201
Localizer.getString(String, Component, String) line: 150
FormComponent$MessageSource.getString(Localizer, String, Component) line: 201
FormComponent$MessageSource.getMessage(String, Map<String,Object>) line: 138
ValidationError.getErrorMessage(IErrorMessageSource) line: 230
TextField<T>(FormComponent<T>).error(IValidationError) line: 657
TextField<T>(FormComponent<T>).reportRequiredError() line: 1488
TextField<T>(FormComponent<T>).validateRequired() line: 1479
TextField<T>(FormComponent<T>).validate() line: 1127
...
{noformat}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)