Я нахожусь в процессе замены 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;
}
}
Но в посте четко сказано, что он совместим только с 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.
Заранее спасибо.