2010-06-04 1 views

답변

3

내 대답은 다음과 같습니다하지 마십시오.

Savon이 자동으로 봉투를 만듭니다. 원하는 헤더와 본문을 배열과 해시 또는 XML 문자열로 전달할 수 있습니다. 기존 (기본) 네임 스페이스를 조작하고 입력 작업을 무시할 수도 있습니다. nokogiri와 같은 XML 구문 분석기에서 SOAP 봉투를 작성해야하는 이유가 확실하지 않습니다.

Savon을 사용하여 봉투를 만들고 싶지 않은 이유는 엔드 포인트에 필요한 기능이 부족하기 때문입니다. 정확한 문제가 무엇인지 알려주세요. 이전에는 특정 API를 충족시키기 위해 Savon에 상당한 변화를 주어야했기 때문에 이미 패치가 있습니다. 그리고 그렇지 않다면, 나는 당신이 올바른 패치를 만들 수 있도록 올바른 방향으로 당신을 가리킬 수 있습니다.

그리고 여전히 Savon 외부에서 봉투를 만들 필요가 있다면 Savon을 전혀 사용하지 말고 단순히 많은 훌륭한 http 라이브러리 중 하나를 통해 XML을 보냅니다.

편집 :

client = Savon::Client.new "http://url.to/wsdl" 

response = client.get do |soap| 
    # Use merge! for namespaces so that you don't overwrite all of the original namespaces (while still retaining the ability to overwrite individual ones) 
    soap.namespaces.merge!({ 
    "xmlns:xsi" => "http://www.w3.org/2001/XMLSchema-instance", 
    "xmlns:xsd" => "http://www.w3.org/2001/XMLSchema" 
    }) 

    # Use soap.header just like you would soap.body 
    soap.header = { 
    # SOAP header hash 
    } 

    # soap.body as usual 
    soap.body = { 
    # SOAP body hash 
    } 
end 
+0

감사를 다시 발명보다, 설명 herethe postalmethods gem을 사용할 수 있습니다, 내가 Savon을 사용하고 싶습니다, 그러나 문서를 확인했을 때 헤더를 넣을 것인지는 분명하지 않았습니다. 기본적으로 Savon을 사용하여 비누 헤더 외부에 바디와 아무것도 넣지 않아도됩니까? – Angela

+0

Angela, SOAP 헤더를 지정할 수 있습니다. 방법을 보려면 내 편집을 참조하십시오. – vonconrad

1

Savon가 중첩로 SOAP 서비스에 입력을 처리 :

당신은 요청 메소드에서 그뿐만 아니라 몸을 포함 할 수 있습니다, SOAP 헤더 (네임 스페이스)를 사용하는 방법을 설명하기 위해 해시. 봉투는 Savon에 의해 제작되었으므로 일반적으로 걱정할 필요가 없습니다.

실제로 서비스에 연결할 수 있었습니까? 어떤 오류가 발생하지 않았습니까?

아직 연결하지 않았거나이를 수행하는 방법에 대한 개념에 문제가있는 경우 다음을 시작해야합니다. 당신의 빈칸을 채워 경우 ...이 받아야 WSDL을 구문 분석 생산에 앞으로 이동하는 방법이되지 않을 수도 있지만

require 'savon' 

client = Savon::Client.new http://api.postalmethods.com/PostalWS.asmx?wsdl 
response = client.UploadFile do |soap| 
    soap.body = { 
    "Username" => "My User", 
    "Password" => "My password" 
    ... 
    } 
end 

당신은 시작했다. 당신이 얻는 특정한 문제점을위한 Savon 문서를보십시오. 당신이 Savon와 SOAP에 대해 확실하지 않은 경우

편집

다음 방금 오히려 휠을

+0

좋습니다, 대단합니다 - 그게 wsdl을 파싱하는 것이 생산에서 앞으로 나아갈 길이 아닐 수 있다는 것을 의미합니까? 설명서에서 ..... – Angela

+0

wsdl을 Savon :: Client의 새 인스턴스에 전달할 때 수행중인 wsdl을 구문 분석하는 것은 상당히 비용이 많이 드는 작업입니다. 패스 할 올바른 매개 변수를 설정하면 실제로 그렇게 할 필요가 없습니다. 내가 너라면 나는 위와 같은 일을하고 그것이 효과가 있고 충분히 빠르게 작동 하는지를보고 wsdl없이 할 수 있는지 여부를 결정할 것이다. –

+0

내가보기에 - 그럼이 코드가 작동한다면 앞으로이 코드를 사용하지 않을 것입니다 ...? – Angela