ClientImpl reuse ResponseContext cause ConcurrentModificationException
----------------------------------------------------------------------

                 Key: CXF-3800
                 URL: https://issues.apache.org/jira/browse/CXF-3800
             Project: CXF
          Issue Type: Bug
          Components: Core
            Reporter: David Liu
            Priority: Critical


In org.apache.cxf.endpoint.ClientImpl.invoke() method, it reuses the existing 
ResponseContext of current thread from its WeakHashMap. It can cause the 
ConcurrentModificationException if the proxy client use an Executor to execute 
an asyc request.

Thread 1. We call the async request method of generated proxy client, it will 
call JaxWsClientProxy.invokeAsync(), and it will get the previous 
ResponseContext of current thread and clear it and reuse it in ClientImpl.
{code}
ClientImpl:

  if (context == null) {
     context = new HashMap<String, Object>();
     Map<String, Object> resp = getResponseContext();
     resp.clear();
{code}

Thread 2, When CXF got the response from the server, it will use a background 
thread to process the response, and also it will get the ResponseContext and 
process the response in ClientImpl
{code}
ClientImpl.onMessage(){
 message.getExchange().setInMessage(message);
 Map<String, Object> resCtx = CastUtils.cast((Map<?, 
?>)message.getExchange().getOutMessage().get(Message.INVOCATION_CONTEXT));

     // *** Get Response context which could be clean by Thread1 ***
      resCtx = CastUtils.cast((Map<?, ?>)resCtx.get(RESPONSE_CONTEXT)); 

      try {
        Object obj[] = processResult(message, message.getExchange(),null, 
resCtx);
}

{code}

Since the ResponseContext in Thread 2 could be clean by the Thread 1 during 
processing the response message, so it could cause 
ConcurrentModificationException, or it can cause data error.

  Could you please fix it by creating a new ResponseContext for the new 
request? thanks.

David

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to