У меня есть веб-приложение на Java, которое использует различные веб-сервисы.Теперь я должен использовать один WebService, который требует аутентификации в обоих направлениях.Я использую SSLClientAxisEngineConfig
реализацию (https://github.com/linhkuivanen/axistools), которую я отправляю в качестве параметра моему классу, который расширяет org.apache.axis.client.Service
. Это сработало. Но только если это первое использование некоторого Axis Client
. После этого, если я потреблюWebService с «https», который не требует сертификата, я получил сообщение об ошибке «Цепочка сертификатов ненадежного сервера».
Если я сначала использую веб-сервис, который не требует аутентификации сертификата, при попытке использовать другой, которыйМне нужна аутентификация, я получил сообщение об ошибке «Ошибка рукопожатия».
Я предполагаю, что Axis
имеет какой-то кэш, который использует первую конфигурацию, но я не могу найти способ решить мою проблему.
Редактировать : Я решил проблему. Я сгенерировал новый клиент Axis с wsdl2java
(Axis2-1.7.8) вместо использования генератора клиента веб-службы Eclipse. Прежде чем использовать WebService, я регистрируюсьновый https
протокол с сертификатом клиента и cacerts:
Protocol protocol = new Protocol("https", socketFactoryDinamico, 443);
Protocol.registerProtocol("https", protocol);
и после его использования я отменяю регистрацию протокола:
Protocol.unregisterProtocol("https");
После этого я могуиспользовать другие Web-сервисы без аутентификации сертификата без проблем.
Edit2:
Классы, сгенерированные Eclipse:
public class NfseWSServiceLocator extends org.apache.axis.client.Service implements NfseWSService {
}
public interface NfseWSService extends javax.xml.rpc.Service {
}
И класс, сгенерированный Axis2:
public class NfseWSServiceStub extends org.apache.axis2.client.Stub {
}