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 <[email protected]> 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 <[email protected]>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
> [email protected]
> 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
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to