Saya telah menggunakan SOAP di Ruby ketika saya harus membuat server SOAP palsu untuk tes penerimaan saya. Saya tidak tahu apakah ini cara terbaik untuk mengatasi masalah, tetapi berhasil untuk saya.
Saya telah menggunakan permata Sinatra (saya menulis tentang membuat titik akhir yang mengejek dengan Sinatra di sini ) untuk server dan juga Nokogiri untuk barang XML (SOAP bekerja dengan XML).
Jadi, untuk permulaan saya telah membuat dua file (misalnya config.rb dan respond.rb) di mana saya telah meletakkan jawaban yang telah ditentukan yang akan dikembalikan SOAP server. Di config.rb saya telah meletakkan file WSDL, tetapi sebagai string.
@@wsdl = '<wsdl:definitions name="StockQuote"
targetNamespace="http://example.com/stockquote.wsdl"
xmlns:tns="http://example.com/stockquote.wsdl"
xmlns:xsd1="http://example.com/stockquote.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
.......
</wsdl:definitions>'
Di respond.rb saya telah meletakkan sampel untuk tanggapan bahwa server SOAP akan kembali untuk skenario yang berbeda.
@@login_failure = "<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<LoginResponse xmlns="http://tempuri.org/">
<LoginResult xmlns:a="http://schemas.datacontract.org/2004/07/WEBMethodsObjects" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Error>Invalid username and password</a:Error>
<a:ObjectInformation i:nil="true"/>
<a:Response>false</a:Response>
</LoginResult>
</LoginResponse>
</s:Body>
</s:Envelope>"
Jadi sekarang izinkan saya menunjukkan kepada Anda bagaimana saya sebenarnya membuat server.
require 'sinatra'
require 'json'
require 'nokogiri'
require_relative 'config/config.rb'
require_relative 'config/responses.rb'
after do
headers({
"Access-Control-Allow-Origin" => "*",
"Access-Control-Allow-Methods" => "POST",
"Access-Control-Allow-Headers" => "content-type",
})
content_type :json
end
get "/HAWebMethods/" do
case request.query_string
when 'xsd=xsd0'
status 200
body = @@xsd0
when 'wsdl'
status 200
body = @@wsdl
end
end
post '/HAWebMethods/soap' do
request_payload = request.body.read
request_payload = Nokogiri::XML request_payload
request_payload.remove_namespaces!
if request_payload.css('Body').text != ''
if request_payload.css('Login').text != ''
if request_payload.css('email').text == some username && request_payload.css('password').text == some password
status 200
body = @@login_success
else
status 200
body = @@login_failure
end
end
end
end
Saya harap ini berguna bagi Anda!