Android App Engine C2DM RPC 错误:没有用于操作的 RequestContext

发布于 2024-12-27 14:49:18 字数 9987 浏览 4 评论 0原文

我可以使用生成的示例代码运行 C2DM 示例。但是,当我尝试使用 eclipse 向导实现自己的 RPC 时,出现错误:

Jan 17, 2012 11:19:13 PM com.google.web.bindery.requestfactory.server.ServiceLayerDecorator die 严重:没有用于操作 MG19Dafmkcg_3$9lmRyrb_HKoK8= 的 RequestContext 2012 年 1 月 17 日 11:19:13 下午 com.google.web.bindery.requestfactory.server.RequestFactoryServlet doPost 严重:意外错误 com.google.web.bindery.requestfactory.server.UnexpectedException:没有用于操作 MG19Dafmkcg_3$9lmRyrb_HKoK8= 的 RequestContext 在com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.die(ServiceLayerDecorator.java:216) 在 com.google.web.bindery.requestfactory.server.ResolverServiceLayer.resolveRequestContext(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(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(来源未知) 在 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.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(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(来源未知) 在 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.resolveRequestContextMethod(ServiceLayerCache.java:193) 在 com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.processInitationMessages(SimpleRequestProcessor.java:434) 在 com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.process(SimpleRequestProcessor.java:225) 在 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.HttpServlet.service(HttpServlet.java:637) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 在 org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 在 org.mortbay.jetty.servlet.ServletHandler$CachedChain.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();

Android

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

代码

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

I am able to run the C2DM example using the sample code generated. However, when I try to implement my own RPC using the eclipse wizard, it had the error:

Jan 17, 2012 11:19:13 PM com.google.web.bindery.requestfactory.server.ServiceLayerDecorator die
SEVERE: No RequestContext for operation MG19Dafmkcg_3$9lmRyrb_HKoK8=
Jan 17, 2012 11:19:13 PM com.google.web.bindery.requestfactory.server.RequestFactoryServlet doPost
SEVERE: Unexpected error
com.google.web.bindery.requestfactory.server.UnexpectedException: No RequestContext for operation MG19Dafmkcg_3$9lmRyrb_HKoK8=
at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.die(ServiceLayerDecorator.java:216)
at com.google.web.bindery.requestfactory.server.ResolverServiceLayer.resolveRequestContext(ResolverServiceLayer.java:154)
at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestContext(ServiceLayerDecorator.java:162)
at com.google.web.bindery.requestfactory.server.FindServiceLayer.resolveRequestContext(FindServiceLayer.java:54)
at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestContext(ServiceLayerDecorator.java:162)
at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestContext(ServiceLayerDecorator.java:162)
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.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:104)
at com.google.web.bindery.requestfactory.server.ServiceLayerCache.getOrCache(ServiceLayerCache.java:233)
at com.google.web.bindery.requestfactory.server.ServiceLayerCache.resolveRequestContext(ServiceLayerCache.java:187)
at com.google.web.bindery.requestfactory.server.ResolverServiceLayer.resolveRequestContextMethod(ResolverServiceLayer.java:161)
at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestContextMethod(ServiceLayerDecorator.java:167)
at com.google.web.bindery.requestfactory.server.FindServiceLayer.resolveRequestContextMethod(FindServiceLayer.java:70)
at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestContextMethod(ServiceLayerDecorator.java:167)
at com.google.web.bindery.requestfactory.server.ServiceLayerDecorator.resolveRequestContextMethod(ServiceLayerDecorator.java:167)
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.appengine.tools.development.agent.runtime.Runtime.invoke(Runtime.java:104)
at com.google.web.bindery.requestfactory.server.ServiceLayerCache.getOrCache(ServiceLayerCache.java:233)
at com.google.web.bindery.requestfactory.server.ServiceLayerCache.resolveRequestContextMethod(ServiceLayerCache.java:193)
at com.google.web.bindery.requestfactory.server.SimpleRequestProcessor.processInvocationMessages(SimpleRequestProcessor.java:434)
at 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)
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:60)
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: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(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:78)
at 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.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)

My entity is:

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

}

Request:

 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:

package 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 code:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

又怨 2025-01-03 14:49:18

我自己也刚刚遇到过这个问题。我的问题是 Web 应用程序没有运行,因为存在构建问题。尝试确保您的网络应用程序构建并运行,然后再试一次

I have just came across this issue myself. My problem was that the Web Application was not running as there was a build issue. Try ensuring your web app builds and runs then give it another go

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文