Est-il possible d'itérer HttpServletRequest.getAttributeNames() plus d'une fois?

J'essaie de connecter le contenu de la HttpServletRequest collection d'attributs. J'ai besoin de le faire lorsque la servlet démarre pour la première fois, et de nouveau à droite avant la servlet est fini. Je fais cela dans une tentative de comprendre un crufty et mal entretenus servlet. Parce que j'ai besoin d'avoir que peu d'impact possible, servlet filtres ne sont pas une option.

Alors, voici le problème. Lorsque la servlet commence, je vais parcourir l'énumération retourné par HttpServletRequest.getAttributeNames(). Cependant, quand j'ai envie de parcourir à nouveau, getAttributeNames().hasMoreElements() renvoie "faux"! Je ne peux pas trouver un moyen de "reset" de l'énumération. Ce qui est pire, c'est que, même si j'ai ajouter des attributs à la collection en utilisant HttpServletRequest.setAttribute(), j'obtiens toujours un résultat "faux" quand j'appelle getAttributeNames().hasMoreElements().

Est-ce vraiment possible? Il n'y a vraiment aucun moyen de faire une itération sur les noms d'attribut plus d'une fois?

À la demande, voici mon code. C'est assez simple, ne pense pas que je suis en train de faire tout drôle de truc.

/**
 * 
 * Returns the contents of the Attributes collection, formatted for the InterfaceTracker loglines
 * 
 */
@SuppressWarnings("unchecked")
public static String getAttributes(HttpServletRequest request) {
    try {       
        StringBuilder toLog = new StringBuilder();  

        Enumeration attributeNames = request.getAttributeNames();           

        while(attributeNames.hasMoreElements()) {
            String current = (String) attributeNames.nextElement();

            toLog.append(current + "=" + request.getAttribute(current));            

            if(attributeNames.hasMoreElements()) {
                toLog.append(", ");
            }           
        }       

        return "TRACKER_ATTRIBUTES={"+ toLog.toString() + "}";
    }
    catch (Exception ex) {
        return "TRACKER_ATTRIBUTES={" + InterfaceTrackerValues.DATA_UNKNOWN_EXCEPTION_THROWN + "}";
    }               
}
si vous appelez getAttributes méthode au début de service/doGet/doPost méthode, puis à nouveau appel à la fin, rite ?
Downvoting que c'est juste une erreur de l'utilisateur.

OriginalL'auteur sangfroid | 2010-08-20