Hi Azeez, We had a discussion regarding this. Following are the solutions we decided
- Set object handler as a property in the Request instance (just like we are setting the HTTP method according to [1] <https://github.com/wso2/msf4j/pull/338>) With this change you can access the handler through the Request instance just like as shown below: request.getProperty("HANDLER") - Include method arguments in the Request instance. As for what we suggested in the previous discussion, *I have also tried is to build the Request inside the Interceptor and get the Java method and the args from the Request (which was suggested during the offline discussion)* With the pull request [1] <https://github.com/wso2/msf4j/pull/338> we are building the Request before the interceptors are executed. So this is handled. WDYT? [1] Interceptors pull request <https://github.com/wso2/msf4j/pull/338> On Thu, Mar 2, 2017 at 10:33 AM, Vidura Nanayakkara <[email protected]> wrote: > Hi Malintha, > > As for the questions, you asked regarding the 1st approach I suggested: > > > * - Write a custom context provider of your own which will describe how > the injected value is generated by implementing a certain interface.In the > custom context provider, will we have access to the internal objects like > [1] so that we can use them to generate the custom context object?* > > As per my understanding using approach 1 (custom context providers) it > would be a no. As I mentioned in the previous response, by default we can > access the Request, Response, HttpStreamer, FormParamIterator and > MultivaluedMap instances using the @Context annotation. If you need access > to the MSF4J internal objects like [1] > <https://github.com/wso2/msf4j/blob/v2.1.1/core/src/main/java/org/wso2/msf4j/internal/MSF4JMessageProcessor.java#L129>, > we need to make it accessible by default using the @Context annotation. > > The purpose of the custom context provider is to help you inject custom > values by specifying the logic on how the value are generated (probably to > feed the arguments to your interceptors and the HTTP methods). > > - *Register the custom context provider to the MSF4J* > - *Inject the value using @Context annotation (Ex:- @Context(String > key) Object[] arguments)* > > *Will it be possible to access the injected values within Interceptors? > Since one of our requirement is to come up with an Interceptor to validate > ETags in a central place, we need to access them within the Interceptor.* > > Yes, this would be an enhancement to MSF4J (with or without custom context > provider implementation). > > However, it would be great if we can have a discussion regarding this. > > [1] HttpResourceModel MSF4J internal object > <https://github.com/wso2/msf4j/blob/v2.1.1/core/src/main/java/org/wso2/msf4j/internal/MSF4JMessageProcessor.java#L129> > > > On Wed, Mar 1, 2017 at 10:41 AM, Malintha Amarasinghe <[email protected]> > wrote: > >> >> >> On Wed, Mar 1, 2017 at 9:19 AM, Thusitha Thilina Dayaratne < >> [email protected]> wrote: >> >>> Hi Malintha, >>> >>> ATM if you try to access the request payload at the interceptor level, >>> you won't be able to access that again in the service level and it will >>> cause the particular thread to get wait. >>> Shall we have a quick discussion on that today? That will help to come >>> up with a solution for this. >>> >> Sure Thusitha. Let's have a discussion today. That would be great. >> >> Thanks! >> Malintha >> >>> >>> Thanks >>> Thusitha >>> >>> On Tue, Feb 28, 2017 at 10:29 PM, Malintha Amarasinghe < >>> [email protected]> wrote: >>> >>>> + NuwanD, Sanjeewa >>>> >>>> On Tue, Feb 28, 2017 at 10:28 PM, Malintha Amarasinghe < >>>> [email protected]> wrote: >>>> >>>>> Hi Vidura, >>>>> >>>>> I went through the links and the approaches you suggested and I have a >>>>> couple of questions. I have also tried is to build the Request inside the >>>>> Interceptor and get the Java method and the args from the Request (which >>>>> was suggested during the offline discussion). For that, I tried to get >>>>> this >>>>> block of code [1] (which builds the request) inside the Interceptor. And >>>>> that was successful, but I needed access to some of the internal objects >>>>> in >>>>> MSF4J request path. Ex: HttpResourceModel object [2]. They are not >>>>> currently available in Interceptor level, so I had to modify ms4fj-core >>>>> bit >>>>> locally (just to check) to get them inside the Interceptor. >>>>> >>>>> Let's say we are following the approach 1. >>>>> >>>>> - *Write a custom context provider of your own which will describe >>>>> how the injected value is generated by implementing a certain >>>>> interface.* >>>>> >>>>> In the custom context provider, will we have access to the internal >>>>> objects like [1] so that we can use them to generate the custom context >>>>> object? >>>>> >>>>> - *Register the custom context provider to the MSF4J* >>>>> - *Inject the value using @Context annotation (Ex:- >>>>> @Context(String key) Object[] arguments)* >>>>> >>>>> Will it be possible to access the injected values within Interceptors? >>>>> Since one of our requirement is to come up with an Interceptor to validate >>>>> ETags in a central place, we need to access them within the Interceptor. >>>>> >>>>> [1] https://github.com/wso2/msf4j/blob/v2.1.1/core/src/main/ >>>>> java/org/wso2/msf4j/internal/MSF4JMessageProcessor.java#L137-L144 >>>>> [2] https://github.com/wso2/msf4j/blob/v2.1.1/core/src/main/java >>>>> /org/wso2/msf4j/internal/MSF4JMessageProcessor.java#L129 >>>>> >>>>> Thanks! >>>>> Malintha >>>>> >>>>> On Mon, Feb 27, 2017 at 3:08 PM, Malintha Amarasinghe < >>>>> [email protected]> wrote: >>>>> >>>>>> Hi Thusitha and all, >>>>>> >>>>>> Thank you very much for considering this. >>>>>> >>>>>> @Vidura, Thanks a lot for the detailed response. I will go through it >>>>>> and get back to you. >>>>>> >>>>>> Thanks! >>>>>> Malintha >>>>>> >>>>>> >>>>>> On Mon, Feb 27, 2017 at 2:54 PM, Vidura Nanayakkara <[email protected] >>>>>> > wrote: >>>>>> >>>>>>> [Adding Azeez] >>>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> In relation to the offline discussion we had, it was clear that the >>>>>>> above functionality is not sufficient for your requirement. As per the >>>>>>> offline discussion, the suggested approach was to use custom contexts. >>>>>>> [1] <http:///>, [2] >>>>>>> <https://www.blackpepper.co.uk/blog/custom-context-providers-for-cxf-with-the-context-annotation> >>>>>>> describes >>>>>>> an Apache CXF example of using custom contexts. >>>>>>> >>>>>>> Currently in MSF4J using @Context annotation we can inject the >>>>>>> Request, Response, HttpStreamer, FormParamIterator and MultivaluedMap >>>>>>> instances. However, these are not accessible via interceptors as per the >>>>>>> current implementation. The approach we were using to inject values is >>>>>>> by >>>>>>> using the approach I have explained in the previous email. >>>>>>> >>>>>>> Therefore to solve the above problem, there are 2 solutions we can >>>>>>> introduce to MSF4J. >>>>>>> >>>>>>> 1. *Introduce custom injection and lifecycle management [1] >>>>>>> <https://jersey.java.net/documentation/latest/ioc.html>, [2] >>>>>>> >>>>>>> <https://www.blackpepper.co.uk/blog/custom-context-providers-for-cxf-with-the-context-annotation> >>>>>>> to MSF4J.* >>>>>>> >>>>>>> Using this approach what you should basically do is: >>>>>>> >>>>>>> >>>>>>> - Write a custom context provider of your own which will >>>>>>> describe how the injected value is generated by implementing a >>>>>>> certain >>>>>>> interface. >>>>>>> - Register the custom context provider to the MSF4J >>>>>>> - Inject the value using @Context annotation (Ex:- >>>>>>> @Context(String key) Object[] arguments) >>>>>>> >>>>>>> >>>>>>> 1. *Have a Map<String, Object> map that could be injected using >>>>>>> @Context annotation* >>>>>>> >>>>>>> Using this approach what you basically do is: >>>>>>> >>>>>>> >>>>>>> - Add the arguments you need to inject using the @Context >>>>>>> annotation using @SetContext(String key, Object value). This can >>>>>>> be done >>>>>>> inside interceptors or HTTP methods >>>>>>> - Inject the value to using @Context(String key) >>>>>>> >>>>>>> WDYT? >>>>>>> >>>>>>> [1] Custom Injection and Lifecycle Management >>>>>>> <https://jersey.java.net/documentation/latest/ioc.html> >>>>>>> [2] Custom Context Providers for CXF with the Context Annotation >>>>>>> <https://www.blackpepper.co.uk/blog/custom-context-providers-for-cxf-with-the-context-annotation> >>>>>>> >>>>>>> On Mon, Feb 27, 2017 at 9:59 AM, Vidura Nanayakkara < >>>>>>> [email protected]> wrote: >>>>>>> >>>>>>>> Hi Malintha, >>>>>>>> >>>>>>>> You can access the `Request` instance from the interceptors. You >>>>>>>> also can access the same Request instance from the HTTP resource by >>>>>>>> injecting the request to the HTTP method (`@Context Request request`). >>>>>>>> You >>>>>>>> also can set any argument in the request using >>>>>>>> `request.setProperty(String >>>>>>>> key, Object value)` method and retrieve the value using >>>>>>>> `request.getProperty(String key)` method. Will this be sufficient for >>>>>>>> your >>>>>>>> requirement? >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Mon, Feb 27, 2017 at 5:55 AM, Thusitha Thilina Dayaratne < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> Hi Malintha, >>>>>>>>> >>>>>>>>> Thank you very much for the PR. We did some restructuring for the >>>>>>>>> interceptors to cater product requirementsts[1]. Therefore we won't >>>>>>>>> be able >>>>>>>>> to directly merge this. But surely we will check what we can do with >>>>>>>>> this. >>>>>>>>> >>>>>>>>> [1] - https://github.com/wso2/msf4j/pull/338 >>>>>>>>> >>>>>>>>> Thanks >>>>>>>>> Thusitha >>>>>>>>> >>>>>>>>> On Sun, Feb 26, 2017 at 4:04 PM, Malintha Amarasinghe < >>>>>>>>> [email protected]> wrote: >>>>>>>>> >>>>>>>>>> Hi, >>>>>>>>>> >>>>>>>>>> Currently in MSF4J Interceptor level, we can get the HTTP handler >>>>>>>>>> method which would be invoked by calling serviceMethodInfo.get >>>>>>>>>> Method(). >>>>>>>>>> >>>>>>>>>> Additionally, It will be useful to have request parameters as >>>>>>>>>> well in order to perform various types of request validations in >>>>>>>>>> Interceptor level such as Bean validation and ETag validation. >>>>>>>>>> >>>>>>>>>> Tried to do a fix which adds a new field to ServiceMethodInfo >>>>>>>>>> class as args[] [1]. But this required some API changes. >>>>>>>>>> >>>>>>>>>> Thanks! >>>>>>>>>> >>>>>>>>>> [1] https://github.com/wso2/msf4j/pull/356 >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> Malintha Amarasinghe >>>>>>>>>> Software Engineer >>>>>>>>>> *WSO2, Inc. - lean | enterprise | middleware* >>>>>>>>>> http://wso2.com/ >>>>>>>>>> >>>>>>>>>> Mobile : +94 712383306P >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Thusitha Dayaratne >>>>>>>>> Software Engineer >>>>>>>>> WSO2 Inc. - lean . enterprise . middleware | wso2.com >>>>>>>>> >>>>>>>>> Mobile +94712756809 <+94%2071%20275%206809> >>>>>>>>> Blog alokayasoya.blogspot.com >>>>>>>>> About http://about.me/thusithathilina >>>>>>>>> <http://wso2.com/signature> >>>>>>>>> >>>>>>>>> >>>>>>>>> _______________________________________________ >>>>>>>>> Dev mailing list >>>>>>>>> [email protected] >>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Best Regards, >>>>>>>> >>>>>>>> *Vidura Nanayakkara* >>>>>>>> Software Engineer >>>>>>>> >>>>>>>> Email : [email protected] >>>>>>>> Mobile : +94 (0) 717 919277 <+94%2071%20791%209277> >>>>>>>> Web : http://wso2.com >>>>>>>> Blog : https://medium.com/@viduran <http://wso2.com/> >>>>>>>> Twitter : http://twitter.com/viduranana >>>>>>>> LinkedIn : https://lk.linkedin.com/in/vidura-nanayakkara >>>>>>>> <http://wso2.com/> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Best Regards, >>>>>>> >>>>>>> *Vidura Nanayakkara* >>>>>>> Software Engineer >>>>>>> >>>>>>> Email : [email protected] >>>>>>> Mobile : +94 (0) 717 919277 <+94%2071%20791%209277> >>>>>>> Web : http://wso2.com >>>>>>> Blog : https://medium.com/@viduran <http://wso2.com/> >>>>>>> Twitter : http://twitter.com/viduranana >>>>>>> LinkedIn : https://lk.linkedin.com/in/vidura-nanayakkara >>>>>>> <http://wso2.com/> >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Malintha Amarasinghe >>>>>> Software Engineer >>>>>> *WSO2, Inc. - lean | enterprise | middleware* >>>>>> http://wso2.com/ >>>>>> >>>>>> Mobile : +94 712383306 <+94%2071%20238%203306> >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> Malintha Amarasinghe >>>>> Software Engineer >>>>> *WSO2, Inc. - lean | enterprise | middleware* >>>>> http://wso2.com/ >>>>> >>>>> Mobile : +94 712383306 <+94%2071%20238%203306> >>>>> >>>> >>>> >>>> >>>> -- >>>> Malintha Amarasinghe >>>> Software Engineer >>>> *WSO2, Inc. - lean | enterprise | middleware* >>>> http://wso2.com/ >>>> >>>> Mobile : +94 712383306 <+94%2071%20238%203306> >>>> >>> >>> >>> >>> -- >>> Thusitha Dayaratne >>> Software Engineer >>> WSO2 Inc. - lean . enterprise . middleware | wso2.com >>> >>> Mobile +94712756809 <+94%2071%20275%206809> >>> Blog alokayasoya.blogspot.com >>> About http://about.me/thusithathilina >>> <http://wso2.com/signature> >>> >>> >> >> >> -- >> Malintha Amarasinghe >> Software Engineer >> *WSO2, Inc. - lean | enterprise | middleware* >> http://wso2.com/ >> >> Mobile : +94 712383306 <+94%2071%20238%203306> >> > > > > -- > Best Regards, > > *Vidura Nanayakkara* > Software Engineer > > Email : [email protected] > Mobile : +94 (0) 717 919277 <+94%2071%20791%209277> > Web : http://wso2.com > Blog : https://medium.com/@viduran <http://wso2.com/> > Twitter : http://twitter.com/viduranana > LinkedIn : https://lk.linkedin.com/in/vidura-nanayakkara > <http://wso2.com/> > -- Best Regards, *Vidura Nanayakkara* Software Engineer Email : [email protected] Mobile : +94 (0) 717 919277 Web : http://wso2.com Blog : https://medium.com/@viduran <http://wso2.com/> Twitter : http://twitter.com/viduranana LinkedIn : https://lk.linkedin.com/in/vidura-nanayakkara <http://wso2.com/>
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
