MissingResourceException - ne Peut pas trouver de bundle pour le nom de base
Je sais qu'il y a beaucoup de questions et de réponses justement à propos de cette erreur sur stackoverflow et d'autres forums. Mais je ne peux toujours pas trouver la solution...
Pour des raisons de vitesse j'ai une classe utilitaire qui permet de charger toutes les données statiques de cartes (par exemple mois) en fonction des paramètres régionaux fournis.
Donc cette classe utilitaire ressemble à quelque chose comme ceci:
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;
}
Fichiers globalMessages.propriétés (globalMessages_en_US.propriétés,...) sont directement dans le paquet source ressources. Lors de son déploiement sur Tomcat il y a dans le dossier WEB-INF/classes.
Maintenant le problème. Tout cela fonctionne lorsque l'on travaille dans cette application. Mais j'ai une autre application qui se connecte via l'API REST (JAX-RS). Lors d'une demande App/rest/months.xml j'obtiens l'erreur suivante:
java.util.MissingResourceException: Can't find bundle for base name globalMessages, locale en_us
Je suis vraiment perdu. Et désespérés...
OriginalL'auteur Trick | 2010-07-23
Vous devez vous connecter pour publier un commentaire.
Ok... Trouvé l'erreur. Après un f* les jours... Le problème est sensible à la casse des lettres. Même si, lors de la définition des paramètres régionaux de repos avec "en_US" en quelque sorte ResourceBundle (lors de la traversée de REPOS) est à la recherche de "en_us".
MODIFIER:
Ok, il a aussi trouvé d'erreur pourquoi il était tout en petites lettres.
Le problème, c'est parce que j'ai été la création de paramètres régionaux:
au lieu de:
🙂 J'ai aimer votre commentaire 🙂
Vous m'avez aidé. J'ai été en utilisant les paramètres Régionaux.getDefault() qui a bien fonctionné dans Eclipse et dans le contenant, mais pas quand je suis allé à une machine UNIX. Merci!
Le pire, c'est que sur Mac (machine de dev) fonctionne bien car le fichier de recherche semble être sensible à la casse, mais quand il est déplacé vers un Linux boîte de production, il s'arrête de fonctionner.
Plus un. Un oldie, mais encore utile de goodie. Avoir une Belle Réponse badge.
OriginalL'auteur Trick
Pour personne ayant des problèmes avec un serveur Glassfish dans ce cas, il y a la possibilité de définir les paramètres Régionaux dans la Présentation Admin
Simple écraser les paramètres régionaux par défaut comme indiqué dans l'image
Quelqu'un pourrait trouver cela utile, j'ai eu du mal pendant plusieurs heures et ne veulent pas quelqu'un d'avoir ce genre de problème aswell
OriginalL'auteur TeaTime