Are you sure your example is correct, specifically around in which cases
your fields are final?

You might also consider using the internal mailing list so we can look at
your actual code.

On Fri, Sep 28, 2012 at 7:02 PM, Mario Rodriguez
<[email protected]>wrote:

> Hi,
>
> I'm having problems when I try to @Inject a service on a Servlet.
> Currently I'm not receiving any error but my service is null. This problem
> only happens on my servlet as the service works in another places of the
> app.
>
> What I have is something like this:
>
> mainFolder
>
>   + server
>
>     + serviceFolder
>
>       - MyService.java
>
>     - MyServletContextListener.java
>
>     - MyServletModule.java
>
>     - HelloWorldServlet.java
>
>   + WEB-INF
>
>     - web.xml
>
> The files looks like:
>
> 1) web.xml
>
> <web-app>
>
>  ………
>
>   <servlet>
>
>     <servlet-name>helloWorldServlet</servlet-name>
>
>     <servlet-class>
>
>       mainFolder.HelloWorldServlet
>
>     </servlet-class>
>
>   </servlet>
>
>   <servlet-mapping>
>
>     <servlet-name>helloWorldServlet</servlet-name>
>
>     <url-pattern>/</url-pattern>
>
>   </servlet-mapping>
>
>   <filter>
>
>         <filter-name>guiceFilter</filter-name>
>
>         <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
>
>   </filter>
>
>   <filter-mapping>
>
>       <filter-name>guiceFilter</filter-name>
>
>       <url-pattern>/*</url-pattern>
>
>   </filter-mapping>
>
>   <listener>
>
>
> <listener-class>com.google.crm.grm.refdata.server.RefDataServletContextListener</listener-class>
>
>   </listener>
>
> </web-app>
>
>
> 2) MyService.java
>
> @RequestScoped
>
> public class GrmDataService {
>
> ……..
>
>   public List<String> getFoo() {
>
>      …..
>
>   }
>
> ……..
>
> }
>
>
> 3) MyServletContextListener.java
>
> public class MyServletContextListener  extends GuiceServletContextListener
> {
>
>   @Override
>
>   protected Injector getInjector() {
>
>     return Guice.createInjector(
>
>        // Probably something is wrong here as I'm adding a module where
> the service live but on
>
>        // that service I don't have a direct binding for this specific
> service
>
>         ….
>
>   }
>
> }
>
> 4) MyServletModule.java
>
> public class MyServletModule extends ServletModule {
>
>   @Override
>
>   protected void configureServlets() {
>
>     Names.bindProperties(binder(), getProps());
>
>     ……..
>
>     serve("/path").with(HelloWorldServlet.class);
>
>     ……..
>
>   }
>
>  …….
>
> }
>
> 5) HelloWorldServlet.java
>
> @Singleton
>
> public class HelloWorldServlet extends HttpServlet {
>
>   @Inject
>
>   private Provider<MyService> myServiceProvider;
>
>   @Override
>
>   protected void doGet(HttpServletRequest request, HttpServletResponse
> response)
>
>       throws IOException {
>
>     response.setContentType("text/plain");
>
>     if (myServiceProvider != null) {
>
>       MyService myService = myServiceProvider.get();
>
>        response.getWriter().println("The service is not null");
>
>     } else {
>
>       response.getWriter().println("The service is null");
>
>     }
>
>   }
>
>  ……
>
> }
>
> Of course I always receive the message "The service is null".
>
> Just as a test I create a filter class on the same packages as
> HelloWorldServlet.java where I @Inject the provider on the same way:
>
> @Singleton
>
> public class MyServiceFilter implements Filter {
>
>   @Inject
>
>   private final Provider<MyService> myServiceProvider;
>
> ……
>
>   @Override
>
>   public void doFilter(ServletRequest servletRequest, ServletResponse
> servletResponse,
>
>       FilterChain filterChain) throws IOException, ServletException {
>
>     if (servletRequest instanceof HttpServletRequest) {
>
>       HttpServletRequest request = (HttpServletRequest) servletRequest;
>
>       MyService myService = myServiceProvider.get();
>
>       List<String> myFoo = myService.getFoo();
>
>      …..
>
>     }
>
>   }
>
> ….
>
> }
>
> And this is working!!!
>
> Any thoughts?
>
>
> Thanks,
>
> Mario
>
>  --
> You received this message because you are subscribed to the Google Groups
> "google-guice" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/google-guice/-/BHRRaNYRCDMJ.
> 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?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" 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?hl=en.

Reply via email to