मैं एक एसओएपी सेवा तक पहुंचने की कोशिश कर रहा हूं जिसे मैं नियंत्रित नहीं करता हूं। कार्यों में से एक को ProcessMessage
कहा जाता है। मैंने उदाहरण का पालन किया और एक एसओएपी अनुरोध उत्पन्न किया, लेकिन मुझे यह कहते हुए एक त्रुटि मिली कि कार्रवाई मौजूद नहीं है। मैंने लिफाफा के शरीर के तरीके से समस्या का पता लगाया।रूबी साबुन संचार के लिए savon का उपयोग करते समय "wsdl" नेमस्पेस कार्रवाई नाम में क्यों इंजेक्शन दिया गया है?
<env:Envelope ... ">
<env:Header>
<wsse:Security ... ">
<wsse:UsernameToken ...">
<wsse:Username>USER</wsse:Username>
<wsse:Nonce>658e702d5feff1777a6c741847239eb5d6d86e48</wsse:Nonce>
<wsu:Created>2010-02-18T02:05:25Z</wsu:Created>
<wsse:Password ... >password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</env:Header>
<env:Body>
<wsdl:ProcessMessage>
<payload>
......
</payload>
</wsdl:ProcessMessage>
</env:Body>
</env:Envelope>
कि ProcessMessage
टैग होना चाहिए:
<ProcessMessage xmlns="http://www.starstandards.org/webservices/2005/10/transport">
है यही कारण है कि यह क्या है जब यह नमूना जावा एप्लिकेशन द्वारा उत्पन्न होता है, और यह काम करता है। यह टैग मेरा रूबी ऐप जेनरेट और नमूना जावा ऐप के बीच एकमात्र अंतर है। क्या उस टैग के सामने "wsdl:"
नामस्थान से छुटकारा पाने का कोई तरीका है और इस तरह की विशेषता जोड़ें। इसके अलावा, क्या शरीर के बाकी हिस्सों की तरह स्ट्रिंग के रूप में पारित होने के लिए क्रिया को बल देने के लिए कोई तरीका नहीं है?
यहाँ मेरी कोड है:
require 'rubygems'
require 'savon'
client = Savon::Client.new "https://gmservices.pp.gm.com/ProcessMessage?wsdl"
response = client.process_message! do | soap, wsse |
wsse.username = "USER"
wsse.password = "password"
soap.namespace = "http://www.starstandards.org/webservices/2005/10/transport" #makes no difference
soap.action = "ProcessMessage" #makes no difference
soap.input = "ProcessMessage" #makes no difference
#my body at this point is jsut one big xml string
soap.body = "<payload>...</payload>"
# putting <ProccessMessage> tag here doesn't help as it just creates a duplicate tag in the body, since Savon keeps interjecting <wsdl:ProcessMessage> tag.
end
मैं handsoap की कोशिश की लेकिन यह HTTPS का समर्थन नहीं करता और भ्रामक है। मैंने साबुन 4 आर की कोशिश की लेकिन यह हैंडसोप से भी ज्यादा भ्रमित है।
इस के लिए एक टिकट पर खुला था: http://github.com/rubiii/savon/issues#issue/39 – rubiii
हाय निक, आप कहीं से मिला इसके साथ में मैं एक ही मुद्दा देख रहा हूं। –
हाय स्टीव। मैंने इस स्थिति का इंतजार प्रतीक्षा स्थिति पर रखा - क्योंकि अन्य, अधिक महत्वपूर्ण, सुविधाओं को कार्यान्वयन की आवश्यकता थी, और यह "अच्छी" सूची में था। मैं आज बाद में आपके समाधान का प्रयास करूंगा और देख सकता हूं कि क्या काम करता है। मुझे आपको बताने के लिए धन्यवाद! – konung