在运行时选择不相关的方法调用

时间:2014-07-24 08:09:02

标签: java web-services design-patterns

我们有以下scneario:

  • 客户(TIBCO)
  • Service1(网络服务)
  • Service2(网络服务)

客户可能希望随时调用任何服务的方法,并且将来服务的数量可能会发生变化。

我们希望开发一个中间Web服务,只有(如果可能的话)一种方法,根据参数,将调用路由到Service1,2或'n',这样我们就可以保护客户端免受服务数量的影响。 / p>

我一直试图弄清楚我是否可以使用设计模式来解决这个问题,或者是否有一个共同的解决方案,但考虑到服务之间没有任何关系(没有通用接口,不同的方法都有自己的参数) ),我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

一般来说,这很简单。只需创建一个带有两个字符串参数的方法:要调用的服务和要发送给它的SOAP。

但Web Service使这一点非常复杂,尤其是当您想要使用自动服务参数序列化的所有功能时。您必须在客户端上找到一种方法来拦截生成的SOAP以进行实际方法调用,并将其重新路由到“代理方法”。

因此,一种解决方案是仅提供将字符串列表作为参数的服务。这为您提供了一种“shell”服务(如Unix shell),其中一切都是字符串。由于所有方法的API现在都相同,因此客户端可以与任何人交谈。但是你失去了自动将Java对象转换为SOAP的能力。

下一种方法是使用一个代理,它只接收SOAP消息并将它们转发到不同的服务器。这意味着客户端只需要与单个服务器通信,该服务器似乎可以处理各种SOAP请求。

另一种解决方案是放弃Web服务并使用JSON或REST之类的协议,它具有更简单的有线格式,并且对所涉及的数据结构和代码的压力更小。