मैंने रूबी में SOAP का उपयोग किया है जब मुझे अपनी स्वीकृति परीक्षणों के लिए एक नकली SOAP सर्वर बनाना पड़ा है। मुझे नहीं पता कि यह समस्या का सबसे अच्छा तरीका है, लेकिन यह मेरे लिए काम करता है।
मैंने सिनात्रा रत्न का उपयोग किया है (मैंने सर्वर के लिए सिनात्रा के साथ मॉकिंग एंडपॉइंट बनाने के बारे में लिखा है ) और एक्सएमएल सामान के लिए नोकोगिरी भी है (एसओएपी एक्सएमएल के साथ काम कर रहा है)।
इसलिए, शुरुआत के लिए मैंने दो फाइलें बनाई हैं (जैसे config.rb और response.rb) जिसमें मैंने पूर्वनिर्धारित उत्तर दिए हैं कि SOAP सर्वर वापस आ जाएगा। में config.rb मैं WSDL फ़ाइल डाल दिया, लेकिन एक स्ट्रिंग के रूप है।
@@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>'
में responses.rb मैं जवाब है कि सोप सर्वर विभिन्न परिदृश्यों के लिए वापस आ जाएगी के लिए डाल नमूने की है।
@@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>"
तो अब मैं आपको दिखाता हूं कि मैंने वास्तव में सर्वर कैसे बनाया है।
require 'sinatra'
require 'json'
require 'nokogiri'
require_relative 'config/config.rb'
require_relative 'config/responses.rb'
after do
# cors
headers({
"Access-Control-Allow-Origin" => "*",
"Access-Control-Allow-Methods" => "POST",
"Access-Control-Allow-Headers" => "content-type",
})
# json
content_type :json
end
#when accessing the /HaWebMethods route the server will return either the WSDL file, either and XSD (I don't know exactly how to explain this but it is a WSDL dependency)
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
मुझे आशा है कि आपको यह मददगार लगेगा!