2016-12-23 12 views
0

Я использую драгоценный камень Savon с Ruby для отправки запросов на веб-сервис wsdl. Проблема заключается в том, что когда я отправляю запрос, ответ показывает мне, что ответ в порядке, но в нем отсутствует один элемент, который я отправляю в запросе, с помощью команды разработчиков я вижу, что веб-служба получает запрос без элемент, так что я могу думать, что я делаю что-то неправильно с форматом запроса или данными. Потому что я использую Savon 2 stable. Я не вижу прямой запрос xml Savon.Ruby - SOAP WSDL - Savon Gem. Ошибка при отправленном запросе, не отправляющем некоторые данные

Товар является последним, «promotion_rules».

@result = @client.call(
     :create_template, message: { 
      :item => [{ 
       'promotion_id'   => 1, 
       'initial_quantity'  => 0, 
       :products => [{ 
        :product => { 
         'id'     => 3, 
         'quantity'    => 1 
        } 
       }], 
       :lists => [{ 
        :list => [ 
         0, 
         1, 
         2 
        ] 
       }], 
       :promotion_rules => [{ 
        :promotion_rule => { 
         'code'  => "NEW_USER", 
         'value'  => 1 
        } 
       }] 
      }] 
     } 
    ) 

Ответа я получаю:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://ws.test.enterprise.com"> 
    <SOAP-ENV:Body> 
    <ns1:createTemplateResponse> 
     <item> 
     <response> 
      <code>000</code> 
      <description>Aprobada</description> 
      <ticket>99999999</ticket> 
     </response> 
     <attention> 
      <begin>2016-12-23 10:49:50</begin> 
      <end>2016-12-23 10:49:50</end> 
      <time>0.2</time> 
     </attention> 
     <template_id>901</template_id> 
     </item> 
    </ns1:createTemplateResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Конкретные данные, что требуется в том, что пункты заключаются в следующем:

<xsd:element name="promotion_rules" maxOccurs="1" minOccurs="0"> 
    <xsd:complexType> 
    <xsd:sequence> 
     <xsd:element name="promotion_rule" maxOccurs="unbounded"> 
     <xsd:complexType> 
      <xsd:sequence> 
      <xsd:element name="code" type="xsd:string"/> 
      <xsd:element name="value" type="xsd:integer"/> 
      </xsd:sequence> 
     </xsd:complexType> 
     </xsd:element> 
    </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

Спасибо заранее.

ответ

1

Невозможно проверить правильность вашей полезной нагрузки без wsdl-файла или, по крайней мере, полных определений типов (например, Item) из wsdl-файла.

В соответствии с вашей проблемой отладки-вывода: вы проверили вывод отладки Savon? Савон может напечатать ваш запрос и XML-ответ полезной нагрузки на консоль с помощью следующей конфигурации:

Rails.logger = Logger.new(STDOUT) 
Rails.logger.level = LOGGER::DEBUG 

тогда ваш Савон конфигурации должен включать

savon_config = { 
    ... 
    log: true, 
    logger: Rails.logger, 
    ... 
} 

Может быть, это поможет вам при отладке запроса-полезной нагрузки?

+0

Спасибо! что помогло мне решить проблему! Я искал савон, чтобы показать запрос, и я только нашел о savon 3 –

+0

Приветствую вас - рад, что я мог бы помочь ... –

0

Проблема была найдена в том, как массивы и элемент, где указано, вместо того, чтобы: элемент он должен быть «элемент»:

   'promotion_rules' => [{ 
        'promotion_rule' => { 
         'code'  => "NEW_USER_RULE", 
         'value'  => 1 
        } 
       }] 

Вместо:

   :promotion_rules => [{ 
        :promotion_rule => { 
         'code'  => "NEW_USER_RULE", 
         'value'  => 1 
        } 
       }]