java - 尝试将 GWT 集成到 OSGi 包中

标签 java gwt osgi gwt-rpc equinox

我正在尝试将 GWT 与 OSGi (Equinox) 集成,为我的模块化系统的其余部分提供基于 Web 的 UI。到目前为止,我已经成功地将 GWT servlet 嵌入到 OSGi 模块中。

我使用的是Eclipse GWT插件生成的GWT示例代码项目,它由3个包组成:客户端、服务器和共享。服务器包(ui.server.GreetingServiceImpl)中的类实现了客户端包(ui.client.GreetingService)中的接口(interface),并且它们都在同一个包中捆绑。

当我尝试从客户端网页进行远程过程调用时,出现错误:

IncompleteRemoteServiceException:无法在默认类加载器中找到请求的接口(interface)“ui.client.GreetingService”

我发现类加载器未找到该类,但我不知道如何解决此问题。我可以通过请求或导入其他包中的类来访问它们,但不能访问与实现类位于同一包中的接口(interface)。有人能指出我正确的方向吗?我已经用谷歌搜索了好几个小时了。

最佳答案

需要在 GreetingServiceImpl 上重写 HttpServlet 中的“service”方法:

@Override 
protected void service(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException { 
    // Cache the current thread 
    Thread currentThread = Thread.currentThread(); 
    // We are going to swap the class loader 
    ClassLoader oldContextClassLoader = 
    currentThread.getContextClassLoader(); 
    currentThread.setContextClassLoader(this.getClass().getClassLoader()); 
    super.service(req, resp); 
    currentThread.setContextClassLoader(oldContextClassLoader); 
} 

因此,应用程序在 Equinox 上运行!!

关于java - 尝试将 GWT 集成到 OSGi 包中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6010713/

相关文章:

java - GWT 是如何工作的,或者更确切地说,GWT 如何将代码加载到 app.html 文件中?

java - Glassfish 3.1.2.2 和重用 Bundle ID

java - 当使用多个目标运行 ./pants idea 时,为什么 IntelliJ 不尊重我的依赖关系?

javax.mail.MessagingException : Could not connect to SMTP host

Java Stream 分组和计数出现次数

java - GWT 日期框格式

java - 在类路径中找不到 GWTTestCase

java - Netty Nio 中 promise 的异步更新

java - 服务注册为类型,并实现接口(interface),但不能用作类型

java - 如何在 Equinox OSGI 服务器中定义默认欢迎页面?