首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于按名称加载Jetty类的Felix - ClassNotFoundException中的ClassNotFoundException Bundle

用于按名称加载Jetty类的Felix - ClassNotFoundException中的ClassNotFoundException Bundle
EN

Stack Overflow用户
提问于 2015-03-17 12:57:40
回答 1查看 497关注 0票数 1

pom.xml:

代码语言:javascript
复制
<Import-Package>
         org.eclipse.jetty.websocket.server,*
</Import-Package>

MANIFEST.MF:

代码语言:javascript
复制
Import-Package: org.eclipse.jetty.websocket.server;version="[9.2,10)"

日志中的异常:

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

Felix Web控制台:

从org.eclipse.jetty.websocket.server、version=9.2.6从org.apache.felix.http.jetty导入包(39)

org.eclipse.jetty.websocket.servlet.WebSocketServletFactory:中的相关代码

代码语言:javascript
复制
Class<WebSocketServletFactory> wssf = (Class<WebSocketServletFactory>)loader
                    .loadClass("org.eclipse.jetty.websocket.server.WebSocketServerFactory");

请帮我找出我在这里做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-30 09:53:33

我遇到了同样的问题,并在Felix邮件列表上询问。正如Balazs所指出的,这与“装载机”部分有关。http://www.mail-archive.com/users%40felix.apache.org/msg16222.html上的线程包含一个ContextClassLoader使用示例的URL。

感谢保罗,基本上你需要这样的东西:

代码语言:javascript
复制
// 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);

有关更完整的代码,请参见示例。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29099699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档