[ 
https://issues.apache.org/jira/browse/CXF-5574?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Sergey Beryozkin resolved CXF-5574.
-----------------------------------

    Resolution: Duplicate
      Assignee: Sergey Beryozkin

> CXF JAX-RS loops infinitely when server closes connection on receipt of 
> message
> -------------------------------------------------------------------------------
>
>                 Key: CXF-5574
>                 URL: https://issues.apache.org/jira/browse/CXF-5574
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-RS
>    Affects Versions: 2.7.8, 2.7.10
>         Environment: Ubuntu 12.10 64bit
>            Reporter: jd
>            Assignee: Sergey Beryozkin
>            Priority: Blocker
>
> I am using CXF Jax-RS using WebClient.get(InvocationCallback<T> callback). 
> Once server receives the request, the server closes connection (without 
> sending any response). This causes CXF Jax-RS to go in an infinite loop. 
> Using eclipse, I was able to put breakpoints at locations described below and 
> was able to obtain stack traces that proves the problem. Since more than one 
> threads become involved, stack is broken into multiple parts.
> Please help resolve this issue as this prevents using CXF JAX-RS in 
> production environment.
> The stack traces are as follows:
> Stack 1:
> -------
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream(HTTPConduit$WrappedOutputStream).handleResponseOnWorkqueue(boolean,
>  boolean) line: 1126     
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.handleResponseAsync()
>  line: 227     
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream(HTTPConduit$WrappedOutputStream).handleResponse()
>  line: 1506        
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream(HTTPConduit$WrappedOutputStream).close()
>  line: 1310 
> URLConnectionHTTPConduit(AbstractConduit).close(Message) line: 56     
> URLConnectionHTTPConduit(HTTPConduit).close(Message) line: 628        
> MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(Message)
>  line: 62       
> PhaseInterceptorChain.doIntercept(Message) line: 272  
> WebClient(AbstractClient).doRunInterceptorChain(Message) line: 634    
> WebClient.doInvokeAsync(String, Object, Class<?>, Type, Class<?>, Type, 
> InvocationCallback<T>) line: 942      
> WebClient.doInvokeAsyncCallback(String, Object, Class<?>, Type, 
> InvocationCallback<T>) line: 914      
> WebClient.post(Object, InvocationCallback<T>) line: 450       
> MyApplicationHandler.sendRequest(MyApplicationHandler$CPendingRequest) line: 
> 298      
> Stack 2:
> -------
> Runnable on line 1126 of HttpConduit is run by an executor thread.
> handleResponseInternal on 1129 of HttpConduit throws java.net.SocketException:
> Unexpected end of file from server causing 1131 catch block to run.
> The interceptor chain includes
> Chain org.apache.cxf.phase.PhaseInterceptorChain@701fe362. Current flow:
>   receive [PolicyInInterceptor]
>   pre-protocol-frontend [ClientResponseFilterInterceptor]
>   unmarshal [ClientAsyncResponseInterceptor]
> Henceforth the stack is as follows: 
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream(HTTPConduit$WrappedOutputStream).handleResponseOnWorkqueue(boolean,
>  boolean) line: 1126     
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.handleResponseAsync()
>  line: 227     
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream(HTTPConduit$WrappedOutputStream).handleResponse()
>  line: 1506        
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream(HTTPConduit$WrappedOutputStream).close()
>  line: 1310 
> URLConnectionHTTPConduit(AbstractConduit).close(Message) line: 56     
> URLConnectionHTTPConduit(HTTPConduit).close(Message) line: 628        
> UpfrontConduitSelector(AbstractConduitSelector).complete(Exchange) line: 185  
> WebClient(AbstractClient).preProcessResult(Message) line: 556 
> WebClient.handleAsyncResponse(Message) line: 979      
> WebClient.access$100(WebClient, Message) line: 80     
> WebClient$ClientAsyncResponseInterceptor.handleMessage(Message) line: 1265    
> PhaseInterceptorChain.doIntercept(Message) line: 272  
> ClientMessageObserver.onMessage(Message) line: 56     
> HTTPConduit$WrappedOutputStream$1.run() line: 1138    
> AutomaticWorkQueueImpl$3.run() line: 428      
> AutomaticWorkQueueImpl$1(ThreadPoolExecutor).runWorker(ThreadPoolExecutor$Worker)
>  line: 1110  
> ThreadPoolExecutor$Worker.run() line: 603     
> AutomaticWorkQueueImpl$AWQThreadFactory$1.run() line: 353     
> Thread.run() line: 722        
> Stack 3:
> -------
> MyApplicationHandler$CPendingRequest.failed(ClientException) line: 657        
> JaxrsClientCallback<T>.handleException(Map<String,Object>, Throwable) line: 
> 90        
> WebClient.handleAsyncResponse(Message) line: 988      
> WebClient.access$100(WebClient, Message) line: 80     
> WebClient$ClientAsyncResponseInterceptor.handleMessage(Message) line: 1265    
> PhaseInterceptorChain.doIntercept(Message) line: 272  
> ClientMessageObserver.onMessage(Message) line: 56     
> HTTPConduit$WrappedOutputStream$1.run() line: 1138    
> AutomaticWorkQueueImpl$3.run() line: 428      
> AutomaticWorkQueueImpl$1(ThreadPoolExecutor).runWorker(ThreadPoolExecutor$Worker)
>  line: 1110  
> ThreadPoolExecutor$Worker.run() line: 603     
> AutomaticWorkQueueImpl$AWQThreadFactory$1.run() line: 353     
> Thread.run() line: 722        
> Following stacks 4 & 5 now repeat in an infinite loop:
> Stack 4:
> -------
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream(HTTPConduit$WrappedOutputStream).handleResponseOnWorkqueue(boolean,
>  boolean) line: 1126     
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.handleResponseAsync()
>  line: 227     
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream(HTTPConduit$WrappedOutputStream).handleResponse()
>  line: 1506        
> URLConnectionHTTPConduit$URLConnectionWrappedOutputStream(HTTPConduit$WrappedOutputStream).close()
>  line: 1310 
> URLConnectionHTTPConduit(AbstractConduit).close(Message) line: 56     
> URLConnectionHTTPConduit(HTTPConduit).close(Message) line: 628        
> UpfrontConduitSelector(AbstractConduitSelector).complete(Exchange) line: 185  
> WebClient(AbstractClient).preProcessResult(Message) line: 556 
> WebClient.handleAsyncResponse(Message) line: 979      
> WebClient.access$100(WebClient, Message) line: 80     
> WebClient$ClientAsyncResponseInterceptor.handleMessage(Message) line: 1265    
> PhaseInterceptorChain.doIntercept(Message) line: 272  
> ClientMessageObserver.onMessage(Message) line: 56     
> HTTPConduit$WrappedOutputStream$1.run() line: 1138    
> AutomaticWorkQueueImpl$3.run() line: 428      
> AutomaticWorkQueueImpl$1(ThreadPoolExecutor).runWorker(ThreadPoolExecutor$Worker)
>  line: 1110  
> ThreadPoolExecutor$Worker.run() line: 603     
> AutomaticWorkQueueImpl$AWQThreadFactory$1.run() line: 353     
> Thread.run() line: 722        
> Stack 5:
> -------
> MyApplicationHandler$CPendingRequest.failed(ClientException) line: 657        
> JaxrsClientCallback<T>.handleException(Map<String,Object>, Throwable) line: 
> 90        
> WebClient.handleAsyncResponse(Message) line: 988      
> WebClient.access$100(WebClient, Message) line: 80     
> WebClient$ClientAsyncResponseInterceptor.handleMessage(Message) line: 1265    
> PhaseInterceptorChain.doIntercept(Message) line: 272  
> ClientMessageObserver.onMessage(Message) line: 56     
> HTTPConduit$WrappedOutputStream$1.run() line: 1138    
> AutomaticWorkQueueImpl$3.run() line: 428      
> AutomaticWorkQueueImpl$1(ThreadPoolExecutor).runWorker(ThreadPoolExecutor$Worker)
>  line: 1110  
> ThreadPoolExecutor$Worker.run() line: 603     
> AutomaticWorkQueueImpl$AWQThreadFactory$1.run() line: 353     
> Thread.run() line: 722        
> Breakpoints:
> -----------
> MyApplicationHandler [line: 657] - failed
> MyApplicationHandler [line 298] - sendRequest
> AbstractConduit [line: 54] - close(Message)   
> ClientMessageObserver [line: 56] - ClientMessageObserver      
> HTTPConduit$WrappedOutputStream$1 [line: 1126] - 
> handleResponseOnWorkqueue(boolean, boolean)  
> HTTPConduit$WrappedOutputStream [line: 1310] - close()        
> HTTPConduit$WrappedOutputStream$1 [line: 1129] - 
> handleResponseOnWorkqueue(boolean, boolean)  
> HTTPConduit$WrappedOutputStream$1 [line: 1131] - 
> handleResponseOnWorkqueue(boolean, boolean) 



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

Reply via email to