2016-12-23 3 views
0

Ruby에서 Savon gem을 사용하여 wsdl 웹 서비스에 요청을 게시하고 있습니다. 문제는, 내가 요청을 보낼 때, 응답은 나에게 응답이 괜찮다는 것을 보여 주지만 개발 팀의 도움을 받아 요청에서 보내는 항목이 하나도 없다는 것입니다. 웹 서비스가 요청을받지 못하는 것을 볼 수 있습니다. 항목, 그래서 내가 뭔가를 요청 형식이나 데이터를 잘못하고 있다고 생각할 수 있습니다. 왜냐하면 나는 Savon 2 안정을 사용하고 있기 때문에 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 
        } 
       }] 
      }] 
     } 
    ) 

내가 얻을 응답은 다음과 같습니다

<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> 

가 사전에 감사합니다

<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> 

이 항목에서 요구되는 특정 데이터는 다음과 같습니다.

답변

1

wsdl-file 또는 적어도 wsdl-file의 전체 유형 정의 (예 : 항목)가 없으면 페이로드의 정확성을 검사 할 수 없습니다.

당신에 따르면 디버그 출력 문제 : savon의 디버그 출력을 확인 했습니까?

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

은 다음 savon의 설정이
savon_config = { 
    ... 
    log: true, 
    logger: Rails.logger, 
    ... 
} 

어쩌면 이것은 당신이 당신의 요청 페이로드를 디버깅하는 데 도움이됩니다

포함해야한다 : Savon는 다음과 같은 구성을 사용하여 콘솔에 요청 및 응답 XML 페이로드를 인쇄 할 수 있습니까?

+0

감사합니다 요소는 '요소'해야합니다! 그게 제가 문제를 해결하는 데 도움이되었습니다! 나는 요청을 보여주기 위해 사범을 찾았고 오직 사범에 대해서만 발견했습니다. 3 –

+0

환영합니다 - 다행히 도울 수 있습니다 ... –

0

문제는 대신, 배열과의 요소가 지정된 방법으로 발견되었다 :

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

대신 :

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