GWT RequestFactory: использование серверных классов в клиентском пакете - PullRequest
1 голос
/ 24 марта 2012

GWT в действии, 2ed (MEAP), с.218 говорит о том, что мы можем ссылаться на серверные классы в аннотациях, таких как @ProxyFor в клиентском коде.Это логично, и я ожидаю ... однако я получаю исключения от компилятора gwt:

Validating newly compiled units
[ant:java]       Errors in 'file:/C:/git/mvp_ap_test/src/de/mycompany/client/AppRequestFactory.java'
[ant:java]          Line 9: The import de.mycompany.server.AnnotatedRfqServiceLocator cannot be resolved
[ant:java]          Line 10: The import de.mycompany.server.dao.AnnotatedRfqService cannot be resolved
[ant:java]          Line 15: AnnotatedRfqService cannot be resolved to a type
[ant:java]          Line 15: AnnotatedRfqServiceLocator cannot be resolved to a type
[ant:java]          Line 15: Class<AnnotatedRfqServiceLocator> cannot be resolved to a type
[ant:java]       Errors in 'file:/C:/git/mvp_ap_test/src/de/mycompany/client/proxy/AnnotatedRfqProxy.java'
[ant:java]          Line 9: The import de.mycompany.server.AnnotatedRfqServiceLocator cannot be resolved
[ant:java]          Line 10: The import de.mycompany.server.domain.AnnotatedRfq cannot be resolved
[ant:java]          Line 12: AnnotatedRfq cannot be resolved to a type
[ant:java]          Line 12: AnnotatedRfqServiceLocator cannot be resolved to a type
[ant:java]          Line 12: Class<AnnotatedRfqServiceLocator> cannot be resolved to a type
[ant:java]       Errors in 'file:/C:/git/mvp_ap_test/src/de/mycompany/client/proxy/AnnotationProxy.java'
[ant:java]          Line 6: The import de.mycompany.server.domain.Annotation cannot be resolved
[ant:java]          Line 8: Annotation cannot be resolved to a type
[ant:java]    Removing invalidated units

Я не ссылаюсь ни на какие классы на стороне сервера, кроме аннотаций:

package de.mycompany.client;

import com.google.web.bindery.requestfactory.shared.Request;
import com.google.web.bindery.requestfactory.shared.RequestContext;
import com.google.web.bindery.requestfactory.shared.RequestFactory;
import com.google.web.bindery.requestfactory.shared.Service;

import de.mycompany.client.proxy.AnnotatedRfqProxy;
import de.mycompany.server.AnnotatedRfqServiceLocator;
import de.mycompany.server.dao.AnnotatedRfqService;

public interface AppRequestFactory extends RequestFactory {
    AnnotatedRfqRequest annotatedRfqRequest();

    @Service(value = AnnotatedRfqService.class, locator = AnnotatedRfqServiceLocator.class)
    public interface AnnotatedRfqRequest extends RequestContext {
       Request<AnnotatedRfqProxy> findOne(String id);
    }

}

1 Ответ

3 голосов
/ 24 марта 2012

Я столкнулся с той же проблемой некоторое время назад. В вашем коде нет ничего плохого. По умолчанию компилятор GWT не будет включать в себя классы, на которые ссылаются аннотации для компиляции, что безумие. Итак, причина, по которой вы видите AnnotatedRfqService cannot be resolved to a type, заключается в том, что эти классы вообще не компилируются. Решение состоит в том, чтобы запустить компилятор Java (предположительно через Ant), чтобы скомпилировать все, прежде чем пытаться скомпилировать модуль GWT.

Я задал (и ответил) тот же вопрос здесь: https://stackoverflow.com/a/8766677/291180

По какой-то причине GWT игнорирует оператор import для типа, но они не считают это ошибкой. Смешной. http://code.google.com/p/google-web-toolkit/issues/detail?id=5378

...