使用Rails 3实现SOAP 1.2服务器

时间:2010-04-15 19:57:13

标签: ruby-on-rails xml ruby soap wsdl

SOAP?你为什么要用它?

我使用Ruby Enterprise Edition和Rails 3来编写我的Web应用程序。该应用程序使用Ustream的Watershed白标广播服务为我的用户提供实时流媒体。不幸的是,我在开发期间遇到了障碍。 Watershed允许应用程序通过在应用程序端实现SOAP服务来提供自己的身份验证层。必须在SOAP 1.2中实现此身份验证层才能与Watershed一起使用。令我非常沮丧的是,似乎Ruby社区已经过去了,因为SOAP已经过了一个充满REST和Unicorns的更光明的未来。

这让我很高兴99.9%的时间。但是现在我需要在我的闪亮的新Rails 3应用程序中创建一个SOAP 1.2端点。

如果有人有任何我可以使用的建议或图书馆,我会非常感激。

我已经完成的事情

  • 尝试使用Ruby内置的SOAP支持。不幸的是,它似乎不支持SOAP 1.2。
  • 看看WSO2,但不想在我的服务器上构建一组广泛的Ruby扩展,只是为了支持SOAP。
  • 在决定我是一个懒惰的程序员之前,考虑对xml响应进行硬编码。

4 个答案:

答案 0 :(得分:4)

自Q发布以来已经有一段时间了,但是嘿,SOAP也没有超速。我猜你已经实现了一些东西,小心分享?

无论如何,作为一种答案,我很幸运有一位客户强迫我使用他的SOAP服务(他们很棒的SOA平台不支持其他格式......)用于拉取和推送数据。我只消费,因为我自己为其他人提供了漂亮而干净的RESTful Web服务。我一直在使用savon(法语为肥皂?)取得了巨大的成功

http://savonrb.com

如果你真的很懒,你就会对SOAP信封结构进行硬编码并输入你的动态数据。这是一个简单的例子。

def soap_envelope(pCode)
  "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:prod='http://xmlns.aBigCompany.com/path/to/NeededService'>
     <soapenv:Header/>
     <soapenv:Body>
        <something:NeededServiceRequest>
           <something:productCode>#{pCode}</something:productCode>
        </something:NeededServiceRequest>
     </soapenv:Body>
  </soapenv:Envelope>"
end

这是使用它的一种方法

products_wsdl = Savon::Client.new "http://ipAtBigCo:xxxx/path/to/services/NeededService?wsdl"
begin
  response = products_wsdl.process! do |soap| 
    soap.xml = soap_envelope("someProductCode")
  end
rescue => e
  MyLogger.error "Error: SOAP call for code #{pCode} failed. ++"
  raise e
end
response.to_hash # This is the nice part 

关于SOAP 1.2,savon支持它。关于实际上是一个SOAP服务提供程序,我还没有在rails中做过(对抗它!)并且只能祝你好运。必须自己开发愚蠢的WSDL才是SOAP服务真正的痛苦。希望这对任何人都有帮助。

答案 1 :(得分:3)

如果你无法避免Rails 3中的SOAP,那么试试wash_out gem。您可以在https://github.com/roundlake/wash_out

找到它

我们在我们的系统中使用过。这不是万无一失的,仍然会有一些变化,至少你会开始

虽然Rails 3以后,它们已经停止支持SOAP - wash_out gem可以帮助您更快地开始创建SOAP Web服务。任何有兴趣的人都应该看看github上的wash_out wiki。在我们的例子中,客户希望公开SOAP Web服务;我们试图采用REST方式。最后,我们不得不对SOAP说“是”。我尝试过aws,soap4r - 但是wash_out最适合。

答案 2 :(得分:1)

您可以将此gem用于soap实现

savon

答案 3 :(得分:0)

您可以在http://aws.rubyonrails.org/

找到您要找的内容