2010-11-04 71 views
1

我已經提出了一個前面的問題,尋找在RPC調用上構建內容的類(here)。在發送請求之前GWT RPC客戶端序列

現在,我沒有找到方法的順序調用下列方法中類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

回答

1

也許找出更多關於調用堆棧的最好方法是使用Java調試器(即在開發模式是可能的 - 即使是客戶端代碼)

關於您的其他問題:

到目前爲止我不確定每個RPC使用RpcServiceProxy。

/com/google/gwt/rpc/RPC.gwt.xml(GWT-user.jar)指定推遲您的RemoteService S結合:

<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

我發現這可能是我q的答案題目了。在類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