2012-03-24 7 views
1

GWT in Aktion, 2ed (MEAP), S.218 besagt, dass wir serverseitige Klassen in Annotationen wie @ProxyFor im Clientcode verweisen können. Das ist logisch und was ich erwarten würde ... aber ich bin immer Ausnahmen von den GWT-Compiler:GWT RequestFactory: Verwenden von Serverklassen im Clientpaket

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 

I Referenz keine serverseitigen Klassen außer in den Anmerkungen:

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); 
    } 

} 

Antwort

3

Ich bin vor einiger Zeit auf dasselbe Problem gestoßen. Es ist nichts falsch mit Ihrem Code. Standardmäßig enthält der GWT-Compiler keine Klassen, die auf Anmerkungen zur Kompilierung verweisen, was verrückt ist. Der Grund dafür, dass Sie AnnotatedRfqService cannot be resolved to a type sehen, liegt daran, dass diese Klassen überhaupt nicht kompiliert werden. Die Lösung besteht darin, den Java-Compiler (vermutlich über Ant) auszuführen, um alles zu kompilieren, bevor Sie versuchen, das GWT-Modul zu kompilieren.

fragte ich (und beantwortet) die gleiche Frage hier: https://stackoverflow.com/a/8766677/291180

Aus irgendeinem Grund GWT ignoriert die import Erklärung für die Art, aber sie sind nicht der Ansicht ein Fehler diese. Lächerlich. http://code.google.com/p/google-web-toolkit/issues/detail?id=5378