We have a web application configured by extending 
GuiceServletContextListener. In addition to configuring the normal 
ServletModule, we also have two private modules that extend MyBatisModule 
and ShiroWebModule.

In the ShiroWebModule we load a properties file and bind the properties 
like this:

...
    @Override
    public void configure() {
        super.configure();
        loadLDAPProperties(binder());
    }
...
    @SuppressWarnings("unchecked")
    protected void configureShiroWeb() {
        try {
            this.
            bindRealm().to(InjectableCasRealm.class);
            ShiroWebModule.guiceFilterModule();
        } catch (Exception e) {
            addError(e);
        }

        // Key<RolesAuthorizationFilter> rolesFilter = 
Key.get(RolesAuthorizationFilter.class);
        expose(RolesAuthorizationFilter.class);
        
        addFilterChain("/xyz.jsp", ANON);
...
        Key<InjectableCasFilter> casFilter = 
Key.get(InjectableCasFilter.class);
        addFilterChain("/shiro-cas", casFilter);
        expose(InjectableCasFilter.class);
    }
...
    private void loadLDAPProperties(Binder binder) {
        props = new Properties();
        try {
            
props.load(getClass().getClassLoader().getResourceAsStream(props_filename));
            Names.bindProperties(binder, props);
        } catch (IOException e) {
            binder.addError(e);
        }
    }

We are then able to inject those properties into the InjectableCasRealm 
class like this:
public class InjectableCasRealm extends CasRealm {
    private String casServerUrl;
    
    @Inject
    public void setCasServerUrl(@Named("injCasRealm.casServerUrl") String 
casServerUrl) {
        this.casServerUrl = casServerUrl;
    }
...

We would like to inject some of the properties into our servlet's 
configured using the ServletModule but we keep getting this error:
SEVERE: Exception starting filter GuiceFilter
com.google.inject.ConfigurationException: Guice configuration errors:

1) Unable to create binding for java.lang.String annotated with 
@com.google.inject.name.Named(value=heartbeat.logoutUrl). It was already 
configured on one or more child injectors or private modules
    bound at 
com.trumpetinc.environment.HBShiroWebModule.loadLDAPProperties(HBShiroWebModule.java:79)
  If it was in a PrivateModule, did you forget to expose the binding?
  while locating java.lang.String annotated with 
@com.google.inject.name.Named(value=heartbeat.logoutUrl)
    for parameter 0 at 
com.trumpetinc.heartbeat.HandleCheckHeartbeatRequest.setHeartbeatLogoutUrl(HandleCheckHeartbeatRequest.java:89)
  at 
com.trumpetinc.heartbeat.HandleCheckHeartbeatRequest.setHeartbeatLogoutUrl(HandleCheckHeartbeatRequest.java:89)
  while locating com.trumpetinc.heartbeat.HandleCheckHeartbeatRequest

1 error

We can create a separate properties file with just the properties we need  
and load/bind them in the ServletModule extension - but we though there 
might be a better way.

How can we inject the properties loaded in the ShiroWebModule  extension so 
they can be used by our servlets?

Thank you - Richard

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/google-guice.
For more options, visit https://groups.google.com/d/optout.

Reply via email to