ruby-on-rails - view教程 - ruby on rails是什么
在Ruby中使用SOAP的最佳方式是什么? (7)
刚刚使用Savon在3小时内完成了我的工作。
Savon主页上的Getting Started文档非常容易遵循 - 并且实际上与我所看到的相符(并非总是如此)
我的一位客户要求我将第三方API集成到他们的Rails应用程序中。 唯一的问题是API使用SOAP。 Ruby已经基本上放弃了SOAP来支持REST。 他们提供了一个Java适配器,显然可以与Java-Ruby桥接器配合使用,但是如果可能的话,我们希望将它全部保留在Ruby中。 我看着soap4r,但它的声誉似乎有点不好。
那么将SOAP调用集成到Rails应用程序中的最佳方式是什么?
我也推荐Savon 。 我花了太多时间试图处理Soap4R,没有结果。 缺乏功能,没有文档。
萨龙是我的答案。
我用下面的HTTP调用来调用一个SOAP方法,
require 'net/http'
class MyHelper
def initialize(server, port, username, password)
@server = server
@port = port
@username = username
@password = password
puts "Initialised My Helper using #{@server}:#{@port} username=#{@username}"
end
def post_job(job_name)
puts "Posting job #{job_name} to update order service"
job_xml ="<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ns=\"http://test.com/Test/CreateUpdateOrders/1.0\">
<soapenv:Header/>
<soapenv:Body>
<ns:CreateTestUpdateOrdersReq>
<ContractGroup>ITE2</ContractGroup>
<ProductID>topo</ProductID>
<PublicationReference>#{job_name}</PublicationReference>
</ns:CreateTestUpdateOrdersReq>
</soapenv:Body>
</soapenv:Envelope>"
@http = Net::HTTP.new(@server, @port)
puts "server: " + @server + "port : " + @port
request = Net::HTTP::Post.new(('/XISOAPAdapter/MessageServlet?/Test/CreateUpdateOrders/1.0'), initheader = {'Content-Type' => 'text/xml'})
request.basic_auth(@username, @password)
request.body = job_xml
response = @http.request(request)
puts "request was made to server " + @server
validate_response(response, "post_job_to_pega_updateorder job", '200')
end
private
def validate_response(response, operation, required_code)
if response.code != required_code
raise "#{operation} operation failed. Response was [#{response.inspect} #{response.to_hash.inspect} #{response.body}]"
end
end
end
/*
test = MyHelper.new("mysvr.test.test.com","8102","myusername","mypassword")
test.post_job("test_201601281419")
*/
希望能帮助到你。 干杯。
我遇到了同样的问题,切换到Savon,然后在开放的WSDL(我使用http://www.webservicex.net/geoipservice.asmx?WSDL )上进行测试,结果如此之好!
我们使用内置的soap/wsdlDriver
类,它实际上是SOAP4R。 这只狗很慢,但很简单。 您从gems / etc获得的SOAP4R只是同一事物的更新版本。
示例代码:
require 'soap/wsdlDriver'
client = SOAP::WSDLDriverFactory.new( 'http://example.com/service.wsdl' ).create_rpc_driver
result = client.doStuff();
就是这样