2010-07-23 3 views
8

Je sais qu'il y a beaucoup de questions et réponses exactement au sujet de cette erreur sur stackoverflow et d'autres forum. Mais je n'arrive toujours pas à trouver la solution ...MissingResourceException - Ne peut pas trouver le paquet pour le nom de base

Pour des raisons de vitesse, j'ai une classe utilitaire qui charge toutes les cartes de données statiques (par exemple des 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.properties (globalMessages_en_US.properties, ...) sont directement dans le paquet source ressources. Lorsqu'il est déployé sur Tomcat, il existe dans le dossier WEB-INF/classes.

Maintenant le problème. Tout cela fonctionne lorsque vous travaillez dans cette application. Mais j'ai une autre application qui se connecte via l'API REST (JAX-RS) à celle-ci. Lorsque vous effectuez une demande App/repos/months.xml Je reçois 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é ...

Répondre

14

Ok ... Trouvé l'erreur. Après un jour f * ... Le problème est dans les lettres sensibles à la casse. Même si, lors de la définition de la localisation de repos avec "en_US" en quelque sorte ResourceBundle (lorsque vous passez par REST) ​​cherche "en_us".

EDIT: Ok, a également trouvé l'erreur pour laquelle tout cela était en minuscules. problème était, parce que je créais locale avec:

Locale locale = new Locale("en_US"); 

au lieu de:

Locale locale = new Locale("en","US"); 
+10

Haha, oh homme, ne pas simplement loooove programmation. – Pat

+0

:) Je dois aimer votre commentaire :) – Trick

+1

Vous m'avez aidé. J'utilisais Locale.getDefault() qui fonctionnait bien dans Eclipse et dans le conteneur WAS mais pas quand je suis allé dans une boîte UNIX. Merci! – iowatiger08

0

Pour toute 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 le admin Vue d'ensemble

enter image description here

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 pour plusieurs heures et ne veux pas quelqu'un d'avoir ce genre de problème aswell

Questions connexes