2012-07-05 58 views
1

我的团队正在开发基于现有的基于SOAP的Web服务的REST服务包装。我们并不完全了解SOAP服务内部部件,只能访问WSDL文件。我们的REST服务包装将只是一对一的映射。通过现有的SOAP Web服务构建REST包装

即使请允许我将它称为REST服务,但我确实知道它并不遵循REST哲学。该REST服务将部署在Tomcat上,许多客户端将同时访问它。

当前的实现是,我们将为每个客户创建一个代理对象(使用SOAP WSDL代理类)。该代理对象将用于调用SOAP API。 SOAP需要通过代理对象绑定验证细节,所以我们在运行时将每个客户端的这些对象保存在内存中,同时进行第一次REST调用以建立会话。

保存的对象在运行时使用SessionID标识符获取。现在问题是这些代理对象占用大内存块,并且只有少数REST客户端被支持。 (使用默认的64 MB只能运行19个REST客户端)。这是我们现在想要改变方法的麻烦,并且需要您的建议。

请让我知道是否有更好的解决方案存在。我们不希望数据库存储对象。

回答

0

如果你所能做的只是调用一个HTTP/Soap服务并且没有访问代码,那么你使用适当的REST约定创建你的REST服务,然后实现SOAP服务调用的转换。你创建SOAP客户机类自动从WSDL中获取,这将为您节省一些时间。

但是,您需要编写一个自定义翻译层,并且不要制作一套hacky REST服务,并尝试将其纳入SOAP模型。尽量保持真实的休息状态,并使翻译层更复杂..这将是值得的。

+0

感谢您的建议。所以你的意思是这个问题可以通过编写一个处理单个代理对象的翻译层来解决,或者不需要任何代理对象。 – sakura 2012-07-05 22:37:40