Hi Lakmali,

On Wed, Oct 22, 2014 at 11:15 PM, Lakmali Baminiwatta <lakm...@wso2.com>
wrote:

> Hi Lalaji,
>
> In REQUESTHASHGenerator, we excluded Date and User-Agent headers when
> generating the request hash. If there are any other or custom headers which
> need to be excluded, we can write a new Hash Generator implementation by
> extending REQUESTHASHGenerator and override 'getDigest()' method. Then we
> can use that in the cache mediator.
>

   Thanks for the info..I guess,we should include this information in to
wiki,regarding this feature..

>
> Thanks,
> Lakmali
>
> On 22 October 2014 22:59, Lalaji Sureshika <lal...@wso2.com> wrote:
>
>> Hi,
>>
>>
>> On Fri, Dec 6, 2013 at 2:49 AM, Lakmali Baminiwatta <lakm...@wso2.com>
>> wrote:
>>
>>> Hi Sanjeewa,
>>>
>>>
>>> On 6 December 2013 07:48, Sanjeewa Malalgoda <sanje...@wso2.com> wrote:
>>>
>>>>
>>>>
>>>>
>>>> On Mon, Dec 2, 2013 at 6:23 PM, Lakmali Baminiwatta <lakm...@wso2.com>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>>
>>>>> On 2 December 2013 18:02, Sumedha Rubasinghe <sume...@wso2.com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Mon, Dec 2, 2013 at 5:24 PM, Lakmali Baminiwatta <lakm...@wso2.com
>>>>>> > wrote:
>>>>>>
>>>>>>> Hi Sanjeewa,
>>>>>>>
>>>>>>>
>>>>>>> On 2 December 2013 17:00, Sanjeewa Malalgoda <sanje...@wso2.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Sun, Dec 1, 2013 at 11:01 PM, Lakmali Baminiwatta <
>>>>>>>> lakm...@wso2.com> wrote:
>>>>>>>>
>>>>>>>>> Hi all,
>>>>>>>>>
>>>>>>>>> When processing the response, if the request is REST then soap
>>>>>>>>> format, transport headers and message type are also stored. Similarly 
>>>>>>>>> when
>>>>>>>>> retrieving the cached response, if the request is REST then stored 
>>>>>>>>> values
>>>>>>>>> are used to compose the response message. With these modifications 
>>>>>>>>> cache
>>>>>>>>> mediator returns the response correctly for non SOAP requests.
>>>>>>>>>
>>>>>>>>> But we have another issue here. Currently the request Hash value
>>>>>>>>> is derived from the SOAP message body. So for REST calls it gets the 
>>>>>>>>> same
>>>>>>>>> hash value for all requests which sent without a payload.
>>>>>>>>>
>>>>>>>>> ex: Both below requests are recognized as the same request
>>>>>>>>> according to the hash value derived from DOMHASHGenerator.
>>>>>>>>>
>>>>>>>>> curl -v -H "Authorization: Bearer 1EV6Qqa_DboaBzNj2JfiyXoO1Ysa"
>>>>>>>>> http://localhost:8280/test/1.0.0?regNo=001
>>>>>>>>>  curl -v -H "Authorization: Bearer 1EV6Qqa_DboaBzNj2JfiyXoO1Ysa"
>>>>>>>>> http://localhost:8280/test/1.0.0?regNo=002
>>>>>>>>> <http://localhost:8280/test/1.0.0?regNo=001>
>>>>>>>>>
>>>>>>>>> So right now we need to figure out a mechanism to generate hash
>>>>>>>>> value for REST calls.
>>>>>>>>>
>>>>>>>> How if we consider full request path(including query params and
>>>>>>>> etc) + headers. For above example something like follows (full request 
>>>>>>>> path
>>>>>>>> and "," separated transport headers list). We can compute hash value of
>>>>>>>> that string and store it.
>>>>>>>>
>>>>>>>> *"http://localhost:8280/test/1.0.0?regNo=002,Authorization
>>>>>>>> <http://localhost:8280/test/1.0.0?regNo=002,Authorization>: Bearer
>>>>>>>> 1EV6Qqa_DboaBzNj2JfiyXoO1Ysa"*
>>>>>>>>
>>>>>>>>  Here we cannot only consider full request path as we take some
>>>>>>>> decisions at backend based on headers. WDYT?
>>>>>>>>
>>>>>>>
>>>>>>> Yeah, need to consider request path + headers. But I think we don't
>>>>>>> need hash Authorization headers, as request hits the cache mediator 
>>>>>>> after
>>>>>>> going through the handlers. So in default case, at the time of hashing 
>>>>>>> we
>>>>>>> don't have the authorization header. So AFAIU, the only concern which 
>>>>>>> comes
>>>>>>> up here is, same request invoked using different keys may get the 
>>>>>>> response
>>>>>>> from the cache. I believe that is ok. WDYT?
>>>>>>>
>>>>>>
>>>>>>
>>>>>> We simply store response values against a given request pattern. But
>>>>>> Authorisation header should not be part of it. Otherwise it will become a
>>>>>> token based cache. But are whole lot of other header parameter like
>>>>>> content-type, accept header, accept language (
>>>>>> http://en.wikipedia.org/wiki/List_of_HTTP_header_fields).
>>>>>>
>>>>>> Let's ignore Authorisation header for time being.
>>>>>>
>>>>>> +1. So for now let's generate the hash based on request path, Accept
>>>>> & Content-Type headers and payload (if available).
>>>>>
>>>> +1. IMO we should use all other headers except authentication headers
>>>> (Ex. sometimes response may depend on client type or sometimes it may
>>>> depend on any other custom header).
>>>>
>>>
>>> We can use all the headers [1]. But there are some headers which seems
>>> not correct to use for hashing the request.
>>>
>>> ex:
>>> Date - This is unique for each request. If this is used for generting
>>> the hash, cache will be never used.
>>> User-Agent - This is specific to the user client/browser who sent the
>>> request. So different caches for different users.
>>>
>>> So I think we need to figure out which headers to skip or which headers
>>> to use for hash generation.
>>>
>>
>>      Did we consider ,  above unique request headers to include in
>> hashing the request or are we generating the cache digest based on all
>> transport headers..?
>>
>>>
>>>
>>> [1]http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
>>>
>>> Thanks,
>>> Lakmali
>>>
>>>>
>>>> Thanks,
>>>> sanjeewa.
>>>>
>>>>>
>>>>> Thanks,
>>>>> Lakmali
>>>>>
>>>>>>
>>>>>> I am writing a new Digest Generator implementation by extending
>>>>>> DOMHASHGenerator. This basically does what DOMHASHGenerator had been 
>>>>>> doing
>>>>>> and additionally it digests request path and available transport headers 
>>>>>> as
>>>>>> well.
>>>>>>
>>>>>> Thanks,
>>>>>> Lakmali
>>>>>>
>>>>>>>
>>>>>>> Thanks,
>>>>>>> sanjeewa.
>>>>>>>
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Lakmali
>>>>>>>>
>>>>>>>>
>>>>>>>> On 29 November 2013 00:18, Lakmali Baminiwatta <lakm...@wso2.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> Hi all,
>>>>>>>>>
>>>>>>>>> Currently Cache mediator stores the response message as a byte
>>>>>>>>> array and builds the soap envelope from that when sending the cached
>>>>>>>>> response[1]. When building the response, it checks whether the request
>>>>>>>>> format is in SOAP11 or SOAP12 and do the build accordingly.
>>>>>>>>>
>>>>>>>>> For SOAP requests, the SOAP format for response and request
>>>>>>>>> messages are same since most of the time a WSDL is used. So above 
>>>>>>>>> logic
>>>>>>>>> works.
>>>>>>>>>
>>>>>>>>> But the response message for REST calls may be in different SOAP
>>>>>>>>> formats than the request. This results in errors when building the 
>>>>>>>>> message.
>>>>>>>>>
>>>>>>>>> ex:
>>>>>>>>>
>>>>>>>>> Below REST call's request message context is SOAP12. But the
>>>>>>>>> response SOAP envelope is SOAP11. Hence building the message throws an
>>>>>>>>> exception.
>>>>>>>>>
>>>>>>>>> curl -v -H "Authorization: Bearer 1EV6Qqa_DboaBzNj2JfiyXoO1Ysa"
>>>>>>>>> http://localhost:8280/test/1.0.0?regNo=001
>>>>>>>>>
>>>>>>>>> Further Content-Type of the responses can be different (ex:
>>>>>>>>> application/xml, application/json). So I think we should store the 
>>>>>>>>> actual
>>>>>>>>> SOAP format and the Content-Type of the response than just storing the
>>>>>>>>> response envelope. One option would be to store them in 
>>>>>>>>> CachableResponse
>>>>>>>>> object[2] (May be in a property map?)
>>>>>>>>>
>>>>>>>>> Any better way to fix this?
>>>>>>>>>
>>>>>>>>> [1]
>>>>>>>>> https://svn.wso2.org/repos/wso2/carbon/platform/branches/turing/dependencies/synapse/2.1.2-wso2v2/modules/core/src/main/java/org/apache/synapse/mediators/builtin/CacheMediator.java
>>>>>>>>> [2]
>>>>>>>>> https://svn.wso2.org/repos/wso2/carbon/platform/branches/turing/dependencies/commons/caching/4.0.2/modules/core/src/main/java/org/wso2/caching/CachableResponse.java
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>>> Lakmali
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On 22 November 2013 15:59, Sumedha Rubasinghe <sume...@wso2.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Dinusha,
>>>>>>>>>> Did you identify what needs to be fixed? I think ESB team is busy
>>>>>>>>>> with a release.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Thu, Nov 21, 2013 at 7:09 PM, Dinusha Senanayaka <
>>>>>>>>>> dinu...@wso2.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Hi All,
>>>>>>>>>>>
>>>>>>>>>>> We are trying to add response caching as a default feature in
>>>>>>>>>>> API Manager using Cache mediator. There, we found that Cache 
>>>>>>>>>>> mediator could
>>>>>>>>>>> handle only SOAP-1.1 or  SOAP-1.2 messages.
>>>>>>>>>>>
>>>>>>>>>>> - If backend returns a POX response, it throws the following
>>>>>>>>>>> exception [1] when request is served from the cache.
>>>>>>>>>>> - If backend returns a JSON response, and once the response get
>>>>>>>>>>> added to cache, client does not receive a response until cache 
>>>>>>>>>>> expires. (No
>>>>>>>>>>> backend errors)
>>>>>>>>>>>
>>>>>>>>>>> Is it possible to fix those for API Manager-1.6.0 release ?
>>>>>>>>>>>
>>>>>>>>>>> [1] [2013-11-21 13:33:18,044] ERROR - NativeWorkerPool Uncaught
>>>>>>>>>>> exception
>>>>>>>>>>> org.apache.axiom.soap.SOAPProcessingException: Transport level
>>>>>>>>>>> information does not match with SOAP Message namespace URI
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.identifySOAPVersion(StAXSOAPModelBuilder.java:187)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:170)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.axis2.saaj.SOAPPartImpl.<init>(SOAPPartImpl.java:194)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.axis2.saaj.SOAPMessageImpl.<init>(SOAPMessageImpl.java:112)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.axis2.saaj.MessageFactoryImpl.createMessage(MessageFactoryImpl.java:132)
>>>>>>>>>>>     at
>>>>>>>>>>> org.wso2.caching.util.SOAPMessageHelper.buildSOAPEnvelopeFromBytes(SOAPMessageHelper.java:77)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.mediators.builtin.CacheMediator.processRequestMessage(CacheMediator.java:319)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.mediators.builtin.CacheMediator.mediate(CacheMediator.java:170)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.mediators.filters.FilterMediator.mediate(FilterMediator.java:160)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.rest.Resource.process(Resource.java:297)
>>>>>>>>>>>     at org.apache.synapse.rest.API.process(API.java:341)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:76)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:63)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:220)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:83)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:337)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.transport.passthru.ServerWorker.processEntityEnclosingRequest(ServerWorker.java:378)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:184)
>>>>>>>>>>>     at
>>>>>>>>>>> org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
>>>>>>>>>>>     at
>>>>>>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>>>>>>>>>>>     at
>>>>>>>>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>>>>>>>>>>>     at java.lang.Thread.run(Thread.java:619)
>>>>>>>>>>>
>>>>>>>>>>> Regards,
>>>>>>>>>>> Dinusha.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Dinusha Dilrukshi
>>>>>>>>>>> Senior Software Engineer
>>>>>>>>>>> WSO2 Inc.: http://wso2.com/
>>>>>>>>>>> Mobile: +94725255071
>>>>>>>>>>> Blog: http://dinushasblog.blogspot.com/
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> /sumedha
>>>>>>>>>> m: +94 773017743
>>>>>>>>>> b :  bit.ly/sumedha
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Dev mailing list
>>>>>>>>>> Dev@wso2.org
>>>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Lakmali Baminiwatta
>>>>>>>>>  Software Engineer
>>>>>>>>> WSO2, Inc.: http://wso2.com
>>>>>>>>> lean.enterprise.middleware
>>>>>>>>> mobile:  +94 71 2335936
>>>>>>>>> blog : lakmali.com
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Lakmali Baminiwatta
>>>>>>>>  Software Engineer
>>>>>>>> WSO2, Inc.: http://wso2.com
>>>>>>>> lean.enterprise.middleware
>>>>>>>> mobile:  +94 71 2335936
>>>>>>>> blog : lakmali.com
>>>>>>>>
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Dev mailing list
>>>>>>>> Dev@wso2.org
>>>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>>
>>>>>>> *Sanjeewa Malalgoda*
>>>>>>> Senior Software Engineer
>>>>>>> WSO2 Inc.
>>>>>>> Mobile : +94713068779
>>>>>>>
>>>>>>>  <http://sanjeewamalalgoda.blogspot.com/>blog
>>>>>>> :http://sanjeewamalalgoda.blogspot.com/
>>>>>>> <http://sanjeewamalalgoda.blogspot.com/>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Lakmali Baminiwatta
>>>>>>  Software Engineer
>>>>>> WSO2, Inc.: http://wso2.com
>>>>>> lean.enterprise.middleware
>>>>>> mobile:  +94 71 2335936
>>>>>> blog : lakmali.com
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Dev mailing list
>>>>>> Dev@wso2.org
>>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> /sumedha
>>>>>> b :  bit.ly/sumedha
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Lakmali Baminiwatta
>>>>>  Software Engineer
>>>>> WSO2, Inc.: http://wso2.com
>>>>> lean.enterprise.middleware
>>>>> mobile:  +94 71 2335936
>>>>> blog : lakmali.com
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>>
>>>> *Sanjeewa Malalgoda*
>>>> Senior Software Engineer
>>>> WSO2 Inc.
>>>> Mobile : +94713068779
>>>>
>>>>  <http://sanjeewamalalgoda.blogspot.com/>blog
>>>> :http://sanjeewamalalgoda.blogspot.com/
>>>> <http://sanjeewamalalgoda.blogspot.com/>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Lakmali Baminiwatta
>>>  Software Engineer
>>> WSO2, Inc.: http://wso2.com
>>> lean.enterprise.middleware
>>> mobile:  +94 71 2335936
>>> blog : lakmali.com
>>>
>>>
>>> _______________________________________________
>>> Dev mailing list
>>> Dev@wso2.org
>>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>>
>>>
>>
>>
>> --
>> Lalaji Sureshika
>> WSO2, Inc.;  http://wso2.com/
>> email: lal...@wso2.com; cell: +94 71 608 6811
>> blog: http://lalajisureshika.blogspot.com
>>
>>
>>
>
>
> --
> Lakmali Baminiwatta
>  Senior Software Engineer
> WSO2, Inc.: http://wso2.com
> lean.enterprise.middleware
> mobile:  +94 71 2335936
> blog : lakmali.com
>
>


-- 
Lalaji Sureshika
WSO2, Inc.;  http://wso2.com/
email: lal...@wso2.com; cell: +94 71 608 6811
blog: http://lalajisureshika.blogspot.com
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to