#java #spring #web-services #concurrency #axis2
#java #весна #веб-сервисы #Параллелизм #axis2
Вопрос:
Мне была поручена часть работы по расследованию и предложению исправления прерывистой и (по-видимому) невоспроизводимой ошибки, которая приводит к сбою вызовов веб-служб со следующей ошибкой:
Message does not conform to configured policy [ TimestampPolicy(S) AuthenticationTokenPolicy(S) ]: No Security Header found
Приложение представляет собой серверную часть на основе Spring для общедоступного веб-сайта с высоким трафиком. Доступ к веб-службам осуществляется с помощью клиента Axis2 1.4.
Я думаю, что мне удалось отследить проблему вплоть до возможной проблемы параллелизма, но, похоже, она не привязана к загрузке точно, статистика сбоев не поддерживает ее (иногда дни с низкой нагрузкой хуже, чем дни с высокой нагрузкой).
В любом случае, весь клиентский код для веб-служб содержится в одном классе с аннотацией @Repository . Классы в более широком приложении, которым требуется доступ к этому классу WebServiceClient, объявляют его в области видимости класса с аннотацией @Resource, где он автоматически подключается по мере необходимости.
Проблема, как я вижу, заключается в том, что в WebServiceClient заглушки объявляются в области видимости класса следующим образом:
private ValidationStub validationStub;
private CustInfoStub custInfoStub;
и инициализируются в области метода при вызове веб-службы
this.validationStub= new ValidationStub (this.url);
prepareStub(this.validationPort, username, password);
где метод prepareStub создает заголовок безопасности и добавляет его следующим образом:
stub._getServiceClient().addHeader(element);
Я думаю, что если я перемещу заглушки из области класса в область метода, это решит проблему, например:
ValidationStub validationStub = new ValidationStub(this.url);
Кто-нибудь сталкивался с подобной проблемой? Я немного обеспокоен тем, что внесение этого изменения повлияет на производительность.