2013-02-12 70 views
0

美好的一天。在本應用中,我一直在使用restlet 2.1.1,並與objectify-appengine結合使用。自從升級到物化階段(3.1至4.0b)以來,我就遇到了問題,即堅持任何包含非空的GeoPt對象的實體,它之前曾經工作過。使用 版本: * AppEngine上的Java-1.7.4 *的Restlet-2.1.1 *物化-的AppEngine-4.0BRestlet無效的類型簽名com.google.appengine.api.datastore.GeoPt

啓動託管模式後,我得到的錯誤看起來它可能是一個暗示:

Invoking generator org.restlet.rebind.ClientProxyGenerator 
... 
private com.google.appengine.api.datastore.GeoPt geoPt 
com.google.appengine.api.datastore.GeoPt 
Verifying instantiability 
Analyzing the fields of type 'com.google.appengine.api.datastore.GeoPt' that qualify for serialization 
Field 'private final float latitude' will not be serialized because it is final 
Field 'private final float longitude' will not be serialized because it is final 

只要他們GeoPt變量爲空我能堅持的任何實體,只要我堅持一個數據對象的非空GeoPt我得到的AppEngine控制檯上報告了以下錯誤:

12 Feb 2013 7:51:35 AM org.restlet.service.ConverterService toObject 
WARNING: Unable to convert a [application/x-java-serialized-object+gwt,UTF-8] representation into an object of class 
java.io.IOException: Couldn't read the GWT object representation: Invalid type signature for com.google.appengine.api.datastore.GeoPt 
at org.restlet.ext.gwt.ObjectRepresentation.getObject(ObjectRepresentation.java:126) 
at org.restlet.ext.gwt.GwtConverter.toObject(GwtConverter.java:149) 
at org.restlet.service.ConverterService.toObject(ConverterService.java:167) 
at org.restlet.resource.Resource.toObject(Resource.java:784) 
at org.restlet.resource.ServerResource.doHandle(ServerResource.java:481) 
at org.restlet.resource.ServerResource.doHandle(ServerResource.java:545) 
at org.restlet.resource.ServerResource.put(ServerResource.java:1234) 
at org.restlet.resource.ServerResource.doHandle(ServerResource.java:425) 
at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:646) 
at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:341) 
at org.restlet.resource.ServerResource.handle(ServerResource.java:942) 
at org.restlet.resource.Finder.handle(Finder.java:246) 
at org.restlet.routing.Filter.doHandle(Filter.java:159) 
at org.restlet.routing.Filter.handle(Filter.java:206) 
at org.restlet.routing.Router.doHandle(Router.java:431) 
at org.restlet.routing.Router.handle(Router.java:648) 
at org.restlet.routing.Filter.doHandle(Filter.java:159) 
at org.restlet.routing.Filter.handle(Filter.java:206) 
at org.restlet.routing.Filter.doHandle(Filter.java:159) 
at org.restlet.routing.Filter.handle(Filter.java:206) 
at org.restlet.routing.Filter.doHandle(Filter.java:159) 
at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:154) 
at org.restlet.routing.Filter.handle(Filter.java:206) 
at org.restlet.routing.Filter.doHandle(Filter.java:159) 
at org.restlet.routing.Filter.handle(Filter.java:206) 
at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211) 
at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:84) 
at org.restlet.Application.handle(Application.java:377) 
at org.restlet.routing.Filter.doHandle(Filter.java:159) 
at org.restlet.routing.Filter.handle(Filter.java:206) 
at org.restlet.routing.Router.doHandle(Router.java:431) 
at org.restlet.routing.Router.handle(Router.java:648) 
at org.restlet.routing.Filter.doHandle(Filter.java:159) 
at org.restlet.routing.Filter.handle(Filter.java:206) 
at org.restlet.routing.Router.doHandle(Router.java:431) 
at org.restlet.routing.Router.handle(Router.java:648) 
at org.restlet.routing.Filter.doHandle(Filter.java:159) 
at org.restlet.routing.Filter.handle(Filter.java:206) 
at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211) 
at org.restlet.Component.handle(Component.java:392) 
at org.restlet.Server.handle(Server.java:516) 
at org.restlet.engine.ServerHelper.handle(ServerHelper.java:72) 
at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:152) 
at org.restlet.ext.servlet.ServerServlet.service(ServerServlet.java:1089) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
at com.googlecode.objectify.cache.AsyncCacheFilter.doFilter(AsyncCacheFilter.java:59) 
at com.googlecode.objectify.ObjectifyFilter.doFilter(ObjectifyFilter.java:49) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:61) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at com.google.appengine.tools.development.BackendServersFilter.doFilter(BackendServersFilter.java:97) 
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:94) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:383) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:326) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:938) 
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:755) 
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
Caused by: com.google.gwt.user.client.rpc.SerializationException: Invalid type signature for com.google.appengine.api.datastore.GeoPt 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.validateTypeVersions(ServerSerializationStreamReader.java:1116) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserialize(ServerSerializationStreamReader.java:610) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.readObject(ServerSerializationStreamReader.java:567) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader$ValueReader$8.readValue(ServerSerializationStreamReader.java:140) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserializeValue(ServerSerializationStreamReader.java:425) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserializeClass(ServerSerializationStreamReader.java:807) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserializeImpl(ServerSerializationStreamReader.java:878) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserialize(ServerSerializationStreamReader.java:662) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserialize(ServerSerializationStreamReader.java:587) 
at com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamReader.readObject(AbstractSerializationStreamReader.java:119) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader$ValueReader$8.readValue(ServerSerializationStreamReader.java:134) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserializeValue(ServerSerializationStreamReader.java:414) 
at org.restlet.ext.gwt.ObjectRepresentation.getObject(ObjectRepresentation.java:122) 
... 80 more 

注意:在有人建議我使用DTO或Restlet或Objectify之外的其他框架之前,我特意選擇了此組合用於Restful服務,以便可以在客戶端重新使用數據對象而無需繁瑣的DTO和轉換。

感謝 皮埃爾

回答

0
+0

感謝托馬斯,因爲我還使用的Restlet它看起來像一個可能的問題有,但很可惜我以爲你在正確的;我希望這是我可以解決的問題,而不必回覆到3.1,因爲它被標記爲已過時:-(我將回復並跟蹤該特定問題 – PalinDrone 2013-02-14 21:47:37