发送请求之前的GWT RPC客户端序列

时间:2010-11-04 13:21:15

标签: gwt request rpc

我之前提出过一个问题,寻找在RPC调用上构建内容的类(here)。

现在,我没有找到在ClientSerializationStreamWriter(here)类中调用以下方法的方法调用序列:

@Override
public String toString() {
    StringBuffer buffer = new StringBuffer();
    writeHeader(buffer);
    writeStringTable(buffer);
    writePayload(buffer);
    return buffer.toString();
}

我注意到ClientSerializationStreamWriter在RemoteServiceProxy中使用,并且该类在RpcServiceProxy上进行了扩展。我想要找到的是在发送之前构建请求的确切位置。   来自RemoteServiceProxy的方法doInvoke似乎负责调度请求本身,但是如何构建String requestData?

com.google.gwt.user.client.rpc.impl.RemoteServiceProxy.doInvoke

我想了解RPC请求在离开客户端Web浏览器之前所执行的常规路径。到目前为止,我不确定每个RPC都使用RpcServiceProxy。

我有很多假设,没有断言。

感谢。

JuDaC

2 个答案:

答案 0 :(得分:1)

查找有关调用堆栈的更多信息的最佳方法可能是使用Java调试器(在开发模式下可能 - 甚至是客户端代码!)

关于您的其他问题:

  

到目前为止,我不确定每个RPC都使用RpcServiceProxy。

/com/google/gwt/rpc/RPC.gwt.xml(gwt-user.jar)指定RemoteService的延迟绑定:

<generate-with class="com.google.gwt.rpc.rebind.RpcServiceGenerator">
  ...
  <when-type-assignable class="com.google.gwt.user.client.rpc.RemoteService" />
  ...
</generate-with>

RpcServiceGenerator:

protected ProxyCreator createProxyCreator(JClassType remoteService) {
  return new RpcProxyCreator(remoteService);
}

RpcProxyCreator:

protected Class<? extends RemoteServiceProxy> getProxySupertype() {
  return RpcServiceProxy.class;
}

答案 1 :(得分:1)

我找到了问题的答案。在Class ProxyCreator行中:479。

String payloadName = nameFactory.createName("payload");
w.println("String " + payloadName + " = " + streamWriterName
    + ".toString();");

在创建我的服务期间

private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class);

GWT编译器动态生成RPC代理,此时GWT编译器注入代理方法(ProxyCreator.generateProxyMethod)。

com.google.gwt.user.rebind.rpc.ProxyCreator.generateProxyMethod

HTH