TrustManagerFactory IBM Java 1.7
В моем Java-приложении я использовал средство хранилища ключей Java на стороне клиента. Я поддерживаю Oracle и IBM Java. В основном код выглядит так:
пытаться {
KeyStore ks = KeyStore.getInstance("JKS");
MyResources gr = new MyResources(null);
InputStream inpStream = gr.GetResourceAsStream(MYFILE);
if (inpStream == null) {
}
ks.load(inpStream, MYPASSWORD);
TrustManagerFactory Mytmf = null;
try {
Mytmf = TrustManagerFactory.getInstance("SUNX509");
} catch (NoSuchAlgorithmException e) {
Mytmf = TrustManagerFactory.getInstance("IbmX509");
}
Mytmf.init(ks);
} catch (Exception e) {
}
Программа отлично работает в IBM JRE 1.6 и более ранних версиях. В версии 1.7 следующее исключение получено в случае попытки подключения к серверу, и в конце происходит сбой:
Исключение в потоке "myThread": java.lang.NoClassDefFoundError: sun/security/validator/KeyStores 09:06:46>>at sun.security.ssl.X509TrustManagerImpl.(X509TrustManagerImpl.java:80) 09:06:46>> at sun.security.ssl.TrustManagerFactoryImpl$SimpleFactory.getInstance(TrustManagerFactoryImpl.java:240) 09:06:46>> at sun.security.ssl.TrustManagerFactoryImpl.engineInit(TrustManagerFactoryImpl.java:46 >> в 09:09) javax.net.ssl.TrustManagerFactory.init(TrustManagerFactory.java:19) 09:06:46>> в MyTrustMgr.getTrustManager(MyTrustMgr.java:34)
У вас есть идеи, что может быть причиной этой проблемы?
1 ответ
Какой бы ни была причина, код неправильный. Если вместо аргумента try / catch использовать аргумент TrustManagerFactory.getDefaultAlgorithm(), проблема исчезнет.