Hi Azeez, We would be very grateful if you can review the suggested approach above by Vidura.
Thanks!and Malintha On Thu, Mar 2, 2017 at 12:41 PM, Vidura Nanayakkara <[email protected]> wrote: > 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.getMethod(). >>>>>>>>>>> >>>>>>>>>>> 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 <+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
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
