제어 할 수없는 SOAP 서비스에 액세스하려고합니다. 작업 중 하나는 ProcessMessage
입니다. 예제를 따라 SOAP 요청을 생성했지만 동작이 존재하지 않는다는 오류가 다시 발생했습니다. 나는 봉투의 몸체가 생성되는 방식으로 문제를 추적했다.루비 비누 통신에 savon을 사용할 때 "wsdl"네임 스페이스가 작업 이름에 삽입되는 이유는 무엇입니까?
<env:Envelope ... ">
<env:Header>
<wsse:Security ... ">
<wsse:UsernameToken ...">
<wsse:Username>USER</wsse:Username>
<wsse:Nonce>658e702d5feff1777a6c741847239eb5d6d86e48</wsse:Nonce>
<wsu:Created>2010-02-18T02:05:25Z</wsu:Created>
<wsse:Password ... >password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</env:Header>
<env:Body>
<wsdl:ProcessMessage>
<payload>
......
</payload>
</wsdl:ProcessMessage>
</env:Body>
</env:Envelope>
ProcessMessage
태그가되어야한다 :
<ProcessMessage xmlns="http://www.starstandards.org/webservices/2005/10/transport">
. 이 태그는 내 Ruby 앱에서 생성되는 Java App과 샘플 Java App 간의 유일한 차이점입니다. 해당 태그 앞에 "wsdl:"
네임 스페이스를 없애고 그런 속성을 추가 할 수있는 방법이 있습니까? 그게 아니라면, 신체의 나머지 부분과 같이 끈으로 전달 된 동작을 강제로 생성하지 못하도록하는 방법이 있습니까?
여기 내 코드입니다 : 내가 handsoap을 시도
require 'rubygems'
require 'savon'
client = Savon::Client.new "https://gmservices.pp.gm.com/ProcessMessage?wsdl"
response = client.process_message! do | soap, wsse |
wsse.username = "USER"
wsse.password = "password"
soap.namespace = "http://www.starstandards.org/webservices/2005/10/transport" #makes no difference
soap.action = "ProcessMessage" #makes no difference
soap.input = "ProcessMessage" #makes no difference
#my body at this point is jsut one big xml string
soap.body = "<payload>...</payload>"
# putting <ProccessMessage> tag here doesn't help as it just creates a duplicate tag in the body, since Savon keeps interjecting <wsdl:ProcessMessage> tag.
end
하지만 HTTPS를 지원하고 혼란하지 않습니다. 나는 soap4r를 시도했지만 handsoap보다 훨씬 혼란 스럽다.
: http://github.com/rubiii/savon/issues#issue/39 – rubiii
닉 안녕, 당신은 어디셨어요 나는이 문제를보고 있습니다. –
안녕하세요 스티브. 프로젝트의이 부분을 대기 상태에 두었습니다. 구현이 필요한 다른 중요한 기능이 있었기 때문에 "좋은 목록"목록에있었습니다. 나는 오늘 나중에 당신의 해결책을 시험해 볼 것이고 작동하는지 볼 것입니다. 너를 알게 해줘서 고마워! – konung