1

カスタム キーストア .jks ファイルとパスワードを使用して URL にリクエストを送信する必要があります。次のコードは次のとおりです。あまりきれいではありません。クリーンアップする必要があります :-) ava.lang.NoSuchFieldError の例外が表示されます。ここで何が欠けているのかわかりません:-/

    try{

                   KeyStore truststore = KeyStore.getInstance(KeyStore.getDefaultType());
        InputStream keystoreInput = new FileInputStream(KEY_STORE_PATH);
        truststore.load(keystoreInput, KEY_STORE_PASSWORD.toCharArray());
        System.out.println("Keystore has " + truststore.size() + " keys"); 

        TrustManagerFactory trustManagerFact = TrustManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        trustManagerFact.init(truststore);

        SSLContext sslContext = SSLContext.getInstance("TLS");
        TrustManager[] trustManagers = trustManagerFact.getTrustManagers();

        KeyManager[] keyManagers = getKeyManagers("jks", new FileInputStream(KEY_STORE_PATH), KEY_STORE_PASSWORD.toString());
        sslContext.init(keyManagers, trustManagers, new SecureRandom());
        SSLSocketFactory socketFactory = new SSLSocketFactory(sslContext,new StrictHostnameVerifier());
        //sslContext.init(keyManagers, trustManagers, new SecureRandom());

        SchemeRegistry schemeRegistry = new SchemeRegistry();
        schemeRegistry.register(new Scheme("https", 443, socketFactory));


        // This is the default port number only; others are allowed

           System.out.println("Trying to get connection");
        //DefaultHttpClient httpclient = new DefaultHttpClient();

        ClientConnectionManager manager = httpclient.getConnectionManager();
         System.out.println("got connection");
        manager.getSchemeRegistry().register(new Scheme("https", 443, socketFactory));

        HttpGet httpget = new HttpGet(serviceUrl);

        // SOAP request send

        response = httpclient.execute(httpget);

.........//その他のコード }

public static KeyManager[] getKeyManagers(String keyStoreType, InputStream keyStoreFile, String keyStorePassword) throws Exception { KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(keyStoreFile, keyStorePassword.toCharArray()); KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(keyStore, keyStorePassword.toCharArray()); kmf.getKeyManagers(); を返します。}

次の例外が表示されます

java.lang.NoSuchFieldError: org.apache.http.impl.client.DefaultHttpClient.setDefaultHttpParams(DefaultHttpClient.java:175) の org/apache/http/protocol/HTTP.DEF_CONTENT_CHARSET org.apache.http.impl.client.DefaultHttpClient のorg.apache.http.impl.client.AbstractHttpClient.getParams(AbstractHttpClient.java:448) の .createHttpParams(DefaultHttpClient.java:158) org.apache.http.impl.client.AbstractHttpClient.createClientConnectionManager(AbstractHttpClient.java:309) の) org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:466) で

ClientConnectionManager マネージャーで = httpclient.getConnectionManager();

ここで何が欠けているのか教えてもらえますか?

4

1 に答える 1