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
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

Reply via email to