Tôi đang cố truy cập dịch vụ SOAP mà tôi không kiểm soát. Một trong những hành động được gọi là ProcessMessage
. Tôi đã làm theo ví dụ và tạo ra một yêu cầu SOAP, nhưng tôi đã nhận được một lỗi nói rằng hành động đó không tồn tại. Tôi đã theo dõi vấn đề theo cách cơ thể của phong bì được tạo ra.Tại sao không gian tên "wsdl" xen vào tên hành động khi sử dụng savon cho truyền thông xà phòng ruby?
<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
thẻ nên là:
<ProcessMessage xmlns="http://www.starstandards.org/webservices/2005/10/transport">
Đó là những gì nó là khi nó được tạo ra bởi các ứng dụng Java mẫu, và nó hoạt động. Thẻ đó là sự khác biệt duy nhất giữa ứng dụng Ruby của tôi tạo ra và ứng dụng Java mẫu. Có cách nào để loại bỏ không gian tên "wsdl:"
trước một thẻ đó và thêm thuộc tính như vậy không. Nói cách đó, liệu có cách nào để ép buộc hành động không được tạo ra bằng cách chỉ chuyển qua như một chuỗi giống như phần còn lại của cơ thể?
Đây là mã của tôi:
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
tôi đã cố gắng handsoap nhưng nó không hỗ trợ HTTPS và là khó hiểu. Tôi đã thử soap4r nhưng nó thậm chí còn khó hiểu hơn so với handsoap.
một vé cho điều này là mở tại địa chỉ: http://github.com/rubiii/savon/issues#issue/39 – rubiii
Hi Nick, bạn đã nhận được ở bất cứ đâu với điều này như tôi thấy cùng một vấn đề. –
Xin chào Steve. Tôi đưa phần này của dự án vào trạng thái chờ đợi - vì có các tính năng khác, quan trọng hơn, cần thực hiện và đây là danh sách "tốt để có". Tôi sẽ thử giải pháp của bạn sau ngày hôm nay và xem có hoạt động không. Cảm ơn bạn đã cho tôi biết bạn! – konung