2014-02-18 5 views
1

Для публикации с SSL с помощью Endpoint мне нужно получить доступ к классам в соответствии с пакетами com.sun.net.httpserver.*Использование ограниченного класса в OSGi Bundle

Использование IDE Eclipse, я нашел способ использовать эти классы. Но экспорт связки и запуская их в другом равноденствия OSGi установки я не могу запустить пакет метание следующую ошибку:

java.lang.NoClassDefFoundError: com/sun/net/httpserver/HttpsConfigurator 

кто-нибудь идея, как решить эту проблему?

Спасибо!

+0

У вас должен быть com.sun.net.httpserver как импортированный пакет в вашем комплекте, а внутри контейнера у вас должен быть пакет, который экспортирует этот пакет. –

+0

Решение Marcel ниже действительно является решением вашего вопроса, но ИМХО это не путь (и маловероятно, что это действительно необходимо). Пакеты com.sun. * Должны быть частными и должны рассматриваться как таковые. Вероятно, есть более стандартное решение вашей проблемы. Если вы решите проблему, вы можете получить еще лучшее решение. –

ответ

6

Пакет, который вы имеете в виду, является частью JDK. Вам необходимо разоблачить его, чтобы сделать его доступным в OSGi, и у вас есть два варианта:

Первый, а в большинстве случаев предпочтительный вариант - выставить этот пакет через системный пакет. Каркас OSGi имеет свойство, которое вы можете установить, чтобы сделать это:

org.osgi.framework.system.packages.extra=... 

Как его значение, вы предоставляете его с разделителями-запятыми список пакетов, которые вы хотите выставить, поверх тех, которые уже подвергаются в рамках. В вашем случае, по крайней мере, com.sun.net.httpserver, но может быть больше пакетов, которые вам нужны. В этом случае также убедитесь, что пакет, который использует этот пакет, импортирует этот пакет.

Второй вариант заключается в использовании механизма, используемого для делегирования загрузки. Его следует использовать только в качестве крайней меры, поскольку он нарушает модульность, и если он не используется тщательно, это может привести к другим проблемам. Опять же, это свойство, которое вам нужно установить:

org.osgi.framework.bootdelegation=* 

Здесь вы можете указать разделенный запятыми список пакетов, которые должны быть загружены с помощью загрузчика загрузчика классов. Подстановочные знаки поддерживаются (как показано в примере выше), но вам рекомендуется быть как можно более конкретным, поэтому в вашем случае, например, используйте значение com.sun. * В качестве значения.

+0

Thanls Marcel, это прекрасно работает! – mpsat

+0

У меня такая же проблема при KURA, которая работает над Eclipse Equinox, как я могу установить свойство для системного пакета? – sabrina2020

Смежные вопросы