有一个excellent article描述了一种将GWT RPC有效载荷嵌入主机页面的方法。缺少一个关键要素,那就是在运行时如何知道RPC序列化策略的强名称。如何在生成主页时知道GWT序列化策略的强名称?
强名称在编译时计算,放入客户端并被支持。使用RPC请求将强名称发送到服务器为described here。你会建议在主页生成时使这个参数可用吗?
有一个excellent article描述了一种将GWT RPC有效载荷嵌入主机页面的方法。缺少一个关键要素,那就是在运行时如何知道RPC序列化策略的强名称。如何在生成主页时知道GWT序列化策略的强名称?
强名称在编译时计算,放入客户端并被支持。使用RPC请求将强名称发送到服务器为described here。你会建议在主页生成时使这个参数可用吗?
我已将GWT与自定义SerializationPolicyProvider
集成在一起,在此我总是必须重命名<strong name>.gwt.rpc
文件并在我的自定义SerializationPolicyProvider
类中硬编码该名称。我通过查看GWT文档得到了解决办法。强名称是MD5哈希值与32的长度每一次RPC调用,以基于弹簧的控制器的方法:
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实现类用途:public String processCall(String payload)
,我用下面的代码获取强名称解析有效载荷以下内容: 以获得SerializationPolicy:
return SerializationPolicyLoader.loadFromStream(servletContext.getResourceAsStream(moduleBaseURL+"/"+strongName+"gwt.rpc");
一个解决方案似乎是使用编译器-gen选项。从编译器输出获取_Proxy.java并从中提取SERIALIZATION_POLICY。