Not able to inject java object while writing Annotation based Method Interceptor using Guice framework
up vote
3
down vote
favorite
My application structure is like
I created an annotation as below:-
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SampleAnnotation {
}
Then created a Sample Interceptor:
public class SampleInterceptor implements MethodInterceptor {
private static final Logger logger = LoggerFactory.getLogger(SampleInterceptor.class);
@Inject
SampleService sampleService; // this is not working
public Object invoke(MethodInvocation invocation) throws Throwable {
logger.info("SampleInterceptor : Interceptor Invoked");
Object result = invocation.proceed();
Observable<List<Sample>> observable = (Observable<List<Sample>>) result;
SampleSender sender = null;
List<Sample> sampleList = observable.toBlocking().first();
for(Sample sample : sampleList ) {
sender = new SampleSender();
sender.setBoolean(sample.isBoolean());
logger.info("Pushing Data into Sender");
sampleService.insert(String.join("_", "key", "value"), sender); // here getting NullPointerException because sampleService is null
}
return result;
}
}
Then I created a GuiceModule as below:-
public class SampleModule extends AbstractModule {
@Override
protected void configure() {
bindInterceptor(Matchers.any(), Matchers.annotatedWith(SampleAnnotation.class), new SampleInterceptor());
}
}
Class in which I am using the above annotation is
// This class also have so many method and this was already declared and using in another services, I created a sample class here
class SampleClassForInterceptor {
// this sampleMethod() is not a new method, its already created,
// now I am adding annotation to it, because after finishing this functionality,
// I want something should be done, so created annotation and added here
@SampleAnnotation
public Observable<List<Sample>> sampleMethod() {
Sample sample = new Device();
sample.setName("*** 7777");
sample.setBoolean(true);
List<Sample> list = new ArrayList<>();
list.add(sample);
Observable<List<Device>> observable = Observable.just(list);
return observable;
}
}
I have a RestModule
using which I am binding SampleClassForInterceptor
as follows
public final class RestModule extends JerseyServletModule {
// other classes binding
bind(SampleClassForInterceptor.class).in(Scopes.SINGLETON);
// other classes binding
install(new SampleModule());
}
Now I have a bootsrap class in which I am binding RestModule
public class Bootstrap extends ServerBootstrap {
binder.install(new RestModule());
}
Usage:-
@Path("service/sample")
public class SampleRS {
@Inject
SampleClassForInterceptor sampleClassForInterceptor;
public void someMethod() {
sampleClassForInterceptor.sampleMethod();
}
}
My interceptor functionality is started executing before executing sampleMethod()
of SampleClassForInterceptor
class, then after executing the sampleMethod()
again coming back to Interceptor, now here I have a code snippet which will insert the result(which we got from sampleMethod()
). This is where I am getting NullPointerException
, I checked code and found that SampleService
object not getting injected and its value is null
Note: I am using Microservices with RESTFUL services concept
java microservices aop guice
This question has an open bounty worth +50
reputation from Sat ending in 4 days.
The question is widely applicable to a large audience. A detailed canonical answer is required to address all the concerns.
Need detailed and exact solution
add a comment |
up vote
3
down vote
favorite
My application structure is like
I created an annotation as below:-
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SampleAnnotation {
}
Then created a Sample Interceptor:
public class SampleInterceptor implements MethodInterceptor {
private static final Logger logger = LoggerFactory.getLogger(SampleInterceptor.class);
@Inject
SampleService sampleService; // this is not working
public Object invoke(MethodInvocation invocation) throws Throwable {
logger.info("SampleInterceptor : Interceptor Invoked");
Object result = invocation.proceed();
Observable<List<Sample>> observable = (Observable<List<Sample>>) result;
SampleSender sender = null;
List<Sample> sampleList = observable.toBlocking().first();
for(Sample sample : sampleList ) {
sender = new SampleSender();
sender.setBoolean(sample.isBoolean());
logger.info("Pushing Data into Sender");
sampleService.insert(String.join("_", "key", "value"), sender); // here getting NullPointerException because sampleService is null
}
return result;
}
}
Then I created a GuiceModule as below:-
public class SampleModule extends AbstractModule {
@Override
protected void configure() {
bindInterceptor(Matchers.any(), Matchers.annotatedWith(SampleAnnotation.class), new SampleInterceptor());
}
}
Class in which I am using the above annotation is
// This class also have so many method and this was already declared and using in another services, I created a sample class here
class SampleClassForInterceptor {
// this sampleMethod() is not a new method, its already created,
// now I am adding annotation to it, because after finishing this functionality,
// I want something should be done, so created annotation and added here
@SampleAnnotation
public Observable<List<Sample>> sampleMethod() {
Sample sample = new Device();
sample.setName("*** 7777");
sample.setBoolean(true);
List<Sample> list = new ArrayList<>();
list.add(sample);
Observable<List<Device>> observable = Observable.just(list);
return observable;
}
}
I have a RestModule
using which I am binding SampleClassForInterceptor
as follows
public final class RestModule extends JerseyServletModule {
// other classes binding
bind(SampleClassForInterceptor.class).in(Scopes.SINGLETON);
// other classes binding
install(new SampleModule());
}
Now I have a bootsrap class in which I am binding RestModule
public class Bootstrap extends ServerBootstrap {
binder.install(new RestModule());
}
Usage:-
@Path("service/sample")
public class SampleRS {
@Inject
SampleClassForInterceptor sampleClassForInterceptor;
public void someMethod() {
sampleClassForInterceptor.sampleMethod();
}
}
My interceptor functionality is started executing before executing sampleMethod()
of SampleClassForInterceptor
class, then after executing the sampleMethod()
again coming back to Interceptor, now here I have a code snippet which will insert the result(which we got from sampleMethod()
). This is where I am getting NullPointerException
, I checked code and found that SampleService
object not getting injected and its value is null
Note: I am using Microservices with RESTFUL services concept
java microservices aop guice
This question has an open bounty worth +50
reputation from Sat ending in 4 days.
The question is widely applicable to a large audience. A detailed canonical answer is required to address all the concerns.
Need detailed and exact solution
add a comment |
up vote
3
down vote
favorite
up vote
3
down vote
favorite
My application structure is like
I created an annotation as below:-
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SampleAnnotation {
}
Then created a Sample Interceptor:
public class SampleInterceptor implements MethodInterceptor {
private static final Logger logger = LoggerFactory.getLogger(SampleInterceptor.class);
@Inject
SampleService sampleService; // this is not working
public Object invoke(MethodInvocation invocation) throws Throwable {
logger.info("SampleInterceptor : Interceptor Invoked");
Object result = invocation.proceed();
Observable<List<Sample>> observable = (Observable<List<Sample>>) result;
SampleSender sender = null;
List<Sample> sampleList = observable.toBlocking().first();
for(Sample sample : sampleList ) {
sender = new SampleSender();
sender.setBoolean(sample.isBoolean());
logger.info("Pushing Data into Sender");
sampleService.insert(String.join("_", "key", "value"), sender); // here getting NullPointerException because sampleService is null
}
return result;
}
}
Then I created a GuiceModule as below:-
public class SampleModule extends AbstractModule {
@Override
protected void configure() {
bindInterceptor(Matchers.any(), Matchers.annotatedWith(SampleAnnotation.class), new SampleInterceptor());
}
}
Class in which I am using the above annotation is
// This class also have so many method and this was already declared and using in another services, I created a sample class here
class SampleClassForInterceptor {
// this sampleMethod() is not a new method, its already created,
// now I am adding annotation to it, because after finishing this functionality,
// I want something should be done, so created annotation and added here
@SampleAnnotation
public Observable<List<Sample>> sampleMethod() {
Sample sample = new Device();
sample.setName("*** 7777");
sample.setBoolean(true);
List<Sample> list = new ArrayList<>();
list.add(sample);
Observable<List<Device>> observable = Observable.just(list);
return observable;
}
}
I have a RestModule
using which I am binding SampleClassForInterceptor
as follows
public final class RestModule extends JerseyServletModule {
// other classes binding
bind(SampleClassForInterceptor.class).in(Scopes.SINGLETON);
// other classes binding
install(new SampleModule());
}
Now I have a bootsrap class in which I am binding RestModule
public class Bootstrap extends ServerBootstrap {
binder.install(new RestModule());
}
Usage:-
@Path("service/sample")
public class SampleRS {
@Inject
SampleClassForInterceptor sampleClassForInterceptor;
public void someMethod() {
sampleClassForInterceptor.sampleMethod();
}
}
My interceptor functionality is started executing before executing sampleMethod()
of SampleClassForInterceptor
class, then after executing the sampleMethod()
again coming back to Interceptor, now here I have a code snippet which will insert the result(which we got from sampleMethod()
). This is where I am getting NullPointerException
, I checked code and found that SampleService
object not getting injected and its value is null
Note: I am using Microservices with RESTFUL services concept
java microservices aop guice
My application structure is like
I created an annotation as below:-
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SampleAnnotation {
}
Then created a Sample Interceptor:
public class SampleInterceptor implements MethodInterceptor {
private static final Logger logger = LoggerFactory.getLogger(SampleInterceptor.class);
@Inject
SampleService sampleService; // this is not working
public Object invoke(MethodInvocation invocation) throws Throwable {
logger.info("SampleInterceptor : Interceptor Invoked");
Object result = invocation.proceed();
Observable<List<Sample>> observable = (Observable<List<Sample>>) result;
SampleSender sender = null;
List<Sample> sampleList = observable.toBlocking().first();
for(Sample sample : sampleList ) {
sender = new SampleSender();
sender.setBoolean(sample.isBoolean());
logger.info("Pushing Data into Sender");
sampleService.insert(String.join("_", "key", "value"), sender); // here getting NullPointerException because sampleService is null
}
return result;
}
}
Then I created a GuiceModule as below:-
public class SampleModule extends AbstractModule {
@Override
protected void configure() {
bindInterceptor(Matchers.any(), Matchers.annotatedWith(SampleAnnotation.class), new SampleInterceptor());
}
}
Class in which I am using the above annotation is
// This class also have so many method and this was already declared and using in another services, I created a sample class here
class SampleClassForInterceptor {
// this sampleMethod() is not a new method, its already created,
// now I am adding annotation to it, because after finishing this functionality,
// I want something should be done, so created annotation and added here
@SampleAnnotation
public Observable<List<Sample>> sampleMethod() {
Sample sample = new Device();
sample.setName("*** 7777");
sample.setBoolean(true);
List<Sample> list = new ArrayList<>();
list.add(sample);
Observable<List<Device>> observable = Observable.just(list);
return observable;
}
}
I have a RestModule
using which I am binding SampleClassForInterceptor
as follows
public final class RestModule extends JerseyServletModule {
// other classes binding
bind(SampleClassForInterceptor.class).in(Scopes.SINGLETON);
// other classes binding
install(new SampleModule());
}
Now I have a bootsrap class in which I am binding RestModule
public class Bootstrap extends ServerBootstrap {
binder.install(new RestModule());
}
Usage:-
@Path("service/sample")
public class SampleRS {
@Inject
SampleClassForInterceptor sampleClassForInterceptor;
public void someMethod() {
sampleClassForInterceptor.sampleMethod();
}
}
My interceptor functionality is started executing before executing sampleMethod()
of SampleClassForInterceptor
class, then after executing the sampleMethod()
again coming back to Interceptor, now here I have a code snippet which will insert the result(which we got from sampleMethod()
). This is where I am getting NullPointerException
, I checked code and found that SampleService
object not getting injected and its value is null
Note: I am using Microservices with RESTFUL services concept
java microservices aop guice
java microservices aop guice
edited Nov 8 at 11:15
asked Nov 5 at 7:19
Sat
56811126
56811126
This question has an open bounty worth +50
reputation from Sat ending in 4 days.
The question is widely applicable to a large audience. A detailed canonical answer is required to address all the concerns.
Need detailed and exact solution
This question has an open bounty worth +50
reputation from Sat ending in 4 days.
The question is widely applicable to a large audience. A detailed canonical answer is required to address all the concerns.
Need detailed and exact solution
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
up vote
0
down vote
accepted
when I used requestInjection
in the SampleModule
, then SampleService
got injected inside interceptor i.e I modified the SampleModule
code as follows
public class SampleModule extends AbstractModule {
@Override
protected void configure() {
SampleInterceptor interceptor = new SampleInterceptor();
requestInjection(interceptor);
bindInterceptor(Matchers.any(), Matchers.annotatedWith(SampleAnnotation.class), interceptor);
}
}
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
when I used requestInjection
in the SampleModule
, then SampleService
got injected inside interceptor i.e I modified the SampleModule
code as follows
public class SampleModule extends AbstractModule {
@Override
protected void configure() {
SampleInterceptor interceptor = new SampleInterceptor();
requestInjection(interceptor);
bindInterceptor(Matchers.any(), Matchers.annotatedWith(SampleAnnotation.class), interceptor);
}
}
add a comment |
up vote
0
down vote
accepted
when I used requestInjection
in the SampleModule
, then SampleService
got injected inside interceptor i.e I modified the SampleModule
code as follows
public class SampleModule extends AbstractModule {
@Override
protected void configure() {
SampleInterceptor interceptor = new SampleInterceptor();
requestInjection(interceptor);
bindInterceptor(Matchers.any(), Matchers.annotatedWith(SampleAnnotation.class), interceptor);
}
}
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
when I used requestInjection
in the SampleModule
, then SampleService
got injected inside interceptor i.e I modified the SampleModule
code as follows
public class SampleModule extends AbstractModule {
@Override
protected void configure() {
SampleInterceptor interceptor = new SampleInterceptor();
requestInjection(interceptor);
bindInterceptor(Matchers.any(), Matchers.annotatedWith(SampleAnnotation.class), interceptor);
}
}
when I used requestInjection
in the SampleModule
, then SampleService
got injected inside interceptor i.e I modified the SampleModule
code as follows
public class SampleModule extends AbstractModule {
@Override
protected void configure() {
SampleInterceptor interceptor = new SampleInterceptor();
requestInjection(interceptor);
bindInterceptor(Matchers.any(), Matchers.annotatedWith(SampleAnnotation.class), interceptor);
}
}
answered 2 days ago
Sat
56811126
56811126
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53149896%2fnot-able-to-inject-java-object-while-writing-annotation-based-method-interceptor%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown