有一个excellent article描述了将GWT RPC有效负载嵌入主机页面的方法。缺少一个关键元素,即如何在运行时知道RPC序列化策略的强名称。
强名称在编译时计算,放入客户端并进行参考。强名称以described here的RPC请求发送到服务器。你建议在主页生成时使这个参数可用吗?
答案 0 :(得分:2)
我已将GWT与spring集成在一起,并使用自定义SerializationPolicyProvider
我必须重命名<strong name>.gwt.rpc
文件并在自定义SerializationPolicyProvider
类中对该名称进行硬编码。我通过查看GWT文档来解决问题。强名称是MD5哈希,长度为32.每次对基于Spring的Controller方法进行RPC调用: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");
答案 1 :(得分:0)
一个解决方案似乎是使用编译器-gen选项。从编译器输出中获取_Proxy.java并从中提取SERIALIZATION_POLICY。