Guice module integration issue with REST

130 views
Skip to first unread message

pradrone dev

unread,
Apr 23, 2017, 5:04:53 AM4/23/17
to google-guice

Guice module integration issue with REST I have define one AOP guice based module, but when I tried to integrate with REST code, methodInvocation.proceed retun null. What might be best way to solve this issue.

Define AOP Guice based module as below

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@interface NotOnWeekends {}
public class WeekendBlocker implements MethodInterceptor {

public Object invoke(MethodInvocation invocation) throws Throwable {

Calendar today = new GregorianCalendar();

if (today.getDisplayName(DAY_OF_WEEK, LONG, ENGLISH).startsWith("S")) {

  throw new IllegalStateException(

      invocation.getMethod().getName() + " not allowed on weekends!");
}

return invocation.proceed();

}

}

public class NotOnWeekendsModule extends AbstractModule {
protected void configure() {

bindInterceptor(Matchers.any(), Matchers.annotatedWith(NotOnWeekends.class), 

    new WeekendBlocker());

}
}

But I tried to Integrate this with my REST API

public class WorkerBean implements Worker {

@Autowired
private WorkerRepository workerRepository;

@Override
@NotOnWeekends
public Collection<Worker> findAll() {

    Collection<Worker> workers = workerRepository.findAll();

    return workers;
}

@RestController
public class WorkerController {

@RequestMapping(
        value = "/api/workers",
        method = RequestMethod.GET,
        produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Collection<Worker>> getWorkers() {


    Worker worker = Guice.createInjector(new NotOnWeekendsModule()).getInstance(Worker.class);

    Collection<Worker> worker = worker.findAll(); // return null 

    ....
}

Stephan Classen

unread,
Apr 24, 2017, 3:57:26 AM4/24/17
to google...@googlegroups.com

I think you problem is that you are mixing spring an guice (in an inappropriate way).

I reproduced your above example (by the way, can you tell me from which library you use Worker and WorkerRepository?).

The code is missing the binding for the worker. I added it.

Next problem is the @Autowire. This is a spring annotation and Guice will not react to it.
If you replace it with @Inject the sample code is working as expected. (By the way I would recommend to favor constructor injection over field injection).

If this does not help. I would suggest you create a minimal reproducible case and publish it on a github repo so we can fiddle around with it.

--
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 google-guice...@googlegroups.com.
To post to this group, send email to google...@googlegroups.com.
Visit this group at https://groups.google.com/group/google-guice.
To view this discussion on the web visit https://groups.google.com/d/msgid/google-guice/cb641bf9-7ada-4021-aa73-20cfe1e15787%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

pradrone dev

unread,
Apr 24, 2017, 11:54:42 AM4/24/17
to google-guice

Thanks it does work but now methodInvocation.proceed return [] (empty object) 

pradrone dev

unread,
Apr 24, 2017, 11:56:21 AM4/24/17
to google-guice
Thanks it does work but now methodInvocation.proceed return [] (empty object) where it should return list values.
Any idea for such behaviour ?


On Sunday, 23 April 2017 14:34:53 UTC+5:30, pradrone dev wrote:

Stephan Classen

unread,
Apr 24, 2017, 1:08:50 PM4/24/17
to google...@googlegroups.com
Set a breakpoint or add a log statement at the end of the WorkerBean.findAll() to see what this method returns and if it is differen from what you see returned by the methodInvocation.proceed call

pradrone dev

unread,
Apr 25, 2017, 3:49:55 AM4/25/17
to google-guice
Can you please guide me steps how to Integrate Guice with Spring ? Tried few more stuff but it is unclear ?

For your reference attaching sample problem. Waiting for you suggestion and inputs.

Guice Integration .
//        Collection<Greeting> greetings = greetingService.findAll();

        GreetingServiceBean greetingservicebean = InjectorInstance.getInstance().getInstance(GreetingServiceBean.class);

        Collection<Greeting> greetings = greetingservicebean.findAll();

Thanks Alot,
GuiceSpringExample.zip

Stephan Classen

unread,
Apr 25, 2017, 6:04:07 AM4/25/17
to google...@googlegroups.com

Sorry I have no Spring experience what so ever. So I guess I will not be of any help here.

Hopefully someone else can jump in.

-- 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 google-guice...@googlegroups.com. To post to this group, send email to google...@googlegroups.com. Visit this group at https://groups.google.com/group/google-guice. To view this discussion on the web visit https://groups.google.com/d/msgid/google-guice/ee30385f-bf60-47ba-af5e-4f5af1bdfe2e%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages