Comment #2 on issue 544 by mathieu.carbou: Guice servlet module crashed when used with Elements.getElements()
http://code.google.com/p/google-guice/issues/detail?id=544

Here is a quick fix: cretae this class:

import com.google.inject.Module;
import com.google.inject.servlet.ServletModule;

import java.lang.reflect.Field;
import java.util.List;

/**
 * FIX BUG http://code.google.com/p/google-guice/issues/detail?id=544
 * TODO: REMOVE THIS WHEN FIXED
 */
public final class ServletModuleFix {
    public static void fix(ServletModule me) {
        try {
Field servletsModuleBuilder = ServletModule.class.getDeclaredField("servletsModuleBuilder");
            servletsModuleBuilder.setAccessible(true);

Field filtersModuleBuilder = ServletModule.class.getDeclaredField("filtersModuleBuilder");
            filtersModuleBuilder.setAccessible(true);

            Module servletsModule = (Module) servletsModuleBuilder.get(me);
            Module filtersModule = (Module) filtersModuleBuilder.get(me);

for (Module module : new Module[]{servletsModule, filtersModule}) {
                for (Field field : module.getClass().getDeclaredFields()) {
                    if (List.class.isAssignableFrom(field.getType())) {
                        field.setAccessible(true);
                        ((List) field.get(module)).clear();
                    }
                }
            }
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage(), e);
        }
    }
}

And use it in your servlets modules like this:

public class RestModule extends ServletModule {
    @Override
    protected void configureServlets() {
        ServletModuleFix.fix(this);
        [...]
    }
}

--
You received this message because you are subscribed to the Google Groups 
"google-guice-dev" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-guice-dev?hl=en.

Reply via email to