[
https://issues.apache.org/activemq/browse/SMXCOMP-817?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jean-Baptiste Onofré resolved SMXCOMP-817.
------------------------------------------
Resolution: Fixed
Fix Version/s: servicemix-shared-2010.02
Revision 1028479.
> HTTP Binding component: processing client timeout on provider side could led
> to endless loop
> --------------------------------------------------------------------------------------------
>
> Key: SMXCOMP-817
> URL: https://issues.apache.org/activemq/browse/SMXCOMP-817
> Project: ServiceMix Components
> Issue Type: Improvement
> Components: servicemix-http
> Affects Versions: servicemix-http-2008.01, servicemix-http-2009.01,
> servicemix-http-2009.02, servicemix-http-2010.01
> Environment: Windows 7
> Reporter: Andrei Shakirin
> Assignee: Jean-Baptiste Onofré
> Fix For: servicemix-shared-2010.02
>
> Attachments: AsyncBaseLifeCycle.java.patch
>
>
> Hi ServiceMix team,
> I have found one potential issue in SMX http binding component in CXF
> integration scenario.
> Environment: CXF SE, ServiceMix 4.0.
> Test case: CXF service provider has a long running operation (takes more than
> client's HTTP timeout).
> 1) HTTP binding component receives request from the consumer, creates message
> exchange, adds it to locks table and sends it to channel
> (org.apache.servicemix.http.processors.ConsumerProcessor).
> 2) After HTTP incoming timeout, ConsumerProcessor is called once more with
> pending continuation (ContinuationSupport.getContinuation(request, null);).
> By pending continuation exchange is removed from the locks table.
> 3) When business method sends response, HTTP binding component is called
> (ConsumerProcessor.process(MessageExchange exchange)) , checks locks table
> for exchange, exchange is not found there and it throws exception (throw new
> Exception("HTTP request has timed out"))
> 4) Exception is catched in AsyncBaseLifeCycle (processExchangeInTx), added
> into exchange and exchange will be sent to channel again.
> Effect in CXF integration: business method will be called in endless loop
> (there is no explicit check for fault in exchange).
> Proposal: probably it makes sense to change exchange status from ACTIVE to
> ERROR before send exchange again into channel.
> (method AsyncBaseLifeCycle.processExchangeInTx(), code:
> if (oldStatus == ExchangeStatus.ACTIVE) {
> exchange.setError(t instanceof Exception ? (Exception) t
> : new Exception(t));
> channel.send(exchange);
> }
> )
> Regards,
> Andrei Shakirin.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.