2015-03-17 2 views
1

pom.xml:OSGi Bundle в Felix - ClassNotFoundException для класса Jetty загружается имя

<Import-Package> 
     org.eclipse.jetty.websocket.server,* 
</Import-Package> 

MANIFEST.MF:

Import-Package: org.eclipse.jetty.websocket.server;version="[9.2,10)" 

Исключение в журналах:

javax.servlet .ServletException: java.lang.ClassNotFoundException: org.eclipse.jetty.websocket.server.WebSocketServerFactory

Felix Web Console:

Импортируемые пакеты org.eclipse.jetty.websocket.server, версия = 9.2.6 от org.apache.felix.http.jetty (39)

Соответствующий код в org.eclipse.jetty.websocket.servlet.WebSocketServletFactory:

Class<WebSocketServletFactory> wssf = (Class<WebSocketServletFactory>)loader 
        .loadClass("org.eclipse.jetty.websocket.server.WebSocketServerFactory"); 

Пожалуйста, помогите мне понять, что я делаю неправильно здесь?

+1

Вопрос в том, откуда вы получаете «загрузчик». –

ответ

2

Я столкнулся с той же проблемой и спросил в списке рассылки Феликса. Как отметил Балаз, это связано с частью «погрузчика». В потоке http://www.mail-archive.com/users%40felix.apache.org/msg16222.html содержится URL-адрес некоторых примеров, в которых используется ContextClassLoader.

С благодарностью Павла, в основном вам нужно что-то вроде этого:

// Cache the current classloader 
ClassLoader ccl = Thread.currentThread().getContextClassLoader(); 
// Find the classloader used by the bundle providing jetty 
ClassLoader classLoader = jettyBundle.getClassLoader(); 
// Set the classloader 
Thread.currentThread().setContextClassLoader(classLoader); 

// Register the servlet 
httpService.registerServlet("/servletName", new MyWebSocketServlet(), null, null);   

// Restore the classloader 
Thread.currentThread().setContextClassLoader(ccl); 

Смотрите примеры для более полного кода.

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