GWT: ошибка ClassDefNotFound
Я пытаюсь создать виджет GWT/SmartClient, который принимает набор элементов, которые будут отображаться на панели инструментов... в зависимости от точного типа элемента, он может отображаться в виде сетки, диаграммы, метки и т. Д. Аннотация класс
public abstract class DashboardItem<T> implements IsWidget {
public abstract Widget render(T t);
private T t;
public DashboardItem(T t) {
this.t = t;
}
@Override
public Widget asWidget() {
return render(t);
}
}
В настоящее время я только пытаюсь реализовать элемент, который знает, как отобразить источник данных (превратить его в сетку):
public class DashboardGridItem extends DashboardItem<DataSource> {
public DashboardGridItem(DataSource datasource) {
super(datasource);
}
@Override
public Widget render(DataSource datasource) {
...
}
}
Кажется, все в порядке. Теперь у меня есть класс, который я хочу использовать для извлечения элементов панели мониторинга из некоторого источника... в конце концов, я хочу, чтобы это была база данных, но сейчас это просто жестко закодированный пустой массив. Вот класс:
public class DashboardService {
public List<DashboardItem<?>> getDashboardItems() {
return new ArrayList<DashboardItem<?>>();
}
}
Проблема, с которой я столкнулся, заключается в том, что я всегда получаю ошибку ClassDefNotFound для вышеуказанного класса, несмотря на то, что он находится в том же проекте, что и остальная часть моего кода. Для меня нет ничего очевидного в том, почему это не будет разрешено в клиентском коде... Я пытался избавиться от подстановочных знаков, но я все еще получаю ту же ошибку.
У кого-нибудь есть идеи? У меня есть большой мозг пердеть здесь?
По запросу, трассировка стека:
08/14/2013 21:42:09 Uncaught Exception intercepted
com.google.web.bindery.event.shared.UmbrellaException: Exception caught: com/trackmysports/server/service/impl/DashboardService
at com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:203)
at com.google.web.bindery.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:88)
at com.trackmysports.client.GeneralPage$3$1.onSuccess(GeneralPage.java:343)
at com.trackmysports.client.GeneralPage$3$1.onSuccess(GeneralPage.java:1)
at com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:232)
at com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:258)
at com.google.gwt.http.client.RequestBuilder$1.onReadyStateChange(RequestBuilder.java:412)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338)
at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219)
at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:571)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:279)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91)
at com.google.gwt.core.client.impl.Impl.apply(Impl.java)
at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:242)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103)
at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71)
at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172)
at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
at java.lang.Thread.run(Thread.java:724)
Caused by: java.lang.NoClassDefFoundError: com/trackmysports/server/service/impl/DashboardService
at com.trackmysports.client.ContentPanelFactory.getContentPanel(ContentPanelFactory.java:80)
at com.trackmysports.client.TrackMySports$3.onLogin(TrackMySports.java:91)
at com.trackmysports.client.events.LoginEvent.dispatch(LoginEvent.java:27)
at com.trackmysports.client.events.LoginEvent.dispatch(LoginEvent.java:1)
at com.google.gwt.event.shared.GwtEvent.dispatch(GwtEvent.java:1)
at com.google.web.bindery.event.shared.EventBus.dispatchEvent(EventBus.java:40)
at com.google.web.bindery.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:193)
... 32 more
Caused by: java.lang.ClassNotFoundException: com.trackmysports.server.service.impl.DashboardService
at com.google.gwt.dev.shell.CompilingClassLoader.findClass(CompilingClassLoader.java:1090)
at com.google.gwt.dev.shell.CompilingClassLoader.loadClass(CompilingClassLoader.java:1196)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 39 more
1 ответ
Боже мой... проблема была в том, что каким-то образом пакет с именем 'server' был вставлен в код клиента. На самом деле есть два проекта: ххх-клиент и ххх-сервер. Все содержимое сервера находится в одном, а клиент - в другом. Каким-то образом этот серверный пакет оказался в коде клиента.
Тьфу... как глупо