Я столкнулся с проблемой на моем производственном сервере для веб-службы с параллельными запросами.
Проблема заключается в том, что когда веб-служба получает (например) два запроса на два разных метода (каждый метод возвращаетдругой объект) в том же сервисе, веб-служба будет возвращать тип объекта второго запроса.
Для простого и простого воспроизведения проблемы я создаю простой веб-сервис только с одним сервисом и двумя методами с одинаковымсреда производственного сервера.
Код ( RequestMethods.class )
package test;
import beans.Request1Response;
import beans.Request2Response;
public class RequestMethods {
public Request1Response request1() {
Request1Response output = new Request1Response();
try {
Thread.sleep(10 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
output.setError_code(1);
output.setError_msg("message1");
return output;
}
public Request2Response request2() {
Request2Response output = new Request2Response();
output.setError_code(2);
output.setError_msg("message2");
return output;
}
}
Конфигурации ( services.xml )
<service name="RequestMethods">
<Description>
Concurrent Requests test
</Description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass" locked="false">test.RequestMethods</parameter>
</service>
Тест
Я сделал запрос на request1 и, прежде чем он вернется, сделал еще один запрос на request2 .
Результат для request1 (первый запрос, но второй полученный ответ):
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns:request2Response xmlns:ns="http://test/xsd">
<ns:return>
<error_code xmlns="http://beans/xsd">1</error_code>
<error_msg xmlns="http://beans/xsd">message1</error_msg>
</ns:return>
</ns:request2Response>
</soapenv:Body>
</soapenv:Envelope>
Результат для request2 (второй запрос, кромепервый полученный ответ):
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns:request2Response xmlns:ns="http://test/xsd">
<ns:return>
<error_code xmlns="http://beans/xsd">2</error_code>
<error_msg xmlns="http://beans/xsd">message2</error_msg>
</ns:return>
</ns:request2Response>
</soapenv:Body>
</soapenv:Envelope>
Как вы можете видеть выше, ответ для request1 должен быть типа request1Response , но он request2Response *Вместо 1040 *.
Я использую следующую среду:
- Tomcat 5.5.25 для сервера приложений
- Axis2 1.2 для веб-службы
- Java версия 1.5.0_11
Кто-нибудь также сталкивался с этой проблемой или знает, как ее решить?Я уже пытался изменить версию Axis2 на 1.6, но проблема сохраняется.
Любая помощь приветствуется.
С уважением, João