【发布时间】:2009-12-15 11:39:37
【问题描述】:
excellent article 描述了一种将 GWT RPC 有效负载嵌入到主机页面的方法。缺少一个关键要素是如何在运行时知道 RPC 序列化策略的强名称。
强名称在编译时计算,放入客户端并进行模糊处理。强名称通过 RPC 请求作为described here 发送到服务器。您建议如何在生成主机页面时使用此参数?
【问题讨论】:
标签: gwt
excellent article 描述了一种将 GWT RPC 有效负载嵌入到主机页面的方法。缺少一个关键要素是如何在运行时知道 RPC 序列化策略的强名称。
强名称在编译时计算,放入客户端并进行模糊处理。强名称通过 RPC 请求作为described here 发送到服务器。您建议如何在生成主机页面时使用此参数?
【问题讨论】:
标签: gwt
我已经将 GWT 与带有自定义 SerializationPolicyProvider 的 spring 集成在一起,我总是不得不重命名 <strong name>.gwt.rpc 文件并在我的自定义 SerializationPolicyProvider 类中硬编码名称。我通过查看GWT 文档来解决问题。 Strong Name 是长度为 32 的 MD5 哈希。每次 RPC 调用基于 Spring 的 Controller 的方法:public String processCall(String payload),我使用以下代码解析有效负载以获得强名称:
String strongName = null;
if(payload!=null){
StringTokenizer tokens = new StringTokenizer(payload,String.valueOf(AbstractSerializationStream.RPC_SEPARATOR_CHAR));
while(tokens.hasMoreTokens()){
String s = tokens.nextToken();
if(s.length() == 32){
strongName = s;
break;
}
}
}
然后在您的 SerializationPolicyProvider impl 类中使用以下内容: 获取 SerializationPolicy:
return SerializationPolicyLoader.loadFromStream(servletContext.getResourceAsStream(moduleBaseURL+"/"+strongName+"gwt.rpc");
【讨论】:
一种解决方案似乎是使用编译器 -gen 选项。从编译器输出中获取 _Proxy.java 并从中提取 SERIALIZATION_POLICY。
【讨论】: