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' был вставлен в код клиента. На самом деле есть два проекта: ххх-клиент и ххх-сервер. Все содержимое сервера находится в одном, а клиент - в другом. Каким-то образом этот серверный пакет оказался в коде клиента.

Тьфу... как глупо

Другие вопросы по тегам