Настройте Apache HttpClient 4.5 в качестве транспортного отправителя в заглушке Axis2 - PullRequest
0 голосов
/ 09 апреля 2020

Я нахожусь в процессе замены Apache версии Httpclient 3.1 на 4.5. Наше приложение использует заглушку веб-службы AXIS 2 SOAP, в которой ниже используется HTTPClient 3.1 TransportSender. Мне нужно перенести его для использования версии HttpClient 4.5. Ниже приведен полный код, который необходимо перенести в версию HttpClient 4.5:

import org.apache.commons.httpclient.protocol.Protocol; // 3.1 version
import org.apache.commons.httpclient.protocol.SecureProtocolSocketFactory; // 3.1 version


final Options clientOptions = stub._getServiceClient().getOptions();
clientOptions.setProperty(HTTPConstants.CUSTOM_PROTOCOL_HANDLER, new Protocol("https", new TLSSocketFactory(), 443));




public class TLSSocketFactory extends SSLSocketFactory implements SecureProtocolSocketFactory {
private SSLSocketFactory internalSSLSocketFactory;
public TLSSocketFactory() throws KeyManagementException, NoSuchAlgorithmException {
    SSLContext context = SSLContext.getInstance("TLS");
    context.init(null, null, null);
    internalSSLSocketFactory = context.getSocketFactory();
}
@Override
public String[] getDefaultCipherSuites() {
    return internalSSLSocketFactory.getDefaultCipherSuites();
}
@Override
public String[] getSupportedCipherSuites() {
    return internalSSLSocketFactory.getSupportedCipherSuites();
}
@Override
public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {
    return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, host, port, autoClose));
}
@Override
public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
    return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
}
@Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
    return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port, localHost, localPort));
}

@Override
public Socket createSocket(String s, int i, InetAddress inetAddress, int i1, HttpConnectionParams httpConnectionParams) throws IOException, UnknownHostException, ConnectTimeoutException {
    return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, i, inetAddress, i1));
}

@Override
public Socket createSocket(InetAddress host, int port) throws IOException {
    return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));
}
@Override
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
    return enableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort));
}
private Socket enableTLSOnSocket(Socket socket) {
    if(socket != null && (socket instanceof SSLSocket)) {
        ((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"});
    }
    return socket;
}

}

Я наткнулся на этот пост StackOverflow: Как настроить SSL с Axis2 с использованием httpClient4

Но в посте четко сказано, что он совместим только с httpclient 4.4.1.

Axis2 1.7.0 поддерживает Apache HttpClient 4.x в дополнение к больше не поддерживается Commons HttpClient 3.x. Чтобы включить поддержку HttpClient 4.x, используйте org. apache .axis2.transport.http.impl.httpclient4.HTTPClient4TransportSender. apache .axis2.transport.http.CommonsHTTPTransportSender в axis2. * 1026. Обратите внимание, что код был написан для HttpClient 4.2.x и должен работать с 4.3.x и 4.4.x, но несовместим с 4.5.x.

Мы используем HttpClient 4.5 и он четко говорит он несовместим с 4.5.x

Я действительно застрял и мне нужна помощь по переносу вышеуказанного фрагмента кода для использования HttpClient 4.5.

Заранее спасибо.

...