2017-07-26 91 views
6

Mam problem, który moim zdaniem dotyczy przestrzeni nazw. WSDL można pobrać stąd: http://promostandards.org/content/wsdl/Order%20Shipment%20NotificationService/1.0.0/OSN-1-0-0.zipruby ​​savon i wsdl namespacing

Kiedy żądanie jest generowane wygląda to tak:

<soapenv:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://www.promostandards.org/WSDL/OrderShipmentNotificationService/1.0.0/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Body> 
<tns:GetOrderShipmentNotificationRequest> 
    <tns:wsVersion>1.0.0</tns:wsVersion> 
    <tns:id>myusername</tns:id> 
    <tns:password>mypassword</tns:password> 
    <tns:queryType>3</tns:queryType> 
    <tns:shipmentDateTimeStamp>2017-07-19</tns:shipmentDateTimeStamp> 
</tns:GetOrderShipmentNotificationRequest> 
</soapenv:Body> 
</soapenv:Envelope> 

Skutkuje to winy mydła.

Kiedy SoapUI konstruuje żądanie przy użyciu tego samego WSDL wygląda to

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.promostandards.org/WSDL/OrderShipmentNotificationService/1.0.0/" xmlns:shar="http://www.promostandards.org/WSDL/OrderShipmentNotificationService/1.0.0/SharedObjects/"> 
<soapenv:Header/> 
<soapenv:Body> 
    <ns:GetOrderShipmentNotificationRequest> 
    <shar:wsVersion>1.0.0</shar:wsVersion> 
    <shar:id>myusername</shar:id> 
    <shar:password>mypassword</shar:password> 
    <ns:queryType>3</ns:queryType> 
    <ns:shipmentDateTimeStamp>2017-07-19</ns:shipmentDateTimeStamp> 
    </ns:GetOrderShipmentNotificationRequest> 
</soapenv:Body> 
</soapenv:Envelope> 

Widać, że SoapUI umieścił nazwę użytkownika i hasło wewnątrz przestrzeni nazw „shar”. Zauważyłem, że nie jest to bezpośrednio wymienione w pliku WSDL ani w żadnym pliku XSD bezpośrednio załadowanym przez WSDL. Zostaje załadowany plik podobny do WSDL => XSD file => XSD zawierający shar namespace. Czy to może być problem? Jak mogę dodać przestrzeń nazw tylko do 3 kluczy? Używam Savona 2.11.1 i nori 2.6.0

Odpowiedz

0

Myślę, że Savon nie interpretuje połączonych plików XSD, które są używane tutaj do odniesienia do SharedObject. Miał podobny problem i jedynym rozwiązaniem, jakie znalazłem, było ręczne zapisanie definicji przestrzeni nazw.

W twoim przypadku może to wyglądać mniej więcej tak:

client = Savon.client do 
    endpoint "http://localhost/OrderShipmentNotificationService.svc" 
    element_form_default :qualified 
    namespace "http://www.promostandards.org/WSDL/OrderShipmentNotificationService/1.0.0/" 
    namespace_identifier :ns 
    namespaces "xmlns:shar"=>"http://www.promostandards.org/WSDL/OrderShipmentNotificationService/1.0.0/SharedObjects/" 
end 

response = client.call("GetOrderShipmentNotificationRequest") do |locals| 
    locals.message "shar:wsVersion"=>"1.0.0","shar:id"=>"myusername",... 
end