Alternative to sslSocketFactory in oracle 19c

78 Views Asked by At

I am using OkHttp3 version 4.11.0 and user sslsocketfactory for trust all certificate .But i get error compiling in oracle 19c:

create or replace and compile java source named "okhttp" as
package okk;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import okhttp3.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.lang.*;
import javax.net.ssl.*;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;

public class OkHttpRequestSender implements HttpRequestSender {

    private static final ObjectMapper mapper;

    static {
        mapper = new ObjectMapper();
        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    }

    private static final TrustManager[] trustAllCerts = new TrustManager[]{
            new X509TrustManager() {
                @Override
                public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                }

                @Override
                public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
                }

                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new java.security.cert.X509Certificate[]{};
                }
            }
    };

    private static final SSLContext trustAllSslContext;

    static {
        try {
            trustAllSslContext = SSLContext.getInstance("SSL");
            trustAllSslContext.init(null, trustAllCerts, new java.security.SecureRandom());
        } catch (NoSuchAlgorithmException | KeyManagementException e) {
            throw new RuntimeException(e);
        }
    }

    private static final SSLSocketFactory trustAllSslSocketFactory = trustAllSslContext.getSocketFactory();

    static Logger logger = Logger.getLogger(OkHttpRequestSender.class.getName());

    public static OkHttpClient trustAllSslClient(OkHttpClient client) {
      
  
    
      OkHttpClient.Builder builder1 = client.newBuilder();
        builder1.sslSocketFactory( trustAllSslSocketFactory, (X509TrustManager) trustAllCerts[0]);

        builder1.hostnameVerifier((hostname, session) -> true);
        return builder1.build();
    }

    @Override
    public HttpResponse sendPostRequest(@NotNull String url, Object requestBody, @Nullable Map<String, String> headers) {

        OkHttpClient client = new OkHttpClient().newBuilder()
                .connectTimeout(1, TimeUnit.MINUTES)
                .followRedirects(false)
                .build();

        client = trustAllSslClient(client);

        configureClient(client);

        byte[] sendData;
        if (requestBody instanceof String) {
            sendData = ((String) requestBody).getBytes();
        } else {
            try {
                sendData = mapper.writeValueAsBytes(requestBody);
            } catch (JsonProcessingException e) {
                throw new RuntimeException("error.in.pars.object.to.json", e);
            }
        }

        RequestBody httpRequestBody = RequestBody.create(sendData, MediaType.parse("application/json; charset=utf-8"));
        Request.Builder requestBuilder = new Request.Builder()
                .url(url)
                .post(httpRequestBody);
        if(headers != null){
            requestBuilder.headers(Headers.of(headers));
        }
        Request request = requestBuilder.build();

        Call call = client.newCall(request);
        HttpResponse response = new HttpResponse();
        try {
            okhttp3.Response okResponse = call.execute();
            ResponseBody responseBody = okResponse.body();
            if(responseBody != null) {
                response.setBody(responseBody.string());
            }

            Map<String, String> responseHeaders = new HashMap<>();
            okResponse.headers().forEach(pair -> {
                responseHeaders.put(pair.component1(), pair.component2());
            });

            response.setHeaders(responseHeaders);
            response.setStatus(okResponse.code());
            return response;
        } catch (IOException e) {
            logger.log(Level.SEVERE, "http request failed with message : {}", e.getMessage());
            if (e instanceof SSLException) {
                response.setStatus(496);
            } else {
                response.setStatus(408);
            }
            return response;
        }
    }

    protected void configureClient(OkHttpClient client) {
    }

    @Override
    public HttpResponse sendGetRequest(@NotNull String url, @Nullable Map<String, String> headers) {
        throw new RuntimeException("Not Implemented");
    }
}

i got this error :

error: cannot find symbol

  builder.sslSocketFactory( trustAllSslSocketFactory, (X509TrustManager) trustAllCerts[0]);

anyone can help me?

when i compiling my code i got error

how can i do to fix this error type

my okhttp3 version is 4.11.0

oracle version is 19c

0

There are 0 best solutions below