GWT RPC клиентская последовательность перед отправкой запроса - PullRequest
1 голос
/ 04 ноября 2010

Я задал предыдущий вопрос, ища класс, который создает контент по вызову RPC ( здесь ).

Теперь я не нахожу последовательность вызовов методов, которая приводит к вызову следующего метода в классе ClientSerializationStreamWriter ( здесь ):

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

Я заметил, что ClientSerializationStreamWriter используется в RemoteServiceProxy и этот класс расширен на RpcServiceProxy. То, что я пытаюсь найти, это как раз та точка, где запрос строится перед отправкой. Кажется, что метод doInvoke из RemoteServiceProxy отвечает за отправку самого запроса, но как строится String requestData?

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

Я хочу понять, как обычно выполняется RPC-запрос, прежде чем он покидает клиентский веб-браузер. Пока я не уверен, что каждый RPC использует RpcServiceProxy.

У меня много предположений и нет утверждений.

Спасибо.

JuDaC

Ответы [ 2 ]

1 голос
/ 04 ноября 2010

Я нашел, вероятно, ответ на свой вопрос.В строке 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

1 голос
/ 04 ноября 2010

Возможно, лучший способ узнать больше о стеке вызовов - использовать отладчик 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;
}
...