Доступ к com.sun.crypto.provider в Равноденствие - PullRequest
2 голосов
/ 23 февраля 2012

Я пытаюсь интегрировать некоторый ранее существующий код, который опирается на Класс com.sun.crypto.provider.SunJCE в наше Равноденствие приложение (версия 3.7.1). Теперь я знаю по умолчанию com.sun пакеты не доступны для пакетов, поэтому я сделал фрагмент с Идея расширения рамок для экспорта пакета. Вот ее манифест:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Extension
Bundle-SymbolicName: extension
Bundle-Version: 1.0.0.qualifier
Fragment-Host: system.bundle; extension:=framework
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Export-Package: com.sun.crypto.provider

Подсказка 1: PDE отмечает строку Export-Package и говорит, что com.sun.crypto.provider не существует в этом плагине.

Я создал образец пакета, который просто создает экземпляр рассматриваемого класса в связке активатора. Манифест этого пакета:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Cryptotest
Bundle-SymbolicName: cryptotest
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: cryptotest.Activator
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Import-Package: com.sun.crypto.provider,
 org.osgi.framework;version="1.3.0"

Подсказка 2: PDE отмечает экземпляр с ограничением доступа.

Несмотря на две ошибки, проект компилируется, и я могу начать отладку. При запуске примера пакета я получаю класс не найдено исключение. Тем не менее, когда я делаю «пакеты 0» в консоли, он появляется Equinox требует экспортировать этот пакет:

com.sun.crypto.provider;
version="0.0.0"<org.eclipse.osgi_3.7.1.R37x_v20110808-1106 [0]>
 cryptotest_1.0.0.qualifier [2] imports

Теперь я нашел уродливую работу, которая, кажется, работает в моем минимальном примере. Он заключается в том, чтобы обернуть jar-провайдер Java jce в отдельный плагин и включить его в мое приложение, но это просто неправильно.

Может ли кто-нибудь рассказать о том, что происходит? Является что-то очевидное мне не хватает?

1 Ответ

3 голосов
/ 23 февраля 2012

Это похоже на пакет, который присутствует в вашей JVM, но только при работе на Sun.По умолчанию они не предоставляются системным комплектом, поскольку OSGi не создана исключительно для виртуальных машин Sun.

Однако вы можете указать платформе предоставить этот пакет.Для этого вы устанавливаете свойство org.osgi.framework.system.packages.extra в список пакетов, который включает ваш пакет com.sun.crypto.provider.Есть несколько способов сделать это, но вы можете, например, запустить Equinox с системным свойством,

-Dorg.osgi.framework.system.packages.extra=com.sun.crypto.provider

Кстати, это не относится к Equinox, а является стандартной OSGi-конструкцией.*

...