2014-06-26 2 views
0

Я пытаюсь сделать то, что, как представляется, довольно прямо вперед 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 или нет, первый параметр не указан в сообщение выдает указанную выше ошибку.

ответ

0

wsdl_path должен быть полным URL, например http://domain.name/.../soap.wsdl.

+0

Я уверен, что ваше утверждение здесь неточно. wsdl_path также может указывать на локальный файл, что и делается здесь. Как я уже сказал, файл wsdl, на который ссылается эта переменная, работает в интерфейсе SOAP, и клиентское соединение с использованием переменной wsdl работает, например, я могу создать клиента, а затем я могу использовать client.operations и вернуть список операций из службы SOAP. – user401093

+0

Да, ты прав. Вы получили ошибку SOAPFault, а не ошибку HTTP. – Yanhao

1

Включение протоколирования с

client = Savon.client(
... 
log: true, 
loglevel: :debug, 
pretty_print_xml: true) 

и разделить выход, если вы не можете найти проблему.

Если проблема все еще существует, то вы должны пойти стандартным путем:

  1. Получить SoapUI
  2. создать действительный вызов, который вы можете выполнить успешно
  3. на его основе - написать скрипт на Ruby (не Ruby on Rails !!), который создает действительный запрос
  4. интегрируйте этот код в свои Rails (или любой проект).
+0

Спасибо, я с трудом выводил на консоль то, что происходило. Я добавил ваш предлагаемый код, и похоже, что запрос сам по себе не работает по параметрам. Я добавил вывод ошибки в свой вопрос ... – user401093

1

Таким образом, все это оказалось проблемой в документе wsdl, где поля, которые были необходимы, не были указаны как таковые, но ответ от службы не выявил этого.

Смежные вопросы