Я пытаюсь сделать то, что, как представляется, довольно прямо вперед SOAP
запроса, тот, который работает в SoapUI
, но когда я исполню мой Руби кода, я получаю 'raise_soap_and_http_errors! Запрос на выполнение исключения.Рубин Савон ошибка гема в принятии запроса
Вот код - документ ссылается на wsdl_path работ в SoapUI сделать запрос AUTHENTICATE.
require 'savon'
wsdl_path = 'XXXX_soap_interface.wsdl'
client = Savon.client(
:wsdl => wsdl_path,
:ssl_verify_mode => :none,
:raise_errors => true, # false if you don't want to see exceptions
pretty_print_xml: true)
response = client.call(
:authenticate,
message: {:partnerName => 'XXXX', :userName => 'xxxxxx', :password => 'xxxxx'}
)
puts response
Я получаю ошибку Спинка:
savon/response.rb:85:in `raise_soap_and_http_errors!': (SOAP-
ENV:Server) Exception executing request (Savon::SOAPFault)
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/savon-2.4.0/lib/savon/response.rb:14:in `initialize'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/savon-2.4.0/lib/savon/operation.rb:64:in `new'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/savon-2.4.0/lib/savon/operation.rb:64:in `create_response'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/savon-2.4.0/lib/savon/operation.rb:55:in `call'
from C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/savon-2.4.0/lib/savon/client.rb:36:in `call'
from xxx_soap.rb:15:in `<main>'
Я бегу Ruby 1.9, кто-нибудь есть какие-либо идеи о том, что бы сделать эту работу?
Редактировать: переменная wsdl_path используется при создании клиента Savon. Я могу создать клиента, а также выполнить client.operations и успешно вернуть операции с SOAP-службы. Только запрос не работает.
изменения: После добавления полезного кода протоколирования снизу, я получаю эту спину:
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:common="urn:xxx-com:cloud:common"
xmlns:finsvc="urn:xxx-com:cloud:finsvc"
xmlns:finsvc-13-6-0="urn:xxx-com:cloud:finsvc:13.6.0">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>Exception executing request</faultstring>
<detail>
<operationResult>
<errorCode>101</errorCode>
<errorMessage>SOAP error 44 (SOAP 1.1 fault: SOAP-ENV:Client [no subcode] "Validation constraint violation: occurrence v
iolation in element 'userName'" Detail: [no detail])</errorMessage>
</operationResult>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Независимо от того, в какой порядок я ставлю параметры или если я использую CamelCase или нет, первый параметр не указан в сообщение выдает указанную выше ошибку.
Я уверен, что ваше утверждение здесь неточно. wsdl_path также может указывать на локальный файл, что и делается здесь. Как я уже сказал, файл wsdl, на который ссылается эта переменная, работает в интерфейсе SOAP, и клиентское соединение с использованием переменной wsdl работает, например, я могу создать клиента, а затем я могу использовать client.operations и вернуть список операций из службы SOAP. – user401093
Да, ты прав. Вы получили ошибку SOAPFault, а не ошибку HTTP. – Yanhao