2012-01-18 2 views
0

Я могу запустить пример C2DM, используя сгенерированный пример кода. Однако, когда я пытаюсь реализовать собственный RPC с помощью мастера Eclipse, это была ошибка:Android App Engine C2DM RPC Ошибка: Нет RequestContext для работы

17 января 2012 11:19:13 PM com.google.web.bindery.requestfactory.server.ServiceLayerDecorator умереть СЕРЬЕЗНОГО : Нет RequestContext для работы MG19Dafmkcg_3 $ 9lmRyrb_HKoK8 = янв 17, 2012 11:19:13 PM com.google.web.bindery.requestfactory.server.RequestFactoryServlet doPost СИЛЬНЫЙ: Непредвиденная ошибка com.google.web.bindery.requestfactory. server.UnexpectedException: Нет RequestContext для операции MG19Dafmkcg_3 $ 9lmRyrb_HKoK8 = на com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.die (ServiceLayerDecorator.java:216) на com.google.web.bindery.requestfactory.server. ResolverServiceLayer.resol veRequestContext (ResolverServiceLayer.java:154) на com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestContext (ServiceLayerDecorator.java:162) в com.google.web.bindery.requestfactory.server.FindServiceLayer.resolveRequestContext (FindServiceLayer.java:54) на com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestContext (ServiceLayerDecorator.java:162) на com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestContext (ServiceLayerDecorator. Java: 162) на sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) в sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) в sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) в java.la ng.reflect.Method.invoke (Неизвестный источник) на com.google.appengine.tools.development.agent.runtime.Runtime.invoke (Runtime.java:104) на com.google.web.bindery.requestfactory.server .ServiceLayerCache.getOrCache (ServiceLayerCache.java:233) на com.google.web.bindery.requestfactory.server.ServiceLayerCache.resolveRequestContext (ServiceLayerCache.java:187) на com.google.web.bindery.requestfactory.server.ResolverServiceLayer .resolveRequestContextMethod (ResolverServiceLayer.java:161) на com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestContextMethod (ServiceLayerDecorator.java:167) в com.google.web.bindery.requestfactory.server.FindServiceLayer.resolveRequestContextMethod (FindServiceLayer.java:70) по адресу com.google.web.bindery.requestfactory. server.ServiceLayerDecorator.resolveRequestContextMethod (ServiceLayerDecorator.java:167) на com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestContextMethod (ServiceLayerDecorator.java:167) на sun.reflect.NativeMethodAccessorImpl.invoke0 (нативный метод) at sun.reflect.NativeMethodAccessorImpl.invoke (Неизвестный источник) at sun.reflect.DelegatingMethodAccessorImpl.invoke (Неизвестный источник) at java.lang.reflect.Method.invoke (Неизвестный источник) at com.google.appengine.tools. development.agent.runtime.Runtime.invoke (Runtime.java:104) на com.google.web.bindery.requestfactory.server.ServiceLayerCache.getOrCache (ServiceLayerCache.java:233) на com.google.web.bindery. requestfactory.server.ServiceLayerCache.resolveReques tContextMethod (ServiceLayerCache.java:193) на com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.processInvocationMessages (SimpleRequestProcessor.java:434) на com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.process (SimpleRequestProcessor.java:225) at com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.process (SimpleRequestProcessor.java:127) at com.google.web.bindery.requestfactory.server.RequestFactoryServlet.doPost (RequestFactoryServlet. java: 133) at javax.servlet.http.HttpServlet.service (HttpServlet.java:637) 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.google.appengine.tools.development.HeaderVerificationFilter.doFilter (HeaderVerificationFilter.java:35) at org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) в com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter (ServeBlobFilter.java:60) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) на ком. google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter (TransactionCleanupFilter.java:43) at org.mortbay.jetty.serv let.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) at com.google.appengine.tools.development.StaticFileFilter.doFilter (StaticFileFilter.java:122) 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 (ContextHa ndler.java:765) на org.mortbay.jetty.webapp.WebAppContext.handle (WebAppContext.java:418) на com.google.appengine.tools.development.DevAppEngineWebAppContext.handle (DevAppEngineWebAppContext.java:78) на org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152) at com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle (JettyContainerService.java:362) 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.H ttpParser.parseNext (HttpParser.java:755) на org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:218) в org.mortbay.jetty.HttpConnection.handle (HttpConnection.java:404) в орг. mortbay.io.nio.SelectChannelEndPoint.run (SelectChannelEndPoint.java:409) в org.mortbay.thread.QueuedThreadPool $ PoolThread.run (QueuedThreadPool.java:582)

