2009-06-23 70 views
1

我正在尝试使用GWT和GAE/J(Google AppEngine with Java)编写应用程序。对于我的应用程序,我需要使用DTO。为了将Pojo转换为JDO实体,我想使用Dozer library。所以,当我试图转换对象我收到以下错误: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 

我得到的错误时,我只是想实例化服务器内的映射对象:

Mapper mapper = new DozerBeanMapper(); 

如何我解决这个问题吗?

回答

1

确保罐子在您的类路径和web-inf/lib文件夹中

+0

哇,这解决了我的问题,你是我的英雄!谢谢 – Maksim 2009-06-24 17:18:50

2

我对GAE/J不熟悉,但错误(NoClassDefFoundError)肯定会告诉您类加载器找不到推进器类。你确定它在类路径中吗? 如果您尝试运行在同一行会发生什么:

Mapper mapper = new DozerBeanMapper();

您的容器外,只是从纯命令行,static main方法?

+0

它在静态主程序中正常工作。我有一个问题,说我忘了包含.properties文件。我在GWT + GAE/J项目中这样做了,但同样的问题。 :( – Maksim 2009-06-23 21:37:19