Not able to inject java object while writing Annotation based Method Interceptor using Guice framework
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
add a comment |
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
add a comment |
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 '18 at 11:15
asked Nov 5 '18 at 7:19
Sat
62511128
62511128
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
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 |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
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
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
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 |
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 |
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 Nov 13 '18 at 10:57
Sat
62511128
62511128
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
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