Android App Engine C2DM RPC Ошибка: нет RequestContext для работы - PullRequest
0 голосов
/ 18 января 2012

Я могу запустить пример C2DM, используя сгенерированный пример кода.Тем не менее, когда я пытался реализовать свой собственный RPC с помощью мастера eclipse, он имел ошибку:

17 января 2012 г. 11:19:13 com.google.web.bindery.requestfactory.server.ServiceLayerDecorator dieSEVERE: нет RequestContext для операции MG19Dafmkcg_3 $ 9lmRyrb_HKoK8 = 17 января 2012 г. 23:19:13 com.google.web.bindery.requestfactory.server.RequestFactoryServlet doPost SEVERE: непредвиденная ошибка com.google.were.factory.Неожиданное исключение: нет RequestContext для операции MG19Dafmkcg_3 $ 9lmRyrb_HKoK8 = at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.die (ServiceLayerDecorator.java:2est.Rever.web.web)ResolverServiceLayer.java:154) по адресу com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestContext (ServiceLayerDecorator.java:162) по адресу com.google.web.bindery.requestfactory.serverLayerererServiceServeService54) на com.google.web.bindery.) в sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (неизвестный источник) в java.lang.reflect.Method.invoke (неизвестный источник) в com.google.appengine.tools.velopagent.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.quer.weer.coser.web.xtMethod (ServiceLayerDecorator.java:167) по адресу com.google.web.bindery.requestfactory.server.FindServiceLayer.resolveRequestContextMethod (FindServiceLayer.java:70) по адресу com.google.web.best.reerDerviceJava: 167) в com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestContextMethod (ServiceLayerDecorator.java:167) в sun.reflect.NativeMethodAccessorImpl.inmpl.invoke.NeO) на sun.reflect.DelegatingMethodAccessorImpl.invoke (неизвестный источник) на java.lang.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.resolveRequestContextMethoache.j) (com)..google.web.bindery.requestfactory.server.SimpleRequestProcessor.process (SimpleRequestProcessor.java:127) по адресу com.google.web.bindery.requestfactory.server.RequestFactoryServlet.doPost (RequestFactoryServlet.java:133) по адресу javax.servlet.http.tvservice (htpv.htp)637) в javax.servlet.http.HttpServlet.service (HttpServlet.java:717) в org.mortbay.jetty.servlet.ServletHolder.handle (ServletHolder.java:511) в org.mortbay.jetty.lethaChler..doFilter (ServletHandler.java:1166)на com.google.appengine.tools.development.HeaderVerificationFilter.doFilter (HeaderVerificationFilter.java:35) в 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) на com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter (TransactionCleanupFilter.java:43) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) на com.google.appengine.tools.development.StaticFileFilter.doFilter (StaticFileFilter.java:122) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) на com.google.appengine.tools.development.BackendServersFilter.doFilter (BackendServersFilter.java:97) в org.mortbay.jetty.servlet.ServletHandler $ CachedChain.doFilter (ServletHandler.java:1157) на org.mortbay.jetty.servlet.ServletHandler.handle (ServletHandler.java:388) в org.mortbay.jetty.security.SecurityHandler.handle (SecurityHandler.java:216) в org.mortbay.jetty.servlet.SessionHandler.handle (SessionHandler.java:182) на org.mortbay.jetty.handler.ContextHandler.handle (ContextHandler.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) на com.google.appengine.tools.development.JettyContainerService $ ApiProxyHandler.handle (JettyContainerService.java:362) на org.mortbay.jetty.handler.HandlerWrapper.handle (HandlerWrapper.java:152) на org.mortbay.jetty.Server.handle (Server.java:326) на org.mortbay.jetty.HttpConnection.handleRequest (HttpConnection.java:542) в org.mortbay.jetty.HttpConnection $ RequestHandler.content (HttpConnection.java:938) в org.mortbay.jetty.HttpParser.parseNext (HttpParser.java:755) в org.mortbay.jetty.HttpParser.parseAvailable (HttpParser.java:218) на org.mortbay.jetty.HttpConnection.handle (HttpConnection.java:404) на org.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();

}

Прокси-сервер:

пакет com.serene.receiptninja.shared;

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

1 Ответ

0 голосов
/ 15 февраля 2012

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

...