Моя сущность является:

package com.serene.receiptninja.server; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 

@Entity 
public class SyncEvent { 

@Id 
@Column(name = "id") 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long id; 

private String message; 

public void setMessage(String message) { 
    this.message = message; 
} 

public String getMessage() { 
    return message+" Sent from my app engine."; 
} 

public Long getId() { 
    return id; 
} 

}

Запрос:

package com.serene.receiptninja.shared; 

import java.util.List; 

import com.google.web.bindery.requestfactory.shared.Request; 
import com.google.web.bindery.requestfactory.shared.RequestContext; 
import com.google.web.bindery.requestfactory.shared.ServiceName; 

@ServiceName(value = "com.serene.receiptninja.server.SyncEventService", locator = "com.serene.receiptninja.server.SyncEventServiceLocator") 
public interface SyncEventRequest extends RequestContext { 

Request<SyncEventProxy> createSyncEvent(); 

Request<SyncEventProxy> readSyncEvent(Long id); 

Request<SyncEventProxy> updateSyncEvent(SyncEventProxy syncevent); 

Request<Void> deleteSyncEvent(SyncEventProxy syncevent); 

Request<List<SyncEventProxy>> querySyncEvents(); 

}

Proxy:

пакет com.serene.receiptninja.общий;

import com.google.web.bindery.requestfactory.shared.ProxyForName; 
import com.google.web.bindery.requestfactory.shared.ValueProxy; 

@ProxyForName(value = "com.serene.receiptninja.server.SyncEvent", locator =   "com.serene.receiptninja.server.SyncEventLocator") 
    public interface SyncEventProxy extends ValueProxy { 

void setMessage(String message); 

String getMessage(); 

Long getId(); 

}

RequestFactory:

import com.google.web.bindery.requestfactory.shared.InstanceRequest; 
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.ServiceName; 

import com.serene.receiptninja.shared.MessageProxy; 
import com.serene.receiptninja.shared.RegistrationInfoProxy; 
import com.serene.receiptninja.shared.SyncEventRequest; 

public interface MyRequestFactory extends RequestFactory { 

@ServiceName("com.serene.receiptninja.server.HelloWorldService") 
public interface HelloWorldRequest extends RequestContext { 
    /** 
    * Retrieve a "Hello, World" message from the server. 
    */ 
    Request<String> getMessage(); 
} 

@ServiceName("com.serene.receiptninja.server.RegistrationInfo") 
public interface RegistrationInfoRequest extends RequestContext { 
    /** 
    * Register a device for C2DM messages. 
    */ 
    InstanceRequest<RegistrationInfoProxy, Void> register(); 

    /** 
    * Unregister a device for C2DM messages. 
    */ 
    InstanceRequest<RegistrationInfoProxy, Void> unregister(); 
} 

@ServiceName("com.serene.receiptninja.server.Message") 
public interface MessageRequest extends RequestContext { 
    /** 
    * Send a message to a device using C2DM. 
    */ 
    InstanceRequest<MessageProxy, String> send(); 
} 

HelloWorldRequest helloWorldRequest(); 

RegistrationInfoRequest registrationInfoRequest(); 

MessageRequest messageRequest(); 

SyncEventRequest syncEventRequest(); 

}

Android код:

final SyncEventRequest request = requestFactory.syncEventRequest(); 
request.createSyncEvent().fire(new Receiver <SyncEventProxy>(){ 

     @Override 
     public void onSuccess(SyncEventProxy arg0) { 
     // TODO Auto-generated method stub 
     message = arg0.getMessage(); 
     } 
}); 

ответ

0

Я просто наткнулся на этот вопрос сам. Моя проблема заключалась в том, что веб-приложение не запускалось, поскольку возникла проблема с сборкой. Попробуйте обеспечить сборку и запуск веб-приложений, затем дайте ей еще один код: