将 SOAP 添加到现有 GWT 解决方案
Posted
技术标签:
【中文标题】将 SOAP 添加到现有 GWT 解决方案【英文标题】:Add SOAP to an existing GWT solution 【发布时间】:2011-11-30 15:24:15 【问题描述】:我正在寻找一种简洁的方法来向现有 GWT 应用程序(客户端 + 基于 RemoteService 的服务器)添加面向服务的访问。问题是所有服务都已经到位,由@RemoteServiceRelativePath 表示法描述。如果能够实际添加 @WebService 表示法并通过 RPC 和 XML/JSON/.. 访问它们,那就太好了。
真正的问题是,由于 GWT 混淆,扩展当前应用程序以支持现有 GWT 以外的其他客户端有点困难。这也导致客户端和服务器之间不必要的耦合,因为它们都需要同时部署,因为 .gwt.rpc 生成的文件。
我想重用现有的 RemoteService 接口来定义 Web 服务并通过纯文本协议与新客户端连接到它们。此外,我想将现有的 GWT 客户端移植到相同的协议。
是否可以通过注释使用相同的接口和实现来做到这一点? 将现有客户端移植到使用纯文本协议 RequestBuilder 的最佳方式是什么?或者只是注入一个新的 xml / json 序列化实现?
我什至不知道从哪里开始,这就是我问的原因。也许最好一次重写所有服务并移植所有内容,但它会破坏所有内容,直到完成。
【问题讨论】:
【参考方案1】:自从 GWT 以来,我们采用了不同的方法,服务器端和客户端之间的 GWT 耦合并不全是坏事,但可以很好地集成,而且您不必过多考虑通信问题等。 为此,我们的应用程序有一个前端层,它由完整的 gwt 堆栈(客户端 + 服务器耦合)组成,在服务器端,我们通过 spring 和 RPC 连接到服务层。
这样您就可以利用弹簧的好处,并且不会失去 GWT 的舒适度。
但我想知道是否有人已经采取了其他方式;)
【讨论】:
这对于安全和带宽来说也很好,但我们希望将现有服务从 GWT 移植到某种可读格式(json 或 xml)并保留相同的数据对象。我目前正在服务器上尝试使用 xstream+json,客户端上使用 AutoBean,希望这可以是一种适当的方式,以最少的代码更改来保持相同的对象。【参考方案2】:这已经很晚了,GWT 已经不是以前的奇迹了。但是,为了打结,这是我所寻求的解决方案:
创建一个 Java 生成器,通过反射解析所有模型(共享客户端/服务器类)文件,并生成一个可读取/写入 SOAP 对象的 Java 文件 将以上内容引导到处理原生对象 + 数组、集合、映射的通用 Java 处理程序中 编写可以处理上述文件生成的XML的服务这听起来有点简洁和复杂,但编写代码以自动将 >200 个对象可靠地转换为它们的 XML 表示,“只”花了大约 1 个月的时间。额外的好处是它允许模拟和跨平台的客户端/服务器。
总而言之,生成的代码创建了新方法“fromXML”和“toXML”,它们提供给定类中公共成员(get/set)的字段。因此,给定 MyClass 它将生成 MyClassSerializer 和 MyClassDeserializer Java 类,这些 Java 类实现了这些特定于 SOAP 的方法,并将它们自己发布到“调度程序”。因此,每当该调度程序看到“MyClass”时,它就会知道从哪里获取 ser/deser 函数。
【讨论】:
以上是关于将 SOAP 添加到现有 GWT 解决方案的主要内容,如果未能解决你的问题,请参考以下文章
如果标记不存在,则使用XSLT将XML标记添加到SOAP消息
如何将现有解决方案添加到 Team Foundation Server?