2014-06-12 1 views
0

여기에서이 질문을했습니다. Savon 2 returns nothingSavon은 Rails 4에서 결과를 반환하지 않습니까?

그리고 대답을 얻었습니다. + Steffen Roller 덕분에

이제 대부분의 Soap API가 정렬됩니다. 이걸로, 나는 아무것도 얻지 못하는 모든 것을 시도했습니다. USZip이 작동 할 때 작동해야한다고 생각했습니다. 분명히 :(하지

비누 API :

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <tem:GetHistoryByID> 
     <!--Optional:--> 
     <tem:personId>789834133</tem:personId> 
     </tem:GetHistoryByID> 
    </soapenv:Body> 
</soapenv:Envelope> 

SoapUI 응답 :

여기
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
     <GetHistoryByIDResponse xmlns="http://tempuri.org/"> 
     <GetHistoryByIDResult xmlns:a="http://schemas.datacontract.org/2004/07/Domain.MySite.WS" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
      <a:ErrorMessage i:nil="true"/> 
      <a:Rounds xmlns:b="http://schemas.datacontract.org/2004/07/Domain.MySite.WS"> 
       <b:Round> 
        <b:AdjustedGross>104</b:AdjustedGross> 
        <b:MainField>14</b:MainField> 
       </b:Round> 
       <b:Round> 
        <b:AdjustedGross>101</b:AdjustedGross> 
        <b:MainField>14</b:MainField> 
       </b:Round> 
      </a:Rounds> 
      <a:Status>Success</a:Status> 
     </GetHistoryByIDResult> 
     </GGetHistoryByIDResponse> 
    </s:Body> 
</s:Envelope> 

내 Savon

require 'savon' 
    require 'pp' 

    a_url = 'wsdl link in here' 

    client = Savon.client(
      wsdl: a_url, 
      log: true, # set true to switch on logging 
      log_level: :debug, 
      pretty_print_xml: true 
    ) 

    person_id = "12345" 

    response = client.call(:get_history_by_id, message: { "personId" => person_id } 
    ) 

되고 응답이 이것이다 :

{:get_history_by_id_response=>{:get_history_by_id_result=>{:error_message=>nil, :rounds=>{:"@xmlns:b"=>"http://schemas.datacontract.org/2004/07/Domain.MySite.Entities"}, :status=>"Success", :"@xmlns:a"=>"http://schemas.datacontract.org/2004/07/Domain.MySite.WS", :"@xmlns:i"=>"http://www.w3.org/2001/XMLSchema-instance"}, :@xmlns=>"http://tempuri.org/"}} 

다시 한 번 감사드립니다.

업데이트 : Savon 로그 :

D, [2014-06-13T10:14:56.457008 #3157] DEBUG -- : HTTPI GET request to api.mysite.com.au (httpclient) 
I, [2014-06-13T10:14:56.569055 #3157] INFO -- : SOAP request: http://api.mysite.com.au/MyDomain/DomainCCService.svc 
I, [2014-06-13T10:14:56.569113 #3157] INFO -- : SOAPAction: "http://tempuri.org/IDomainCCService/GetHistoryById", Content-Type: text/xml;charset=UTF-8, Content-Length: 382 
D, [2014-06-13T10:14:56.569214 #3157] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://tempuri.org/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
    <tns:GetHistoryById> 
     <personId>789834133</personId> 
    </tns:GetHistoryById> 
    </soapenv:Body> 
</soapenv:Envelope> 

D, [2014-06-13T10:14:56.569418 #3157] DEBUG -- : HTTPI POST request to api.mysite.com.au (httpclient) 
I, [2014-06-13T10:14:56.902413 #3157] INFO -- : SOAP response (status 200) 
D, [2014-06-13T10:14:56.902625 #3157] DEBUG -- : <?xml version="1.0"?> 
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
    <GetHistoryByIdResponse xmlns="http://tempuri.org/"> 
     <GetHistoryByIdResult xmlns:a="http://schemas.datacontract.org/2004/07/Domain.MySite.WS" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
     <a:ErrorMessage i:nil="true"/> 
     <a:Rounds xmlns:b="http://schemas.datacontract.org/2004/07/Domain.MySite.Entities"/> 
     <a:Status>Success</a:Status> 
     </GetHistoryByIdResult> 
    </GetHistoryByIdResponse> 
    </s:Body> 
</s:Envelope> 

감사

+0

질문에 로깅을 추가 할 수 있습니까? savon 호출은 XML에서 어떻게 보이나요? –

+0

Savon 로그를 추가했습니다. –

답변

1

가장 간단한 해결책은 태그에 네임 스페이스를 포함하는 것입니다. 적어도 그것이 내가하는 일입니다. "personID"를 "tns : personID"로 바꿉니다. 그렇게해야합니다.

+0

블러드 미용. 그것은 효과가 있었다. 당신은 내 새로운 영웅입니다 :). 다시 한 번 고마워. –