我正在尝试将GWT与OSGi(Equinox)集成,以便为我的模块化系统的其余部分提供基于Web的UI。到目前为止,我已经设法将GWT servlet嵌入到OSGi模块中。
我正在使用Eclipse GWT插件生成的GWT示例代码项目,该插件由3个包组成:客户端,服务器和共享。服务器包中的类(ui.server.GreetingServiceImpl
)实现客户端包(ui.client.GreetingService
)中的接口,并且它们都在同一个包中。
当我尝试从客户端网页进行远程过程调用时,我收到错误:
IncompatibleRemoteServiceException: Could not locate requested interface 'ui.client.GreetingService' in default classloader
我认为类加载器找不到类,但我不知道如何解决这个问题。我可以通过要求或导入类来访问其他包中的类,但不能访问与实现类在同一个包中的接口。有人能指出我正确的方向吗?我一直在谷歌搜索几个小时。
答案 0 :(得分:2)
需要在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上运行!!
答案 1 :(得分:0)
IncompatibleRemoteServiceException意味着来自GUI的RPC调用未找到@RemoteService批注指定的接口。
您可以使用源代码发布项目吗?
BTW你也可以看看这个项目: http://code.google.com/p/gwt-in-osgi/