Я знаю, что существует много вопросов, и отвечает точно об этой ошибке на stackoverflow и других форумах. Но я все еще не могу найти решение...
Поскольку скорость обосновывает, что у меня есть один служебный класс, который загружает все статические карты данных (например, месяцы) в зависимости от обеспеченной локали.
Таким образом, этот служебный класс выглядит примерно так:
public static final String GLOBAL_MESSAGES = "globalMessages";
private static Map<Integer,Month> monthsMap;
private ResourceBundle getResourceBundle(Locale locale) {
ResourceBundle rb = ResourceBundle.getBundle(GLOBAL_MESSAGES, locale);
return rb;
}
private Map<Integer,Month> getMonths() {
if(monthsMap == null) {
setMonths();
}
return monthsMap;
}
private void setMonths() {
try {
monthsMap = getFactory().getDAO().getAllMonths();
} catch (SQLException e) {
logger.error(e);
} catch (EmptyResultException e) {
logger.error(e);
}
}
public Map<Integer,Month> getMonths(Locale locale) {
if(locale == null) {
return monthsMap;
} else {
if(this.locale != locale) {
this.locale = locale;
setMonths();
}
}
ResourceBundle rb = getResourceBundle(locale);
Map<Integer,Month> map = new HashMap<Integer, Month>();
for(Month akVO : getMonths().values()) {
try {
akVO.setName(rb.getString(akVO.getName()));
} catch (MissingResourceException e) {
//already done
}
map.put(akVO.getId(), akVO);
}
return map;
}
Файлы globalMessages.properties (globalMessages_en_US.properties...) находятся непосредственно в исходных ресурсах пакета. При развертывании на Tomcat существует в папке WEB-INF/classes.
Теперь проблема. Все это работает при работе в этом приложении. Но у меня есть другое приложение, которое соединяет через REST API (JAX-RS) этому. При выполнении запроса App/rest/months.xml я получаю следующую ошибку:
java.util.MissingResourceException: Can't find bundle for base name globalMessages, locale en_us
Я действительно потерян. И отчаянный...
Хорошо ... Обнаружил ошибку. Спустя один f * день ... Проблема в регистронезависимых буквах. Несмотря на то, что при установке локали из состояния покоя с помощью «en_US» каким-то образом ResourceBundle (при прохождении через REST) ищет «en_us».
ИЗМЕНИТЬ : Хорошо, обнаружил также ошибку, почему все было маленькими буквами. Проблема заключалась в том, что я создавал локаль с:
Locale locale = new Locale("en_US");
вместо:
Locale locale = new Locale("en","US");