2009-06-23 12 views
1

J'essaye d'écrire une application en utilisant GWT et GAE/J (Google App Engine avec Java). Pour mon application, j'ai besoin d'utiliser DTO. Afin de convertir Pojo en entités JDO je veux utiliser Dozer library. Alors, quand je suis en train de convertir objet que je reçois l'erreur suivante:Objet Dozer sur GAE/J

Jun 23, 2009 7:12:30 PM com.google.appengine.tools.development.ApiProxyLocalImpl log 
SEVERE: [1245784350843000] javax.servlet.ServletContext log: Exception while dispatching incoming RPC call 
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract com.athena.client.entities.Person com.athena.client.GreetingService.getPerson(com.athena.client.entities.Person)' threw an unexpected exception: java.lang.NoClassDefFoundError: org/dozer/DozerBeanMapper 
    at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:360) 
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:546) 
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:166) 
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:86) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) 
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
    at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) 
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:306) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) 
    at org.mortbay.jetty.Server.handle(Server.java:313) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:844) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:205) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) 
    at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442) 
Caused by: java.lang.NoClassDefFoundError: org/dozer/DozerBeanMapper 
    at com.athena.server.GreetingServiceImpl.getPerson(GreetingServiceImpl.java:38) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:527) 
    ... 25 more 

Je reçois l'erreur quand je suis juste essayer d'instancier l'objet mappeur à l'intérieur du serveur:

Mapper mapper = new DozerBeanMapper(); 

Comment est-ce que je résous ce problème?

Répondre

1

Assurez-vous que les fichiers jar sont dans votre chemin de classe et dans le dossier web-inf/lib

+0

Wow, ça a réglé mon problème, tu es mon héros! – Maksim

2

Je ne suis pas familier avec GAE/J, mais l'erreur (NoClassDefFoundError) vous indique clairement que le chargeur de classe ne peut pas trouver la classe de bulldozer. Êtes-vous sûr que c'est sur le classpath? Qu'arrive-t- si vous essayez d'exécuter la même ligne:

Mapper mapper = new DozerBeanMapper();

extérieur de votre réservoir, juste de la ligne de commande simple, la méthode static main?

+0

Cela fonctionne correctement dans le programme principal statique. J'ai eu un problème en disant que j'ai oublié d'inclure le fichier .properties. Je l'ai fait mais même problème dans le projet GWT + GAE/J. :( – Maksim

Questions connexes