Race condition in WSDLDataLocator
---------------------------------

                 Key: AXIS2-4819
                 URL: https://issues.apache.org/jira/browse/AXIS2-4819
             Project: Axis2
          Issue Type: Bug
          Components: wsdl
    Affects Versions: 1.4.1
            Reporter: Ivan Dubrov


Observable behaviour:

Sometimes WSDL request returns wrong WSDL. This occurs when multiple WSDL 
requests are made at the same time.

The cause:

org.apache.axis2.dataretrieval.WSDLDataLocator is created only once and reused 
in a multiple requests (see DataLocatorFactory, static method 
createDataLocator. The problem is that DataLocator contains a state that is 
changed during the request, most importantly the field "theService". It is 
possible that two concurrent WSDL request are processed at the same time and 
one request overrides theService field set by other request. Consider the 
following scenario:

1. Both requests arrive (at the same time) at the line 129 (I assume version 
1.4.1), which read:
<pre>
axisService2WOM = new AxisService2WSDL11(theService);
</pre>
2. Both requests start executing the line (reading theService field).
3. Since WSDLDataLocator is shared between those two requests and theService is 
field of that class, both requests will use same AxisService to generate WSDL. 
As a result, both requests will output the same WSDL, which is obviously wrong.

I don't understand, why theService is made field after all? I think, it should 
be a local variable instead.



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to