Как отправить запрос SOAP с аутентификацией ssl? - PullRequest
0 голосов
/ 07 сентября 2018

Я хочу отправить soap запрос с ssl authentication

Обычно я получаю сервис с текущим кодом

URL url = TransactionImports.class.getResource("agentWsdl.wsdl");
AgentServices agentServices = new AgentServices_Service(url, new QName("agentTargetNameSpace", "AgentServices")).getAgentServicesPort();

BindingProvider bindingProvider = (BindingProvider) agentServices;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, applicationProperties.getProperty("service.url"));
bindingProvider.getRequestContext().put(BindingProviderProperties.REQUEST_TIMEOUT, applicationProperties.getProperty("service.timeout"));

return agentService;

но чем мне нужно добавить ssl authentication, мой сертификат my-certificate.pfx file

и я изменил код для добавления этого сертификата следующим образом

String keyPassphrase = "myPassword";
AgentServices agentServices = new AgentServices_Service(url, new QName("agentTargetNamespace", "AgentServices")).getAgentServicesPort();


SSLContextBuilder sslBuilder = SSLContexts.custom();
SSLContext sslContext = sslBuilder.loadTrustMaterial(ClientUtil.class.getResource("/my-certificate.pfx"), "myPassword".toCharArray())
                    .build();
BindingProvider bindingProvider = (BindingProvider) agentServices;
bindingProvider.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, applicationProperties.getProperty("service.url"));
bindingProvider.getRequestContext().put(BindingProviderProperties.REQUEST_TIMEOUT, applicationProperties.getProperty("service.timeout"));
bindingProvider.getRequestContext().put(BindingProviderProperties.SSL_SOCKET_FACTORY, sslContext.getSocketFactory());

но это не работает. Я получаю сообщение об ошибке при попытке отправить запрос

Ошибка выглядит как java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

Я впервые пытаюсь отправить запрос с ssl authentication, что я сделал не так? Можете ли вы посоветовать мне какие-нибудь хорошие решения, как я могу установить сертификат для вызова службы?

...