2014-02-11 2 views
1

Nokogiri/Builder을 사용하여 XML을 작성하지 않으려 고 Ruby 2.0.0과 함께 Savon 보석을 사용하고 싶습니다.Savon/Ruby로 XML 요청 복제

<s:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:tns="http://tempuri.org/" 
      xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
    <tns:GetList> 
     <id>1</id> 
    </tns:GetList> 
    </s:Body> 
</s:Envelope> 

내가 방법을 알아낼 수 없습니다 :이 반환

def soap_client 
    soap_client = Savon.client(
     wsdl: "http://10.10.10.10/ListApi.svc?wsdl" 
     headers: {"Authorization" => "Basic"}, 
     basic_auth: ['username', 'password'], 
     env_namespace: :s, 
     ssl_verify_mode: :none, 
     log: true, 
     :pretty_print_xml => true 
    ) 
    end 
다음

soap_client.call :get_list, message: {'id' => 1} : 지금까지 내가 이것을 가지고

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
    <GetList xmlns="http://tempuri.org/"> 
     <listRequest xmlns:a="http://schemas.datacontract.org/2004/07/Services.List" 
      i:type="b:NpsListRequest" 
      xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:b="http://schemas.datacontract.org/2004/07/Services.List.Strategies"> 
     <a:id>1</a:id>   
     </listRequest> 
    </GetList> 
    </s:Body> 
</s:Envelope> 

을 : 나는이 복제하기 위해 다음과 같은 요청을 필요로했다 첫 번째 요청을 정확히 복제합니다. tns: 네임 스페이스가 GetList에 잘못되었습니다. <listRequest xmlns:a = 조각도 복제 할 수 없습니다. Savon 내에서이 작업을 수행하는 방법에 대한 의견이 있으십니까?

답변

1

GetList의 네임 스페이스가 정확합니다. 나는 당신의 WSDL에 액세스 할 수없는 및 테스트 할 수 없기 때문에 당신은 아마 쓸 필요가 무엇 , 당신의 문제에 대한 정확한 해결책이 될 수 없습니다

soap_client.call(:get_list, 
       :attributes => {'xmlns:b'=>'http://schemas.datacontract.org/'}, 
       message: { 'ListRequest' => { 'tns:id' => 1 } } 

입니다. 하지만 솔루션의 열쇠를 얻어야합니다.