저는 Savon을 사용하여 클라이언트를 구축하고 있지만 실제 봉투를 만드는 방법을 알고 싶습니다.Ruby에서 SOAP 봉투를 어떻게 만듭니 까?
나는 Nokogiri XML Builder를 사용하여 값을 전달하려고하지만 올바른 방법인지 확실하지 않습니다.
비누 봉투 사양은 여기에서 찾을 수 있습니다 :
http://api.postalmethods.com/PostalWS.asmx?op=UploadFile
저는 Savon을 사용하여 클라이언트를 구축하고 있지만 실제 봉투를 만드는 방법을 알고 싶습니다.Ruby에서 SOAP 봉투를 어떻게 만듭니 까?
나는 Nokogiri XML Builder를 사용하여 값을 전달하려고하지만 올바른 방법인지 확실하지 않습니다.
비누 봉투 사양은 여기에서 찾을 수 있습니다 :
http://api.postalmethods.com/PostalWS.asmx?op=UploadFile
내 대답은 다음과 같습니다하지 마십시오.
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
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에 대해 확실하지 않은 경우
편집
다음 방금 오히려 휠을
좋습니다, 대단합니다 - 그게 wsdl을 파싱하는 것이 생산에서 앞으로 나아갈 길이 아닐 수 있다는 것을 의미합니까? 설명서에서 ..... – Angela
wsdl을 Savon :: Client의 새 인스턴스에 전달할 때 수행중인 wsdl을 구문 분석하는 것은 상당히 비용이 많이 드는 작업입니다. 패스 할 올바른 매개 변수를 설정하면 실제로 그렇게 할 필요가 없습니다. 내가 너라면 나는 위와 같은 일을하고 그것이 효과가 있고 충분히 빠르게 작동 하는지를보고 wsdl없이 할 수 있는지 여부를 결정할 것이다. –
내가보기에 - 그럼이 코드가 작동한다면 앞으로이 코드를 사용하지 않을 것입니다 ...? – Angela
감사를 다시 발명보다, 설명 here로 the postalmethods gem을 사용할 수 있습니다, 내가 Savon을 사용하고 싶습니다, 그러나 문서를 확인했을 때 헤더를 넣을 것인지는 분명하지 않았습니다. 기본적으로 Savon을 사용하여 비누 헤더 외부에 바디와 아무것도 넣지 않아도됩니까? –
Angela
Angela, SOAP 헤더를 지정할 수 있습니다. 방법을 보려면 내 편집을 참조하십시오. – vonconrad