2017-07-26 5 views
6

J'ai un problème que je crois être en ce qui concerne les espaces de noms. Le WSDL peut être téléchargé ici: http://promostandards.org/content/wsdl/Order%20Shipment%20NotificationService/1.0.0/OSN-1-0-0.zipruby ​​savon et wsdl namespacing

Lorsque la demande est généré, il ressemble à ceci:

<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> 

Il en résulte une faute de savon.

Lorsque SoapUI construit la demande en utilisant le même WSDL il ressemble à ce

<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> 

Vous pouvez voir que SoapUI a placé le nom d'utilisateur et mot de passe à l'intérieur de l'espace de noms « shar ». J'ai remarqué que ceci n'est pas directement listé dans le WSDL ou dans n'importe quel fichier XSD directement chargé par le WSDL. Il est chargé quelque chose comme WSDL => fichier XSD => fichier XSD contenant un espace de noms shar. cela pourrait-il être le problème? Comment puis-je ajouter l'espace de noms à seulement 3 des clés? J'utilise savon 2.11.1 et nori 2.6.0

Répondre

0

Je pense que Savon n'interprète pas les fichiers XSD liés, qui sont utilisés ici pour référencer le SharedObject. J'ai eu un problème similaire et la seule solution que j'ai trouvée était d'écrire manuellement la définition des espaces de noms.

Dans votre cas, il pourrait ressembler à ceci:

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