Push-уведомление Apple, PKCS12 в java-apns

Я пытаюсь отправить push-уведомление из java-приложения на iphone. есть исходный код: PayLoad payLoad = new PayLoad();

payLoad.addAlert("My alert message");
payLoad.addBadge(45);
payLoad.addSound("default");

PushNotificationManager pushManager = PushNotificationManager.getInstance();
pushManager.addDevice("iPhone", "f4201f5d8278fe39545349d0868a24a3b60ed732");
log.warn("Initializing connectiong with APNS...");

// Connect to APNs
pushManager.initializeConnection(HOST, PORT, 
                             "/etc/Certificates.p12", "password", 
SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);

Device client = pushManager.getDevice("iPhone");

// Send Push
log.warn("Sending push notification...");
PushNotificationManager.getInstance().sendNotification(client, payLoad);

Я получаю исключение в строке:

 pushManager.initializeConnection(HOST, PORT, 
                             "/etc/Certificates.p12", "password", 
SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);

Вот исключение:

java.io.IOException: failed to decrypt safe contents entry: java.io.IOException: getSecretKey failed: PBE SecretKeyFactory not available
at com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.engineLoad(Unknown Source)
at java.security.KeyStore.load(Unknown Source)
at com.anthil.apns.service.ExtractFile.main(ExtractFile.java)

Вызвано: java.io.IOException: getSecretKey не удалось: PBE SecretKeyFactory недоступен на com.sun.net.ssl.internal.pkcs12.PKCS12KeyStore.getPBEKey(Неизвестный источник) ... еще 3 Вызвано: java.security.NoSuchAlgorithmException: PBE SecretKeyFactory недоступен в javax.crypto.SecretKeyFactory.(DashoA13*..) в javax.crypto.SecretKeyFactory.getInstance(DashoA13*..) ... еще 4

Кто-нибудь может мне с этим помочь?

3 ответа

Я недавно столкнулся с тем же исключением. Это произошло только тогда, когда я запускал свой код через Eclipse (версия 3.7.0 Indigo), используя новый Sun JDK 1.7.0. Запуск кода вне Eclipse или использование JDK 1.6.x устранили проблему для меня.

У меня была похожая проблема, которая была решена путем удаления флага '-Djava.ext.dirs' из моей команды java. См.: http://www.scottmcmaster365.com/2009/03/perils-of-abusing-javaextdirs-property.html

Кстати, из предоставленного вами кода вы, похоже, используете старую версию JavaPNS (1.6?). Возможно, вы захотите перейти на последнюю версию (общедоступную 2.0 или даже последнюю версию 2.1) с http://code.google.com/p/javapns/, так как вы получите МНОГИЕ улучшения надежности и сможете выдвигать уведомления одной строкой кода вместо всех этих "сложных" шагов.

Другие вопросы по тегам