2011-11-19 3 views
0

Savon을 사용하여 본문 태그에 인코딩 속성을 추가하려면 어떻게해야합니까?Savon : 본문 태그에 인코딩 추가

일부 배경 : SOAP 자원에 연결하기 위해 savon을 사용하려고합니다. WSDL 파일을 가져 와서 메서드를 검색 할 수 있습니다.

@client = Savon::Client.new("http://some.domain.com/v2messaging/service?WSDL") 

내가이 오류를 얻을 로그인 방법

response = @client.request :service, :login do 
    soap.body = { 
    "String_1" => "username", 
    "String_2" => "password" 
    } 
end 

를 사용하려고하면

장애/오류 : 응답 = @ client.request : 서비스 : 로그인 Savon를 수행합니다 : SOAP :: Fault : (env : Client) 요청을 처리하는 동안 예외가 잡혔다 : 예기치 않은 인코딩 스타일 : expected = http : //schemas.xmlsoap.org/soap/encoding/, 실제

본문 태그의 차이.

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:service="etapestryAPI/service"> 
    <env:header/> 
    <env:body> 
     <service:login env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
     <String_1>username</String_1> 
     <String_2>password</String_2> 
     </service:login> 
    </env:body> 
</env:Envelope> 

Savon가 전송 : 여기에 (SOAPUI 응용 프로그램을 통해 발견) 예상 XML입니다

<?xml version="1.0" encoding="UTF-8"?> 
<env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:service="etapestryAPI/service" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="http://java.sun.com/jax-rpc-ri/internal" xmlns:ins1="etapestryAPI/service"> 
    <env:Body> 
     <service:login> 
      <String_1>username</String_1> 
      <String_2>password</String_2> 
     </service:login> 
    </env:Body> 
</env:Envelope> 

이 사이에 약간의 차이가 있습니다,하지만 오류는 ENV과 관련이있다 반환 인코딩 스타일 속성을 env : login 태그에 있습니다. 이 속성을 추가하는 방법은 무엇입니까?

답변

1

나는 이것을 알아 내었다. (이 경우 로그인에) 기능 태그에 속성을 추가하려면, 당신은 방법에 추가 매개 변수에 전달할 수 있습니다 : 이것은 아마 지금 블록을 거치지 않고 작동합니다

response = @client.request :service, :login, "env:encodingStyle" => "http://schemas.xmlsoap.org/soap/encoding/" do 
    soap.body = { 
      "String_1" => "username", 
      "String_2" => "password" 
     } 
end 

.

관련 문제