2014-06-06 4 views
0
나는 비누 요청을 생성하고 포맷 할 경우 필요에 대한 Savon 보석 (버전 2.5.1) 함께 일하고

은 다음과 같습니다비누 클라이언트 요청 코드는 2.5.1

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:soap1="urn:website.co.uk/soap:callreport7"> 
    <soap:Header> 
     <soap1:callcreditheaders> 
     <soap1:company>?</soap1:company> 
     <soap1:username>?</soap1:username> 
     <soap1:password>?</soap1:password> 
     </soap1:callcreditheaders> 
    </soap:Header> 
    <soap:Body> 
     <soap1:Test07a>?</soap1:Test07a> 
    </soap:Body> 
</soap:Envelope> 

내가 지금까지 가지고 다음에 올 : 나는를 제거하면

Savon::SOAPFault: (soap:Server) An internal system error has occurred 

:의 콘솔에서 실행하는 경우

client = Savon.client(
    wsdl: "CallReport7.wsdl", 
    env_namespace: :soap, 
    soap_header: { 
    "soap1:callcreditheaders" => { 
     'soap1:company' => 'XXXX', 
     'soap1:username' => 'XXXX', 
     'soap1:password' => 'XXXX' 
    } 
    } 
) 
response = client.call(:test07a, message: "Test") 

이 오류를 반환 해시 soap_header 다음 테스트 실행 및 반환 :

<?xml version="1.0" encoding="utf-8"?> 
    <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <Test07aResponse xmlns="website.co.uk/soap:callreport7"> 
     <TestResult> 
      <datetime>2014-06-06T14:18:35.081125+01:00</datetime> 
     </TestResult> 
     </Test07aResponse> 
    </soap:Body> 
    </soap:Envelope> 

문제는 내가 헤더 정보를 필요로하고 나는이에 대한 요청을 포맷하는 방법을 작동하지 않을 수 있습니다.

답변

0

봉투가 문제가있는 것으로 판명되었습니다. Savon에 의해 생성 된 SOAP을 볼 수 있도록이 코드를 로깅 할 수있게되어 SoapUI에서 요청을 시도하고 시행 착오 테스트를 할 수있게되었습니다. (가) 아래에있는 내 경우에는 문제를 해결하므로 문제가 봉투로했다 밝혀졌다 : 코드의

client = Savon.client(
    wsdl: "CallReport7.wsdl", 
    pretty_print_xml: true, 
    log: true, 
    env_namespace: :soap, 
    namespaces: {"xmlns:soap" => "http://www.w3.org/2003/05/soap-envelope", "xmlns:soap1" => "urn:website.co.uk/soap:callreport7"}, 
    soap_header: { 
    "soap1:callcreditheaders" => { 
     'soap1:company' => 'XXXX', 
     'soap1:username' => 'XXXX', 
     'soap1:password' => 'XXXX' 
    } 
    } 
) 
response = client.call(:test07a, message: "Test") 

로깅 라인은 나를 위해이 문제를 해결하는 열쇠였다.

0

평소와 같이 : 먼저 SoapUI를 사용하여 유효한 요청을 만듭니다. 그런 다음 Savon에서 동일한 기능을 수행 할 필요는 없습니다.

+0

답장을 보내 주셔서 감사합니다. 요청은 SoapUI에서 유효합니다. Savon에서 요청의 형식을 지정하는 것이 문제입니다. 저는 Savon에게 매우 익숙하며 형식상의 문제가 무엇인지 이해하려고합니다. –